打乱分类时间序列数据
Shuffling a classification timeseries data
我正在处理时间序列二元分类问题。我的每一行代表一个人(我有 N 个消费者),而列是我从他那里得到的单个变量的每日测量值(每个消费者的 K 个测量值)。然后,我需要检测是否有人进行了欺诈(FLAG 1 或 0)。这里有一个小例子:
data = {'CONS_NO': [1,2,3,'N'], 'Day_1': [1, 2, 3, 4], 'Day_2': [200, 321, 0, 128], 'Day_K': [123, 0, 3, 1], 'FLAG':[1,1,0,0]}
# Create DataFrame
df = pd.DataFrame(data)
df
CONS_NO Day_1 Day_2 Day_K FLAG
0 1 1 200 123 1
1 2 2 321 0 1
2 3 3 0 3 0
3 N 4 128 1 0
我的数据集现在的方式是,前 3000 行由欺诈的消费者组成,而其余行由诚实的消费者组成。
我发现我不应该打乱我的列,我需要使用 TimeSeriesSplit()
之类的东西来拆分我的 train/test 集合。但是,可以随机排列我的数据框中的行吗?或者更准确地说,我真的需要这样做吗?它对训练我的模型有帮助吗?
您通常希望打乱数据以确保您的训练集和测试集代表整体(数据)分布。
如果您要在训练和测试之间拆分数据,或者如果您正在进行批量训练,例如,批量 SGD
,则打乱数据很重要。如果它是一个简单的学习算法,例如 MLE
可以在内存中的完整数据集上完成,并且数据集仅用于训练,则不需要洗牌。
要随机播放您的数据:
df = df.sample(frac=1).reset_index(drop=True)
或者您可以使用 sklearn
来打乱和拆分数据:
from sklearn.model_selection import train_test_split
X = df.iloc[:, :-1]
y = df['FLAG']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, shuffle=True)
这篇post对洗牌的重要性进行了很好的讨论。
这是假设时间序列顺序并不重要,i.i.d
,如果您使用传统的监督学习算法,例如逻辑回归。
我正在处理时间序列二元分类问题。我的每一行代表一个人(我有 N 个消费者),而列是我从他那里得到的单个变量的每日测量值(每个消费者的 K 个测量值)。然后,我需要检测是否有人进行了欺诈(FLAG 1 或 0)。这里有一个小例子:
data = {'CONS_NO': [1,2,3,'N'], 'Day_1': [1, 2, 3, 4], 'Day_2': [200, 321, 0, 128], 'Day_K': [123, 0, 3, 1], 'FLAG':[1,1,0,0]}
# Create DataFrame
df = pd.DataFrame(data)
df
CONS_NO Day_1 Day_2 Day_K FLAG
0 1 1 200 123 1
1 2 2 321 0 1
2 3 3 0 3 0
3 N 4 128 1 0
我的数据集现在的方式是,前 3000 行由欺诈的消费者组成,而其余行由诚实的消费者组成。
我发现我不应该打乱我的列,我需要使用 TimeSeriesSplit()
之类的东西来拆分我的 train/test 集合。但是,可以随机排列我的数据框中的行吗?或者更准确地说,我真的需要这样做吗?它对训练我的模型有帮助吗?
您通常希望打乱数据以确保您的训练集和测试集代表整体(数据)分布。
如果您要在训练和测试之间拆分数据,或者如果您正在进行批量训练,例如,批量 SGD
,则打乱数据很重要。如果它是一个简单的学习算法,例如 MLE
可以在内存中的完整数据集上完成,并且数据集仅用于训练,则不需要洗牌。
要随机播放您的数据:
df = df.sample(frac=1).reset_index(drop=True)
或者您可以使用 sklearn
来打乱和拆分数据:
from sklearn.model_selection import train_test_split
X = df.iloc[:, :-1]
y = df['FLAG']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, shuffle=True)
这篇post对洗牌的重要性进行了很好的讨论。
这是假设时间序列顺序并不重要,i.i.d
,如果您使用传统的监督学习算法,例如逻辑回归。