多种方案成单预测比较
1 背景和挖掘目标
基于关键的业务指标进行成单预测,对影响成单的因子了解
2 分析步骤
01 基于关键特征数据底表的分组处理
02 关于机会、名片表的处理 基于业务逻辑或者数据表现进行分组,查看
03 处理成单跨期导致的名片-成单的数据对应问题
04 观察各关键指标对结果的影响大小,并选择有显著影响的特征
05 利用均值原理计算成单
06 Sequential 神经网络进行调参和预测
07 LinearRegression多项式线性回归预测和验证
08 Lasso套索回归预测
09 贝叶斯岭回归
010 核岭回归预测
011 画出结果
3、代码案例
# 目的,基于业务预测成单
import numpy
import pandas
# 1 关于订单表的处理
data = pandas.read_csv(
'D:\\DATA\\pycase\\number2\\project\\pretice\\XZIT.csv' ,
encoding='gbk'
)
data.columns
# 提取关键字段
Data=data[['周','日期','星期','军团','咨询师','学费金额','成单周期','报名人数','机会时间']]
# 根据业务的而需求将成单周期分为以下几个阶段,研究对象为军团
# 查看成单的分布情况
aggResult=Data.groupby(
by=['成单周期']
)['报名人数'].agg({
'成单单数':numpy.sum
})
# 根据分组的情况对成单进行分组有查看
# bins划分数据
bins=[-1,0,1,2,3,6,13,30,1000] # 范围,让标签小于bins
# 分组的自定义标签
labels=['当天成单','1天成单','2天成单','3天成单','4-6天成单',
'7-13天成单','14-30天成单','30以上成单'
]
Data['成单周期分层']=pandas.cut(
Data.成单周期,
bins,
labels=labels
)
# 根据成单分层进行分布分析
AggResult=Data.groupby(
by=['成单周期分层']
)['报名人数'].agg({
'成单单数':numpy.sum
})
# 使用百分比的形式进行数据的直观展现
pAggResult=round(
AggResult/AggResult.sum(),
2
)*100
# 百分数格式设置
pAggResult['成单单数'].map('{:,.2f}%'.format)
# 2、关于机会、名片表的处理 基于业务逻辑或者数据表现进行分组
data2 = pandas.read_csv('D:\\DATA\\pycase\\number2\\project\\pretice\\XZIT2.csv')
data2.dtypes
# 对机会进行分组
aggResult2=data2.groupby(
by=['日期']
)['销售机会数'].agg({
'机会数': numpy.sum
})
## 机会匹配Vlook
DataAgg=pandas.merge(
Data,
aggResult2,
left_on='机会时间',
right_index=True,
how='left'
)
# 由于某些时间段没有对应的数据,所以删除缺失值啊对应的相关数据。
DataAgg=DataAgg.dropna()
# 再次进行分布分析
DaggResult=DataAgg.groupby(
by=['成单周期']
)['报名人数'].agg({
'成单单数':numpy.sum
})
# 根据分组的情况对成单进行分组有查看
# bins划分数据
bins=[-1,0,1,2,3,6,13,30,1000] # 范围,让标签小于bins
# 分组的自定义标签
labels=['当天成单','1天成单','2天成单','3天成单','4-6天成单',
'7-13天成单','14-30天成单','30以上成单'
]
DataAgg['成单周期分层']=pandas.cut(
DataAgg.成单周期,
bins,
labels=labels
)
# 根据成单分层进行分布分析
DataAggResult=DataAgg.groupby(
by=['成单周期分层']
)['报名人数'].agg({
'成单单数':numpy.sum
})
# 使用百分比的形式进行数据的直观展现
pDataAggResult=round(
DataAggResult/DataAggResult.sum(),
2
)*100
pDataAggResult['成单单数'].map('{:,.2f}%'.format)
# 3、两表alphaB匹配,机会匹配成单
DataAggResult['销售机会数']=DataAggResult['成单单数']
# 序列转化时间格式
data2['日期']= pandas.to_datetime(data2['日期'],format='%Y/%m/%d')
# 转化为字符窜格式
data2['日期']=data2.日期.dt.strftime('%Y/%m/%d')
DataAggResult.iloc[0,1]=data2.销售机会数.sum()
DataAggResult.iloc[1,1]=data2[data2.日期<'2018/12/10']['销售机会数'].sum()
DataAggResult.iloc[2,1]=data2[data2.日期<'2018/12/09']['销售机会数'].sum()
DataAggResult.iloc[3,1]=data2[data2.日期<'2018/12/08']['销售机会数'].sum()
DataAggResult.iloc[4,1]=data2[data2.日期<'2018/12/07']['销售机会数'].sum()*159 # 162-3=159
DataAggResult.iloc[5,1]=data2[data2.日期<'2018/12/04']['销售机会数'].sum()*156 # 162-6=156
DataAggResult.iloc[6,1]=da