XGBoost实现门店销售额预测小白入门demo

一、xgboost扩展包安装
1、官网下载xgboost扩展包:
   Python Extension Packages for Windows下载对应版本,win64,python3.6
   https://download.lfd.uci.edu/pythonlibs/rqr3k8is/xgboost-0.7-cp36-cp36m-win_amd64.whl
   (https://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost 扩展包目录)
2、使用pip命令安装:
   在python脚本目录下执行pip命令(本人为: cd D:\work\ide\Anaconda3\Scripts)
   pip install D:\study\ai\7v\packages\xgboost-0.7-cp36-cp36m-win_amd64.whl

二、业务数据准备
1、分析业务场景中可能影响到门店日销售额的所有特征:
   本demo使用的特征包含以下内容:周几、几号、是否节假日、前3天平均、前7天平均、前30天平均、前90天平均、
   上周同天、上个月同天、3个月前同天、6个月同天(实际情况可能还需要更多的特征,但是运行demo已经足够了)
2、对确定的特征数据进行提取,本demo数据统计使用的是spark计算框架,只要拿到特征源数据即可。

三、建立模型
1、特征数据转换:
   将业务数据中取值可以简单枚举的字段转换成包含1个1其它均为0的list(如:星期一为1,0,0,0,0,0,0)
#将数字转为list 如 星期一,只需要传入7,1就会返回  1,0,0,0,0,0,0  one-hot
def number2list(max_num,num):
    return_list = []
    day = int(num)
    for i in range(1, max_num + 1):
        if i == day: return_list.append(1)
        else:return_list.append(0)
    return return_list
2、使用特征数据建立模型
    # 1、读取特征和目标
    print(time() + '-读取特征和目标开始')
    train_and_valid, test = pd.read_csv(tv_features), pd.read_csv(test_features)
    print(time() + '-读取特征和目标开始完成,数据形状:',train_and_valid.shape)
    # 2、获取训练、验证、测试的特征和目标(为了减少代码运行时间,方便测试)
    # 2-1、取训练、验证、测试数据子集
    # 训练、验证(0.99:0.01)
    train,valid = cross_validation.train_test_split(train_and_valid,test_size=0.01,random_state=10)
    # 2-2、解析训练、验证、测试数据的特征和目标
    train_feature,train_target = parse_features_target('-训练数据:',train)
    valid_feature,valid_target = parse_features_target('-验证数据:',valid)
    test_feature,test_target = parse_features_target('-测试数据:',test)
    print(time() + '-获取训练、验证、测试的特征和目标完成')
    # 1、训练、验证数据转换为xgboost矩阵(取目标log是为了数据更稳定)
    dtrain = xgb.DMatrix(train_feature,np.log(train_target))
    dvalid = xgb.DMatrix(valid_feature,np.log(valid_target))
    watchlist = [(dvalid,'valid'), (dtrain,'train')]
    # 2、设置基本参数
    num_boost_round=500
    params = {"max_depth":8,"eta":0.2,"subsample":0.7,"colsample_bytree":0.7,"silent":1,
    "objective":"reg:linear"} #线性回归
    # 3、创建训练模型
    gbm = xgb.train(params,dtrain,num_boost_round,evals=watchlist,feval=rmspe_xg,
    early_stopping_rounds=50,verbose_eval=True)
    print(time() + '获取训练、验证、测试的特征和目标完成')
3、根据迭代收敛情况,进行调参(调参是个高大上的事情,待精通了再聊偷笑
四、评价预测
1、使用测试数据进行预测,并使用实际值对预测结果进行误差分析
    # 1、测试shop_id集合(数据首位)
    shop_id_df = test_feature[str(0)]
    print(time() + '-测试shop_id集合,数据形状', shop_id_df.shape)
    # 2、将测试集代入模型进行预测
    test_probs = gbm.predict(xgb.DMatrix(test_feature))
    print(time() + '-流量预测结果,数据形状',test_probs.shape)
    # 预测目标流量(指数还原)
    predict_flow = list(np.exp(test_probs)) #指数计算
    # 汇总预测结果
    real_predict = zip(list(shop_id_df),list(test_target),predict_flow)
    print(time() + '-预测最终结果汇总(前10):',predict_flow[0:10])
    # 3、对预测结果进行矫正(如果在极值之外就取平均值)
    max_dict,min_dict,ave_dict = get_shop_number_dict()
    # 预测修正结果
    predict_flow_improve = []
    for shop_id,real,predict in real_predict:
        predict0 = predict
        if predict > max_dict[shop_id]:predict = ave_dict[shop_id]
        if predict < min_dict[shop_id]:predict = ave_dict[shop_id]
        predict_flow_improve.append(predict)
        print(time() + '-预测修正结果:','shop_id=',shop_id,'real=',real,'predict0=',predict0,'predict=',predict0)
    # 4、计算误差
    real_predict_improve = zip(list(test_target),predict_flow_improve)
    error = rmse(real_predict_improve)
    print('误差标准差计算:', error)


  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值