利用阿里云PAI 实现销量预测

1.Buiness Background

店铺的目标管理是零售管理的重心。本项目开始之前销售目标分解分为3个step。财务团队会在上一财年末将目标分解到店铺和财月。在执行中,每个季度末,大区会对下一季度的目标进行调整,分解到店铺和财月。最后,每个财月快结束时,planning团队会将每月目标细化分解到日。这样的好处是可以按天来追踪销售完成状况,便于店铺间进行对比,同时店铺也可以根据目标值的高低来安排店铺的员工排班。

shop在中国有多家店铺,用人工拆解目标的方法进行目标拆分,一方面考虑因素较少,只是考虑到了历史同期销量,拆分准确率有待提升;另一方面,需要大量人力投入。本项目是利用机器学习综合考虑历史销量、天气、节假日等因素,预测未来一个财月到店铺到天的销量,从而辅助目标分解。

2.Model Framework

shop forecasting 模型是一个集成模型,两个基础模型分别是SARIMAX和LSTM,然后用这两个基础模型的结果按权重进行组合得到最终预测结果。两个基础模型的数据输入类型是一样的,都是历史销售、节假日、天气数据。

SARIMAX和Lstm都是时序模型,对历史特征的覆盖周期有一定要求,一般覆盖周期越长越好,至少覆盖一个周期。店铺根据不同的状态分为OG,移位店铺,新装修店铺,新开店店铺。考虑到pattern覆盖周期的因素,我们只针对OG店铺利用时许模型进行销售预测,进而算出daily sales ratio。对于其他状态的店铺,则利用OG店铺的预测结果进行汇总,测算daily sales ratio.

  • OG店铺:在shop level 直接利用销售预测结果,计算daily sales ratio.
  • None OG & City existed: 对于非OG店铺,但是店铺所在城市存在OG店铺的场景。第一步是将该城市的OG店铺销量汇总到城市级别,然后在城市level计算daily sales ratio。该城市的daily sales ratio即为这类型店铺的daily sales ratio.
  • None OG & City not existed: 对于非OG店铺,并且店铺所在城市也不存在OG店铺的场景。第一步是将店铺所在大区的OG店铺销量汇总到大区级别,然后在大区level计算daily sales ratio。该大区的daily sales ratio即为这类型店铺的daily sales ratio.

3.Model Pipeline

本项目设计有两条pipeline, 一个是for training,一个是for running prediction。这两条pipeline均是每个月运行一次,先是运行training pipeline,生成新的Sarimax和Lstm模型以及两个模型的结果权重,然后运行running prediction的pipeline,输出下一个月的销售预测结果。

在这两个pipeline中,天气数据是由function compute call api存储在OSS中;节假日数据手工上传到OSS中;历史销量数据daily增量的方式存储在maxcompute中。

模型存储在OSS中,运行在Ali PAI DLC中,通过Dataworks进行所有任务的调度。

结果最终在tableau中展示。

3.1 Training Pipeline

3.2 Running Pipeline

4.Model Script Deep Dive

4.1 Repository Structure

模型及相关文档存储在Azure 的 repository shop_sales_forecasting中,目前在shop_fcst_final 分支下,

  1. Ali PAI DSW与 Azure Git Repository交互:描述 DSW与repository之间的交互
  2. forecasting_model: 包含forecasting 模型script

4.1.1 Script of training pipeline

4.1.2 Schedule of scripts in training pipeline

order Schedule Timing Script Output
1 财月倒数第二周周五,周六,周日 FC_Weather_getHistory.py weather_his_YYYYMMdd.csv
2 财月倒数第二周周六 train_sarimax.py tb_dlc_fcst_lstm,tb_dlc_fcst_sarimax
3 财月倒数第二周周六 train_score.py tb_dlc_fcst_score,tb_dlc_fcst_train_combine

4.1.3 Script of running pipeline

4.1.4 Schedule of scripts in running pipeline

order Schedule Timing Script Output
1 财月倒数第二周周五,周六,周日 FC_Weather_getFuture.py weather_40_YYYYMMdd.csv
2 财月倒数第二周周日 predict_sarimax.py tb_dlc_fcst_lstm_predict,tb_dlc_fcst_sarimax_predict
3 财月倒数第二周周日 train_score.py tb_dlc_fcst_predict_combine

4.2 Explanations of important functions

4.2.1 Weather/FC_Weather_getHistory

获取当财月和上一财月的到区的daily 数据,包括wind_degree,max_temperature,min_temperature,wea(天气类型).天气类型简单处理分为大雨、暴雪、大雪、中雨、小雪、小雨、阵雨、阵雪、雨夹雪、晴和其他枚举值。

