|
- """
- 标题: 新品销量预测
- 功能: 使用LightGBM模型进行建模预测
-
- 主函数 (1) --> train --> LightGBM模型训练模块
- 主函数 (2) --> wmape --> 计算wmape指标
- """
-
-
- import numpy as np
- import lightgbm as lgb
- import joblib
- import warnings
- import data_process
-
-
- class Model_LGBM(object):
- def __init__(self,data_path='data/', model_path='save_model/'):
- self.train_data_path = data_path+'train.csv'
- self.val_data_path = data_path+'val.csv'
- self.test_data_path = data_path+'test.csv'
- self.model_path = model_path
- self.parameters = {
- 'learning_rate': 0.008,
- 'num_boost_round': 800,
- 'boosting_type': 'gbdt',
- 'objective': 'regression',
- 'metric': 'mae',
- 'feature_fraction': 0.9,
- 'bagging_fraction': 0.85,
- #'bagging_freq': 2,
- 'num_leaves': 31,
- 'verbose': -1,
- 'max_depth': -1,
- 'min_data_in_leaf': 30,
- 'nthread': 20,
- }
- self.categorical_feature = ['year_no', 'month_no', 'week_no', 'day_no', 'barndname_full',
- '中国风', 'size', '裤长', '适用人群', '弹力', '材质', '基础大众', '日韩风', '职场', '休闲风',
- '裤门襟', '适用季节', '休闲', '复古风', '商务休闲', '居家', '裤型', '厚度', '旅游', '日常', '腰型']
-
-
- def train(self):
- df_train, df_val, df_test = data_process.dataloading(self.train_data_path, self.val_data_path, self.test_data_path)
- x_train, y_train, x_val, y_val, x_test, y_test = data_process.dataprocess(df_train, df_val, df_test)
- lgb_train = lgb.Dataset(x_train, y_train, free_raw_data=False)
- lgb_dev = lgb.Dataset(x_val, y_val, free_raw_data=False)
- gbm = lgb.train(self.parameters, train_set=lgb_train, valid_sets=[lgb_train, lgb_dev], verbose_eval=10,
- categorical_feature=self.categorical_feature)
- print('LGBM training completed')
- joblib.dump(gbm, self.model_path + 'lgb.model')
-
- #测试
- y_pre = gbm.predict(x_test)
- y_true = df_test['sale_qtty']
-
- #计算指标
- wmape = self.wmape(y_true, y_pre)
- print('wmape :', wmape)
- return wmape
-
- def wmape(self, y, yhat):
- y = np.array(y)
- yhat = np.array(yhat)
- error = np.abs(y-yhat)
- wmape = error.sum()/y.sum()
- return wmape
-
- if __name__ == "__main__":
- warnings.filterwarnings("ignore")
- model = Model_LGBM()
- model.train()
|