无序类别特征+时间特征
1、基于A/B差值特征
计算类别特征A的组内时间特征B的时间间隔,在推荐系统中,类别特征为商品时,特征B使用浏览时间、购买时间或点击时间,可以表示表示A商品被浏览/购买/点击的时间差。
# 一次差值特征
df['A_B_diff'] = df['B']-df.groupby['A']['B'].shift()
# 二次差值特征
df['A_B_diff2'] = df['B']-df.groupby['A']['B'].shift(2)
2、基于A/B差值特征的统计特征
在计算完A/B差值特征之后,仍可以继续计算该差值特征在类别特征组内的统计学特征,例如均值、方差、最大值、最小值、中位数、偏度、峰度、分位数、众数等。该特征可以很好地反映A在时间戳上的诸多信息,如果基于A与A/B差值特征的最大值和最小值的差值很小或者方差相对很小,这就暗示可能存在较强的周期性,A可能会出现在固定的时间周期内。
df['A_B_diff_sts'] = df.groupby['A']['A_B_diff'].apply(sts)
3、基于A/B差值特征的差值以及其统计特征
将A/B差值特征称为一阶滑动,可以将基于A/B差值特征的差值称为二阶滑动,同样也可以对二阶滑动即行统计值的计算。
df['A_B_diff1_diff'] = df['A_B_diff1'] - df.groupby('A')['A_B_diff1'].shift()
df['A_B_diff1_diff_sts'] = df.groupby('A')['A_B_diff1_diff'].apply(sts)
4、A的第一次出现时间
类别A的数值特征B的第一次出现时间、最后一次出现时间通常具有强的意义。
df['A_B_first'] = df.groupby('A')['B'].first()
df['A_B_last'] = df.groupby('A')['B'].last()
5、距离第一次出现的其他时间特征
# 距离第一次出现的时间
df['B_A_B_first_diff'] = df['B'] - df['A_B_first']
# 距离最后一次出现的时间
df['B_A_B_first_last'] = df['B'] - df['A_B_last']
# 时间gap
df['A_B_gap'] = df['A_B_last'] - df['A_B_first']
# 平均每次出现时间
df['A_B_gap_div_count'] = df['A_B_gap'] / df['A_B_count']