4.2.2 Prod_Train/utils/Fetch_and_Push

包含3个function,具体如下:

  • get_max_compute_table_sql

    通过sql从maxcompute读取数据,并转换为dataframe

  • get_max_compute_table_df

    通过表名从maxcompute读取数据,并转换为dataframe

  • push_data_maxcompute

    将数据写回maxcompute 相应的table

4.2.3 Prod_Train/utils/preprossing

主要的几个function如下:

  • transform_df

    对df_netsales,df_weather,df_holiday,df_date进行简单处理,主要是统一下字段名。对于weather,主要是将wind_degree(风力)分为1-2级、3-4级、5-7级、8-9级和above10级。

  • get_start_end_date_nm

    获取当财月的第一天和最后一天

  • generate_dataset

    • 处理历史销量数据:将缺失的日期补齐,销量设为0.
    • 处理天气数据:用前一天的温度数据fillna
    • 处理时间字段,增加week_of_year、week_of_month、weekday等特征
    • 将历史销量、天气、节假日consolidate为一个dataframe

4.2.4 Prod_Train/model/sarimax_model

  • sarimax_model_v1

    • handle null 值
    • 处理weather, holiday,week及weekend的特征
    • 正则化特征值,‘is_close’, ‘max_temperature’, ‘weathernetsales’,‘weekend_sea’,
      ‘netsales_weather_ad’, ‘holidaynetsales’,‘windnetsales’,‘y’
    • 输出下一个财月的预测值

4.2.5 Prod_Train/utils/prepare_dataframe_v1

这里主要介绍一个function

  • split_sequences

    按照用历史60个observation来预测未来一天的数据来生成lstm的训练集

4.2.6 Prod_Train/model/lstm_model

  • lstm_model_v1

    • handle null 值
    • 处理weather, holiday,week及weekend的特征
    • 正则化特征值,‘is_close’, ‘max_temperature’, ‘weathernetsales’,‘weekend_sea’,
      ‘netsales_weather_ad’, ‘holidaynetsales’,‘windnetsales’,‘y’
    • 输出下一个财月的预测值

5 Model Deployment

5.1 Dataworks 工作流

工作流在Edw_cl7733项目空间,名为DLC_EDW。

主要节点为shell节点,shell节点实现功能主要为两部分:

  1. 从KMS中取得access_key和access_secret

  2. 创建DLC中的任务
    ##@resource_reference{“kms_demo-1.0-SNAPSHOT-release.jar”}
    #!/bin/bash
    #********************************************************************#
    java -cp kms_demo-1.0-SNAPSHOT-release.jar com.gen.kms.CacheClientEnvironmentSample > ram.info
    ram_info=cat ram.info | awk 'END {print}'
    id=echo $ram_info | awk -F ':' '{print $1}'
    key=echo $ram_info | awk -F ':' '{print $2}'
    rm ram.info
    cat << EOF > jobfile
    name=train-jobpara[0][2]workers=1workerspec={para[0][2]} workers=1 worker_spec=para[0][2]workers=1workers​pec={para[0][9]}
    worker_image=registry-vpc.cn-shanghai.aliyuncs.com/pai-dlc/tensorflow-training:1.15PAI-cpu-py36-ubuntu18.04
    command=python /root/data/shop_fcst_demo/train_sarimax.py ${para[0][1]} ${para[0][4]} para[0][5]train−job{para[0][5]} train-jobpara[0][5]train−job{para[0][2]} $id $key
    data_sources=XXXXXX
    EOF

    /home/admin/usertools/tools/dlc submit tfjob
    –access_id=id−−accesskey=id \ --access_key=id −−accessk​ey=key
    –endpoint=pai-dlc.cn-shanghai.aliyuncs.com
    –region=cn-shanghai
    –job_file=./jobfile
    –thirdparty_lib_dir=/root/data/shop_fcst_demo
    –interactive

5.2 DLC模型部署

设置模型存储位置

