【发布时间】:2020-07-28 18:50:45
【问题描述】:
我尝试使用带有时间戳的功能工具来使用分销商过去的决策作为预测变量。 我只有一个数据集作为输入,具有典型的二元分类问题(有 n 行)。有一组分销商(
在计算每个时间戳与分发者关联的平均标签时,尊重时间戳排序非常重要,以避免信息泄露。
这是我对 Pandas 的处理方式:
import pandas as pd
import numpy as np
from datetime import datetime
import featuretools as ft
timestamps = ['2019-01-05-10:36:12', '2019-01-04-11:32:12', '2019-01-03-08:01:03', '2019-01-03-06:32:54',
'2019-01-01-07:30:24', '2018-12-20-04:20:25']
time = [datetime.strptime(x,'%Y-%m-%d-%H:%M:%S') for x in timestamps]
data = {'time': time,
'Distributor': ['A','B','A','B','B','B'],
'Label': [1, 0, 0, 0, 0, 1]}
# Create DataFrame
df = pd.DataFrame(data)
df = df.sort_values(['Distributor','time'])
def past70(g):
g = g.set_index('time').resample('D').last()
g['Past_average_label_per_distributor'] = g['Label'].rolling(70, 0).mean().shift(1)
return g[g.Label.notnull()]
df = df.groupby('Distributor').apply(past70)
df
现在用 pandas 做这件事很乏味,因为我想使用许多原语来解决我的问题(比如我还想要每个分销商过去标签的标准偏差,还想要许多其他变量 grouped_by 分销商使用时间窗口计算)
这是使用功能工具失败的尝试:
import pandas as pd
import numpy as np
from datetime import datetime
import featuretools as ft
timestamps = ['2019-01-05-10:36:12', '2019-01-04-11:32:12', '2019-01-03-08:01:03', '2019-01-03-06:32:54',
'2019-01-01-07:30:24', '2018-12-20-04:20:25']
time = [datetime.strptime(x,'%Y-%m-%d-%H:%M:%S') for x in timestamps]
data = {'time': time,
'Distributor': ['A','B','A','B','B','B'],
'Label': [1, 0, 0, 0, 0, 1]}
# Create DataFrame
df = pd.DataFrame(data)
df = df.sort_values(['Distributor','time'])
cutoff_times = pd.DataFrame({
"index": df.index,
"cutoff_time": df['time']
})
es = ft.EntitySet(id='Sales')
es.entity_from_dataframe(entity_id='Sales', dataframe=df, index='index', make_index=True, time_index='time')
es = es.normalize_entity(base_entity_id='Sales', new_entity_id='Distributors', index='Distributor')
feature_matrix, feature_defs = ft.dfs(entityset=es, target_entity='Sales',
cutoff_time=cutoff_times,
where_primitives=['mean'], features_only=False,
cutoff_time_in_index=False)
feature_matrix # not correct
任何人都会对如何实现这一目标有任何帮助?在文档中似乎找不到类似的东西。然而,这在机器学习预处理中似乎很常见。
【问题讨论】:
-
您能否仔细检查
mean(Distributor.label)的预期输出,并展示如何使用 pandas 获取这些值? -
嗨,为了清楚起见,我已经编辑了上述问题。简而言之,我想在 time_window 上按一个实体(此处为“分配器”)计算基元均值/累加/标准等组,不包括最后一个标签。这背后的想法是,过去(在时间点 T 之前)有良好销售的经销商是购买新记录(在时间点 T 之前)的良好预测指标。
标签: python featuretools