参与Datawhale数据挖掘实战打卡记录, 旨在记录自己不太懂和和不会的内容.
Datawhale的代码和学习资料见https://github.com/datawhalechina/team-learning-data-mining/tree/master/PurchaseAndRedemptionForecast
一、数据探索与分析
本次数据挖掘实战来源于天池的资金流入流出预测赛事https://tianchi.aliyun.com/competition/entrance/3/information, 数据也可在上面的链接中下载.
首先简单介绍下本次题目, 给出3万支付宝用户一年的交易记录, 在已知各种收益率和银行间拆借利率的情况下预测接下来一个月支付宝的资金流入流出情况.
本次课程使用Jupyter, 这里先简单介绍一下用法.
启动: 在shell模式下进入含有.ipynb文件的目录, 使用shell命令 jupyter notebook
激活jupyter.
Jupyter有两种模式, 当光标在单元格里面时是编辑模式, 否则则为命令行模式, 不同的模式下有不同的快捷键, 查询快捷键的方式是在命令行模式下输入H
.
API: (seaborn文档: https://www.cntofu.com/book/172/README.md)
plt.legend(): 给图像加上图例(图像左上或者右上角的说明, 比如蓝色代表A, 红色代表B)
plt.subplot(nrows, ncols, index, **kwargs) 绘制子图
sns.violinplot() (sns为seaborn库) 小提琴绘图, 类似于箱型图,以基础分布的核密度估计为特征.
sns.distplot() 画出直方图并进行拟合.
sns.barplot() 画出条形图
sns.boxplot() 箱线图, 从上到下的线分别为: 最大值, 上四分位数, 中位数, 下四分位数, 最小值.
sns.heatmap() 热力图
sns.kdeplot() 核密度估计图
sns.scatterplot() 散点图
二、时间序列规则
时间序列(或称动态数列):指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。通常是在相等间隔的时间段内依照给定的采样率对某种潜在过程进行观测的结果。
周期因子的时间序列预测步骤:
- 对周期进行分段:例如按照一个月来计算的周期,分成每一天作为单位计算量,时间段规为每一周,如同上述案例的形式。
- 显现频次:统计最小单位的量,并计算时间段的均量,将已有的数据显现出来。
- 计算周期因子:中位数因子,加权因子
- 预测:根据每个单位的周期因子和base预测最小单位数值,一般base会选择就近的时间段均值。
- 优化Base:优化Base实际是优化时间段的均值,将上述最近单位的数值进行优化-去周期性,再取平均值。即保证了一定的延续性,又去掉了单个单位的周期性因素。
统计学中计算相关性: Pearson, Kendall, Spearman 均是计算n个样本的相关性.
三、特征工程
特征提取主要分为以下几种:
- 基于日期的静态特征
- 基于距离的特征(某一天距特殊周期的距离(例如某一天距离放假还有多少天))
- 波峰波谷特征
- 周期因子作为特征
- 动态时序特征
特征分析可使用各种统计图来进行解析, 例如箱型图、点线图,也可以使用热力图分析各各特征的相关性.
特征筛选:
- 剔除无法有效分割数据集的特征(从统计图中发现两个特征具有相似密度估计图)
- 剔除复共线特征(剔除具有高相关性的特征)
- 使用MVTest挽回一些有依赖性但是不相关的特征(# MVtest Ref: https://github.com/ChuanyuXue/MVTest)
- 选出优胜特征(使用SHAP包获取优胜特征)
- 使用Permutation importance包获取优胜特征
最终使用上述特征进行线性回归得到预测值
画出词云图: from wordcloud import WordCloud