利用阿里云PAI 实现销量预测相关推荐

  1. 利用阿里云如何开发一款直播app?

    在开发的过程中应该注意些什么?下面让小编告诉你: 随着互联网的发展,越来越多的人已经加入互联网的行列.而且很多的人也开始直播,和众多的网友分享自己身边事情.互联网还在加速发展,从PC互联网,到移动互联 ...

  2. 杜彪:天猫数据如何运营、变现? 利用阿里云聚石塔在双11的成功案例

    本文作者杜彪,毕业于北京大学计算机系,长期从事人工智能,数据技术研究与应用,国际信息研究学会中国分会副秘书长,北京裕兴科技集团高级顾问. 有一次听闻他利用电商数据做精准营销.没听到他的故事之前,我曾粗 ...

  3. 输入参数的数目不足_机器学习算法—KMEANS算法原理及阿里云PAI平台算法模块参数说明...

    概述: KMEANS算法又被成为K均值算法,是一种常用的聚类算法,由于不需要根据给定的训练集训练模型因此是一种无监督学习算法.其本质是根据选定的参数K将数据分类成K类,在聚类过程中从单一样本开始通过不 ...

  4. 利用阿里云实现异地容灾的解决方案

    一.异地灾备防范于未然 2001年的"911事件"中,没有远程备份的企业都遭受了巨大损失,甚至部分公司因为核心业务部署在公司大楼而又没有远程备份,导致公司业务无法继续运营而倒闭.美 ...

  5. 利用阿里云容器镜像服务下载gcr.io镜像

    背景 由于你懂的原因,国内是没有办法下载gcr.io镜像的,利用docker hub构建GitHub现在又要钱,所以这里利用阿里云容器镜像服务下载gcr.io镜像. 步骤 这里以gcr.io/tekt ...

  6. 利用阿里云免费镜像仓库,实现微服务的k8s部署

    今天的内容给大家介绍下如何利用阿里云提供的免费私人容器镜像服务,来实现对个人项目容器镜像的管理,以及通过k8s集群来发布阿里云私人容器镜像服务中管理的服务.本文适合个人及创业团队学习/使用基于容器.镜 ...

  7. 如何利用阿里云赚钱_5种利用云赚钱的策略

    如何利用阿里云赚钱 现在每个人都在电视上听到云计算. 运营商会将您的联系人存储在云中. 托管公司将在云中托管您的网站. 其他人会将您的照片存储在云中. 但是,您如何利用云赚钱? 首先是忘记基础架构和虚 ...

  8. 利用阿里云搭建NFS服务器

    一.阿里云服务器(ECS) Linux是现在计算机运维的主流服务器,正好阿里云服务器也是目前非常主流的云服务器,我就简单地利用阿里云服务器和Linux配置的NFS服务器和客户端.功能非常简单,但这是第 ...

  9. 如何利用阿里云域名远程访问家中群辉NAS(Docker容器)上的calibre、halo博客?

    看前备注:作者也是小白,只是在自己的摸索中积攒了一点经验,分享给大家.不能保证100%的正确,欢迎大家讨论分享. 我的博客(会同步更新的):陌路遥的博客 文作者:陌路遥/欢迎转载 如何利用阿里云域名远 ...

最新文章

  1. MYSQL人事工资管理系统-插入数据(三)
  2. Android studio | From Zero To One ——安装教程及前期学习总结
  3. 局部和全局引用的操作
  4. Imbalanced data – Finding Waldo
  5. java 自定义运算符_Java中集合的自定义运算符
  6. kali里PHP文件502错误,解决Linux Kali iptables开放22端口失败等一系列问题
  7. VS2013开发Android App 环境搭建
  8. 罗永浩进军乐坛,参加《谁是宝藏歌手》,网友:来祸害音乐圈了?
  9. Python接口自动化之Token详解及应用
  10. linux中文输入法怎么安装目录,Linux怎么安装中文输入法
  11. windows下DOS命令杀掉Nginx应用进程
  12. sublime 常用插件列表
  13. MY CSDB BLOG 第一篇
  14. 计算机c盘装什么,电脑只有一个C盘!怎么为电脑重装系统?
  15. 什么是长连接 | 短连接?
  16. 二维矩阵顺时针旋转90度
  17. 哪上班 | 好工作近在咫尺
  18. java wed的工作流程
  19. 合理使用AutoHotKey+StrokeIt
  20. 线性规划中的对偶(Duality in linear programs)

热门文章

  1. s6730堆叠_华为交换机S6720-EI堆叠示例
  2. FFmpeg学习—ffmpeg 利用 swr_convert 函数将AV_SAMPLE_FMT_S16 转 AV_SAMPLE_FMT_FLTP
  3. 已经阻止此发布者在你的计算机上运行软件win10,关于详解Win10电脑安装软件提示“你必须取消阻止该发布者才能运行此软件”的解决手法...
  4. 易语言取所有配置节名和配置项名
  5. 自然语言处理作业A1
  6. python 求两个list的差集,并集和交集
  7. 酷播云H5播放器自动播放与循环播放
  8. testflight 公开版本中应用90天到期失效了该怎么处理-testflight 到期如何续期
  9. C# 学习笔记 20.网络编程
  10. linux+多个字符分割字符串数组中,String的split()方法可以将字符串按照特定的分隔符拆分成字符串数组...