一种基于时间序列分解的商家客流量大数据预测方法
技术领域
本发明属于智能信息处理领域,具体涉及一种基于时间序列分解的商家客流量大数据预测方法。
背景技术
在信息技术高度发达的当今社会,电子商务将传统的商务流程电子化、数字化,一方面以电子流代替了实物流,可以大量减少人力、物力等方面的支出,降低成本,提高效率。与此同时,产生了大量的数据,合理利用数据信息,挖掘信息内部存在的价值,可以提高对事物的认知和了解,进一步优化资源配置,提高经济和社会效益。以数据为原料的数据挖掘和机器学习技术在生活中发挥着越加重要的作用,通过挖掘数据中的“知识”,达到利用数据的目的。
随着移动定位服务的流行,各个移动支付平台逐渐积累了来自用户和商家的海量线上线下交易数据。比如蚂蚁金服的O2O平台“口碑”用这些数据为商家提供了包括交易统计,销售分析和销售建议等定制的后端商业智能服务。通过平台上实时产生的数据,包括商家特征数据、用户浏览记录和用户的支付行为等,都能获得有价值的隐藏信息,能够极大地优化以后的服务质量,合理的分配调度服务资源。
现有的方法通过简单的将历史数据处理后作为训练数据构建模型或者基于历史数据构建时间序列的回归模型、使用时间序列加权等方法构建学习模型,来预测商家客流量,由于没有考虑到多种因素对用户消费行为的影响综合程度,这些方法的预测精度并不是很理想,本发明针对这些方面所做的包括时间序列分解、计算周期因子、获取残差作为标签以及获得去周期base等工作大大提高了针对这一预测工作的预测精度。
本发明提出了一种基于时间序列分解的商家客流量大数据预测方法,同时本发明还涉及到了历史数据的预处理、训练集和测试集的划分、特征工程的构建、特征选择和基于时间序列分解构建学习模型,通过将构建好的学习模型得到的结果进行加权融合,来进行商家的客流量预测。
发明内容
本发明旨在解决以上现有技术的问题。提出了一种能够为商家更为精准的预测客流量,有利于商家更精确的配置资源,提前做好准备以及适时采取宣传措施等的基于时间序列分解的商家客流量大数据预测方法。本发明的技术方案如下:
一种基于时间序列分解的商家客流量大数据预测方法,其包括以下步骤:
101、对消费者和商家的历史消费数据进行预处理;
102、对经过预处理的数据构建特征工程,提取商家特征和用户支付行为特征,获取基本特征,并将基本特征按照特征对的方式两两匹配,形成组合特征,针对大量的组合特征,采用特征选择降维;
103、基于时间序列分解构建客流量预测模型;
104、对已建立模型进行多模型加权融合,预测商家客流量。
进一步的,所述步骤101对历史消费数据进行预处理,包括以下步骤:
S1011、将历史数据分为训练集和测试集两部分,统计历史数据中商家信息的缺失值个数,并统计各个商家的缺失比例,对于缺失比例低于80%的商家,使用该商家对应曜日的均值填充;若缺失比例超过80%,如果近7个曜日有值,则只保留近7个曜日的值,否则将商家对应曜日的值全部清空;
S1012、对经过S1011处理的数据,通过数据可视化分析,将含有明显异常数据的那一周的数据全部剔除;
S1013、根据天气影响外出消费的程度由弱到强分别将描述天气的字段数值化,数值越大,外出消费意愿越小。
进一步的,所述步骤102对经过预处理的数据构建特征工程并选取特征,包括以下步骤:
S1021、根据历史数据提取商家特征和用户支付行为特征,并添加是否为节假日、周末、寒暑假期等影响消费的特征;
S1022、根据商家地理位置信息进行独热编码,针对由此造成的很高维的稀疏特征,进一步做特征选择——根据商家地理位置信息所述省份统计出每个省份拥有商家数并可视化出热力图;
S1023、选取前N1-1个省份,其他省份则合为“其他”,故共得到N1个省份分布;
S1024、将N1个省份中的商家计数并取log,再等值离散到若干个区间;
S1025、通过用户的支付时间反向估计商家的营业时间,根据商家各时段的客流量情况,将商家主要营业时间离散化,具体离散化为全部商家的主要营业时间以及每个商家的主要营业时间;
S1026、通过特征选择来降低特征维度,首先使用训练集训练Xgboost模型,在模型训练完成后输出特征重要性,保留top N2的特征,其中N2为特征总数的70%。
进一步的,所述步骤1022中N1的取值优化过程为:分别取N1的值为3-10之间的数值,进行后续步骤,并将最后预测结果代入评价指标
中,得到的Loss最小值所对应的N1值即为最佳N1值。
进一步的,所述步骤103基于时间序列分解构建客流量预测模型,具体为:
S1031、根据历史数据,以日期为横轴、客流量为纵轴分析出客流量整体变化趋势;
S1032、从客流量整体变化趋势中分解出每周客流量的变化趋势;
S1033、分析每周内每天客流量的变化趋势占本周客流量整体变化趋势的占比;
S1034、分析给定时间段内每周内每个曜日的整体变化趋势;
S1035、根据历史数据,计算每周的客流量周均值,每周内每个曜日客流量的值除以周均值,得到一个比例值,然后按照曜日取比例值的均值和中位数,将均值和中位数分别分配不同权重,通过权重相加计算出周期因子;
S1036、将每个商家历史数据中每个曜日的比例值减去周期因子,作为残差标签;
S1037、将每个商家每个曜日的特征作为样本,给定历史数据的残差标签作为标签,使用Xgboost模型、RF模型、ET模型进行训练,分别得到学习模型;
S1038、对测试集使用学习模型得到预测结果,加上对应的周期因子,再将比例值乘以base值,base值表示去周期客流量均值,得到该商户某个曜日的客流量。
进一步的,所述步骤S1038的base值的选取和优化策略为:去掉周期性因素后再取平均值,用客流量除以周期因子得到每个曜日的去周期客流量,选取距离预测时间最近的一段时间内的去周期客流量均值作为base。
进一步的,所述步骤104对已建立模型进行多模型加权融合,预测商家客流量,具体为:
S1041、对单模型Xgboost调参,寻找一组较优参数,具体为:对学习率、树的棵数、树的max_depth和min_child_weight、gamma、subsample、colsample_bytree、Regularization进行网格调优,进行线下测试,量化结果并作对比,直到性能最优;
S1042、通过最大深度、min_child_weight、学习率、迭代次数这些参数在一定的小范围内随机波动,构建3个Xgboost学习模型;
S1043、将3个Xgboost学习模型和构建的RF学习模型、ET学习模型进行加权融合,得到最终预测结果。
进一步的,所述步骤S1043利用stacking进行加权融合,具体为:在各个学习模型中通过对训练集进行五折交叉验证得到的预测结果作为加权模型的特征输入,以训练集真实结果作为标签,使用单层logistic回归作为组合模型,训练出自动加权融合模型,在预测时,将各个学习模型的预测结果作为模型的输入,即可得到最终的预测结果。
本发明的优点及有益效果如下:
本发明提出了一种基于时间序列分解的商家客流量大数据预测方法对商家的客流量进行预测,同时本发明还涉及到了历史数据的预处理、训练集和测试集的划分、特征工程的构建、特征选择和基于时间序列分解构建学习模型,通过将构建好的学习模型得到的结果进行加权融合,来进行商家的客流量预测。商家客流量的预测问题,是一种基于时间序列的预测问题,根据本发明103,基于时间序列分解的方法来进行一段时期内某个曜日商家客流量的预测,充分挖掘出在不同定义的时间序列下商家客流量的隐藏信息,通过时间序列分解,多维度挖掘基于时间序列的商家客流量变化趋势和特点,并整合不同时间序列下客流量的变化趋势,得到更为精确的基于时间序列的商家客流量变化趋势,同时,通过周期因子、残差标签以及去周期base客流量的数据处理方法,有效的消除了一些隐藏的不利因素的影响,也大大提升了对商家客流量的预测精度和准确性,从而能够更为精准地预测出商家的客流量,减少商家成本,为商家合理资源配置、适时营销宣传等提供更为准确的信息。
附图说明
图1是本发明提供优选实施例优选实施例口碑商家客流量预测流程图;
图2为实施例中含有缺失值的商家与其缺失天数统计图;
图3为实施例中shopID1650的异常数据可视化图;
图4为实施例中商家分布热力图;
图5为实施例中不同区间对评分影响图;
图6为实施例中shop_id为987的商家各时段客流量图;
图7为实施例中shop_id为123的商家各时段客流量图;
图8为实施例中全部商家每天的客流量曲线图;
图9为实施例中shop_id为7的商家客流量曲线图;
图10为实施例中shop_id为7的商家平滑后的曲线图;
图11为实施例中shop_id为1的商家每周一的客流量图;
图12为实施例中模型融合图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、详细地描述。所描述的实施例仅仅是本发明的一部分实施例。
本发明解决上述技术问题的技术方案是:
实施例一
为进一步阐述本发明方案,特以2015年6月25日到2016年10月31日2000家口碑商店的历史人数流量记录以及各个商店的信息、天气情况作为历史数据,来预测2016年11月1日到2016年11月14日未来14天口碑商家客流量为例,对本技术方案进行详尽阐述。获取的信息是店铺(实体店)过去每天的客流量(即每天顾客的支付次数,同一顾客支付多次算多次客流量次数),预测店铺未来14天每天的客流量。由过去外推未来,这是典型的时间序列问题。像支付数据、客流量数据、交通数据等,具有明显的周期性。从预测的角度说,周期性是核心。图1为本实施例提供的一种基于时间序列分解的商家客流量大数据预测方法流程图;
步骤1:通过口碑平台获取2000家口碑商店2015年6月25日到2016年10月31日的商家特征数据、用户支付行为、用户浏览行为数据,其中,在商家特征数据中,shop_id为商家id,用如000001的整数表示;city_name为市名,以汉字字符表示,如“北京”;location_id为商家所在位置编号,以离散的编号表示,如001,位置接近的商家具有相同的编号,即表示某个片区的商家;per_pay表示人均消费(数值越大消费越高),数据中用数值表示,如3;score表示对商家的综合评分(数值越大评分越高),用数值表示,如3;comment_cnt表示对商家的评论数(数值越大评论越多),用数值表示,如3;shop_level为门店的等级(数值越大门店等级越高),用数值表示,如1;cate_1_name是表示美食的一级品类名称,cate_2_name是表示小吃的二级分类名,cate_3_name是表示其他小吃的三级分类名称;在用户的支付行为数据中,包含shop_id即与商家特征数据的商家id相对应;user_id表示用户的id,表示如0000000001;time_stamp表示用户支付时间,时间格式为:2015-10-1011:00:00;在用户浏览行为数据中,user_id与用户支付行为数据中的用户id相对应;shop_id与商家特征数据中的商家id相对应;time_stamp表示浏览时间,格式同支付时间;
步骤2:对步骤1中的历史数据进行数据预处理。首先,在本实施例中,由于用户支付时间和用户浏览时间命名相同,先将用户浏览行为中的time_stamp特征名修改为time_stamp_look,并将三个历史数据整合为一个数据集。接下来,搜集与历史数据时间段相符合的历史天气数据,将以上数据整合为一个数据集后,分为训练集和测试集两部分,一般根据情况灵活分配,针对商家客流量预测问题,一般来说,选取最后一个月、最后14天或者最后7天的数据作为测试集,在此,我们选取最后14天的数据作为测试集;在数据收集过程中,由于各种原因可能造成数据集不完整,而该问题将严重影响数据挖掘的质量和结果的稳健性。因此,对缺失值进行补全就显得尤为重要。统计历史数据中商家信息的缺失值个数,并进一步计算出商家信息的缺失比例,例如商家A在历史数据中所有的周一的客流量信息均缺失,则该商家客流量信息的确实比例为100%。针对缺失比例的问题做处理时,对于缺失比例低于80%的商家信息,使用该缺失值所对应的商家对应曜日的均值进行填充;在缺失比例超过80%的情况下,如果近7个曜日有值,则只保留近7个曜日的值,将其余对应曜日的值清空,否则将商家对应曜日的值全部清空,用Null表示,在本实施例中,含有缺失值的商家与其缺失天数如图2所示;
图2显示了含有缺失值的商家及其缺失的天数,其中横轴是商家的ID,纵轴是缺失天数。由于十月的最后三个周的参考价值较高,所以从2016年10月9日开始统计每个商家缺失的总天数(共计23天)。从上图可以看出,shopID_1824的缺失天数高达21天,即缺失比率高达91%。对于缺失比例低于80%的情况,使用对应曜日的均值填充这些缺失值。例如:缺失值当天是周一,则将该店铺所有周一的数据求取均值并填入;
通过数据可视化技术分析数据观察是否存在明显异常的数据,针对明显异常数据,为了减少其带来的负面影响,直接将其所在的那一周的数据全部剔除掉。使用shopID1650举例,横坐标是日期(2016年9月1日至2016年10月31日),纵坐标为每天的客流量,黑色虚线为每日造成消费人数流量,绿色虚线为每日中午消费人数流量,红色虚线为每日晚上消费人数流量。
从图3可以看出,虽然该商家的客流量没有缺失,但从红色方框中最后几天可以明显看出异常,故直接将这周的数据剔除;
历史数据中的天气字段都为中文字段,包含了很多含义相同而描述不同的字段。比如天气类型有晴、多云、阴、阵雨、雷阵雨、雾霾等单一天气类型,以及“阴转小雨”和“小雨转阴”等组合天气类型。对于单一天气类型,直接根据影响数值化,对于类似“阴转小雨”和“小雨转阴”的天气类型,则视为同一种天气处理,且视为影响程度较大的天气类型处理,如将“阴转小雨”和“小雨转阴”都视为“阴转小雨”。然后根据天气影响外出消费的程度由弱到强分别将描述天气的字段数值化为0到7的8个整数值,数值越大,外出消费意愿越小,即越不利于客流量的增长;
步骤3:对通过步骤2处理的数据集进行特征构建。从数据中提取商家特征和用户支付行为特征,如商家地理位置、日期时间等等,并添加是否为节假日、周末、寒暑假期以及这些假日对消费行为的影响力等影响消费的特征,开始的时候尽可能多地从数据中提取基础特征,并根据用户性别、支付时间、商店类型等建立组合特征,充分挖掘信息内在联系,例如女性用户更可能在傍晚散步后到甜品店来份甜品来奖励自己,具体所选择的特征部分如下:商家id、商家所属城市市名、商家所在位置、人均消费(数值越大消费越高)、商家的综合评分(数值越大评分越高)、对商家的评论数(数值越大评论越多)、门店的等级、美食的一级品类名称、小吃的二级分类名、小吃的三级分类名称、用户支付时间、浏览时间、平均浏览/支付的比值、平均每天开店时间、关店时间、开店总时长、首次营业日期、非节假日销量中位数、节假日/非节假日销量比值、是否周末、是否长假(中秋等)、是否暑假、是否加班、周末第几天以及反序、上班第几天以及反序、离散曜日、使用离散曜日*历史流量作为组合特征、每3小时温度、降雨量、人体舒适度、是否节前、是否节后;趋势特征:不同大小的窗口做差分特征,从训练集开始按时间编号,训练集使用3个月的数据,按天编号1~90,预测集91~150,按周编号,按月编号等等;
通过构建的特征,提取商家的地理位置信息,对该信息进行独热编码,针对在独热编码过程中造成的高维稀疏特征问题,进一步做特征选择——根据商家地理位置信息包含的省份信息,统计出每个省份拥有商家数并可视化出热力图,根据省份所含商家数对个省份进行降序排序;选取前N1-1个省份,其他省份则合为“其他”,最终可得到N1个省份分布。其中,N1的取值优化过程为:分别取N1的值为3-10之间的整数,进行后续步骤,并将最后预测结果代入评价指标
中,得到的Loss最小值所对应的N1值即为最佳N1值,在这里,经过实验选取的N1的值为7。口碑商家数据提供了中国各省的商家,在此,首先统计了每个商家属于哪个省份,然后对省份含有的商家数量分别计数。图4可视化了商家的分布热力图,颜色越深代表数量越多,其中数量最多的几个省份为北京、上海、浙江、广东、江苏、湖北。为了减少特征的维数,重点考虑这六个省份,其余的省份则用“其他”字段表示。商家分布热力图如图4所示;
将7个省份中的商家计数并取log,再等值离散到若干个区间,在此分别尝试了离散到3-10个区间的情况,通过使用交叉验证的方法,发现在离散到6个区间具有更优的结果。例如将商家A所在城市离散到一个6维向量,向量“100000”表示该商家被判定在第一个区间。不同的区间对评分的影响如下图(横轴表示区间个数,纵轴表示Loss)。不同的区间对评分的影响如图5;
将商家产生客流量的主要时间段离散化,以便提取出更有价值的、可以更明确看出数据规律的信息。主要是通过客流量产生的时间,即用户的支付时间,来反向得到商家的营业时间,再根据商家营业时间内各时段的客流量情况,将商家主要营业时间离散化,具体离散化为全部商家的主要营业时间以及每个商家的主要营业时间,例如全部商家的主要营业时间为早午晚三个时间段,而商户A的主要营业时间为早晚,则商户A的主要营业时间表示为101。这样就可以得到对商家而言更有针对性的预测信息,大大提升预测精度。图6和图7分别描述了shop_id为987和321的商家各时段的客流量情况,其中横轴为日期,纵轴为客流量,黑色虚线、绿色虚线、红色虚线为每日早上、中午、晚上消费人数流量。
对比图6和图7可知,不同的商家的主要营业时间可能是不一样的。例如shop_id为987的店铺主要营业时间是中午,而shop_id为123的店铺主要营业时间是晚上。所以构建一个三维特征。“100”表示主要早上营业,“010”表示主要晚上营业,“001”表示主要晚上营业;
步骤4:通过上面的步骤,产生了大量的基础特征和组合特征,大量特征的存在可能造成特征冗余或者过拟合问题,影响预测精度,需要通过特征选择来降低特征维度。首先使用训练集训练Xgboost模型,在模型训练完成后输出特征重要性,保留top N2的特征,在此,N2为特征总数的70%。
步骤5:基于时间序列分解构建客流量预测模型。根据历史数据,以日期为横轴、分别以全部商家的总客流量、各个省份商家的总客流量为纵轴,可视化数据,并分析给定时间段内客流量整体变化趋势。从宏观的角度来看,口碑平台是从2015年06月开始上线运行的,所以用户总数是呈现一个总体上升的趋势,这种趋势,正是解决本问题的关键,姑且推测消费总人数会随着用户总数的增加而增加。图8为所有商家每天的客流量图,其中横轴是日期,纵轴是客流量。可以看到,消费总人数也是呈现总体上升的趋势,这与推测是一致的。即可以认为在未来的一段时间内,消费的人数也会呈现出总体上升的趋势。
从客流量整体变化趋势中分解出每周客流量的变化趋势,即将时间段分解为每周,以日期为横轴、每天的客流量为纵轴,分析给定时间段内客流量变化趋势。从微观的角度来看,对于单个商家来说,由于目标是预测每天的客流量,如果其客流量有较强的波动,模型的表现往往不是很好。图9为shop_id为7的商家的客流量曲线,其中横轴是日期,纵轴是客流量。由图9可以看出该商家的客流量近似以7天作为一个周期,通过多次可视化商家的客流量曲线,可以发现客流量常以7天为周期,因此将时间序列分解成每周消费人流量总数和每个曜日在当前周所占的比例,这样就达到了平滑曲线的目的。shop_id为7的商家平滑后的客流量曲线如图10所示,所示曲线明显比图9所示的曲线平稳,这样更有利于预测。
进一步将时间序列分解为每周的每天,即分析每周内每天客流量的变化趋势占本周客流量整体变化趋势的占比;
对时间序列纵向提取分解,将在历史数据中每个曜日的客流量信息提取出来进行分析,即分析历史数据中每个曜日整体客流量变化趋势和给定时间段内每个曜日的客流量变化趋势。根据提供的数据,可以对每个商家每个曜日寻找一个全局最优。以shop_id为1的商家周一的数据为例,在历史数据中统计出每个周一的值,对于每一个周一的值,使用赛题给出的评价公式去验证其他的周一的值,进而得到全局Loss最小的周一的值。shop_id为1的商家每周一的客流量如图11;
根据历史数据,计算每周的客流量周均值,将每周内每个曜日客流量的值除以周均值,得到一个比例值,然后按照曜日取比例值的均值和中位数,将均值和中位数分别分配不同权重,通过权重相加计算出周期因子,在此分别为均值和中位数指定权重为0.3和0.7;
用每个商家历史数据中每个曜日的比例值减去周期因子,作为残差标签,这里使用残差标签,能够进一步消除信息中隐藏的因素对预测结果的不利影响,提升预测精度;
步骤6:根据分好的、经过以上步骤处理的训练集和测试集,将残差作为标签,使用Xgboost(eXtreme Gradient Boosting)模型、RF(Random Forest)模型、ET(extratrees)模型进行训练,分别得到学习器。将测试集使用学习模型得到的预测结果,与对应的周期因子求和,用所求值再乘以base,得到需要预测的某商户某个曜日的客流量。base值的选取和优化策略为:将最后14天中每个曜日的客流量去掉周期性因素后再取平均值。去掉周期性因素的具体做法是用客流量除以周期因子,得到每个曜日的去周期客流量,选取距离预测时间最近的一段时间内(14天)的去周期客流量均值作为base。
步骤7:对已经训练好的学习器进行多模型加权融合,预测商家客流量。对单模型Xgboost调参,寻找一组较优参数,具体为:对学习率、树的棵数、树的max_depth和min_child_weight、gamma、subsample、colsample_bytree、Regularization进行网格调优,进行线下测试,量化结果并作对比,直到性能最优;通过最大深度、min_child_weight、学习率、迭代次数这些参数在一定的小范围内随机波动(±10%),构建3个Xgboost学习模型;将3个Xgboost学习模型和构建的RF学习模型、ET学习模型进行加权融合,得到最终预测结果。其中,利用stacking进行加权融合,具体为:在各个学习模型中通过对训练集进行五折交叉验证得到的预测结果作为加权模型的特征输入,以训练集真实结果作为标签,使用单层logistic回归作为组合模型,训练出自动加权融合模型,在预测时,将各个学习模型的预测结果作为模型的输入,即可得到最终的预测结果。加权融合模型如图12所示。
以上这些实施例应理解为仅用于说明本发明而不用于限制本发明的保护范围。在阅读了本发明的记载的内容之后,技术人员可以对本发明作各种改动或修改,这些等效变化和修饰同样落入本发明权利要求所限定的范围。