写在前面的话
我不知道你有没有这种感受,你知道要进行数据探索,特征工程,但是你还是没有点点感觉,在你确定一个,然后魔改,分数上去了。数据处理就像是一场‘寻宝之旅’,不经意间的Idea带来不一样的结果,有种小小的成就感。
1.智能供应链的特征分析
1.1RFM指标
- Recency,最近一次消费时间间隔
- Frequency,消费频率,一段时间(比如1年)内的消费次数
- Monetary,消费金额,一段时间(比如1年)内的消费金额
比如今天8月22日,用户A在商店里购买了商品,上一次购买是8月15日,请问Recency=? - 每个指标越大=>用户价值越高,用3个指标作为XYZ坐标轴,将空间分成8个部分进行分析
1.1.1RFM指标使用场景
一个店铺,某个月收入大幅下跌60%,通过数据分析,发现原来几个重要的用户被竞争对手挖走了(这几个用户贡献了店铺60%的收入)
- 出 现 这 个 问 题 的 原 因 是 什 么 ? \color{red}出现这个问题的原因是什么? 出现这个问题的原因是什么?
因为店主没有对用户分类,也就是所有用户都采取相同的运营决策 => 用户分类,识别有价值的用户
比如第1类用户,RFM每个指标都很高的用户,是最重要的用户(最近一次消费较近,消费频率高,消费金额高)=> 要提供vip服务
1.1.2RFM指标计算
- Step1,计算用户的R、F、M打分
- Step2,计算平均值
- Step3,用户分类
- Step4,对应表格,找到用户属于哪个分类
用户1:重要挽留用户(分类4)
用户2:一般价值用户(分类5)
1.2分位数(quantile)
四分位数,把数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数
第1四分位数 (Q1),也叫“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字
第2四分位数 (Q2),也叫“中位数”,等于该样本中所有数值由小到大排列后第50%的数字
第3四分位数 (Q3),也叫“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字
1.2.1分位数的计算
在计算的过程中,考虑p分位,当p=0.25 0.5 0.75 时,相当于计算四分位数
pos = 1+(n-1)*p
mport pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[1, 1], [2, 10], [3, 100], [4, 1000]]), columns=['a', 'b'])
print("原始数据:")
print(df)
print("当p=0.1时,column a和b的分位数")
print(df.quantile(0.1))
print(df.quantile([0.25, 0.75]))
# 计算a列
pos = 1 + (4 - 1)*0.1 = 1.3fraction = 0.3result = 1 + (2 - 1) * 0.3 = 1.3
# 计算b列
pos = 1.3
result = 1 + (10 - 1)* 0.3 = 3.7
# (n-1)*p的结果中整数部分a, 小数部分为b
# pos = a+1
# 最终的结果为df[pos]+(df[pos+1]-df[pos])*b
1.3LDA
LDA,即线性判别分析(Linear Discriminant Analysis)。LDA的目的是进行分类,思想就是:最大化类间方差与最小化类内方差,即减少分类内部之间的差异,增加不同分类之间的差异
假设有红蓝两类样本,按照LDA的思想,对于二分类问题,要找一条直线,使得样本在线上的投影满足上述条件
可以看到两条曲线,LD1和LD2:
在LD1的投影,两个类间距较大
在LD2的投影,间距很小,几乎重合
这就满足了最大化类间方差,和最小化类内方差