Kaggle比赛——预测未来销售(一)

1、数据来源

  预测未来销售该项目来源于kaggle中的一场比赛的赛题,比赛使用的数据是由日常销售数据组成的时间序列数据集,该数据集由俄罗斯最大的软件公司之一 - 1C公司提供。

2、数据集说明

  数据集下载地址

2、1 文件说明

文件名文件说明包含属性
sales_train.csv训练集(2013年1月至2015年10月的每日历史数据,包括销售额)date、date_block_num、shop_id、item_id、item_price、item_cnt_day
test.csv测试集(预测2015年11月这些商店和产品的销售额)ID、shop_id、item_id
sample_submission.csv格式正确的示例提交文件ID、item_cnt_month
items.csv有关商品/产品的补充信息item_name、item_id、item_category_id
item_categories.csv有关项目类别的补充信息item_category_name、item_category_id
shops.csv有关商店的补充信息shop_name、shop_id

2、2 文件字段说明

字段字段说明
shop_id商店的唯一标识符
item_id产品的唯一标识符
item_category_id项目类别的唯一标识符
item_cnt_day销售的产品数量。您正在预测此度量的每月金额
item_price商品的当前价格
date日期(格式为dd / mm / yyyy)
date_block_num一个连续的月号,用于方便。2013年1月是0,2013年2月是1,…,2015年10月是33
item_name项目名称
shop_name商店名称
item_category_name项目类别的名称
ID表示测试集中的(商店,项目)元组的ID

2、3 商店名称说明(Google翻译过来的)

item_category_nameitem_category_id
PC - 耳机/耳机0
配件 - PS21
配件 - PS32
配件 - PS43
配件 - PSP4
配件 - PSVita5
配件 - XBOX 3606
配件 - XBOX ONE7
门票(号码)8
货物交付9
游戏机 - PS210
游戏机 - PS311
游戏机 - PS412
游戏机 - PSP13
游戏机 - PSVita14
游戏机 - XBOX 36015
游戏机 - XBOX ONE16
游戏机 - 其他17
游戏 - PS218
游戏 - PS319
游戏 - PS420
游戏 - PSP21
游戏 - PSVita22
游戏 - XBOX 36023
游戏 - XBOX ONE24
游戏 - 游戏配件25
Android游戏 - 数字26
MAC游戏 - 数字27
PC游戏 - 其他出版物28
PC电脑游戏 - 收藏版29
PC游戏 - 标准版30
电脑游戏 - 数字31
支付卡(电影、音乐、游戏)32
支付卡 - 直播33
支付卡 - 直播! (数字)34
支付卡 - PSN35
支付卡 - Windows(数字)36
电影院 - 蓝光37
电影院 - 蓝光3D38
电影院 - 蓝光4K39
电影院 - DVD40
电影院 - 收藏家41
书籍 - 艺术书、百科全书42
书籍 - 有声读物43
书籍 - 有声读物(图)44
书籍 - 有声读物1C45
书籍 - 商业文学46
书籍 - 漫画47
书籍 - 计算机文学48
书籍 - 有条理的材料1C49
书籍 - 明信片50
书籍 - 认知文学51
书籍 - 指南52
书籍 - 小说53
书籍 - 数字54
音乐 - 本地CD55
音乐 - 品牌CD制作56
音乐 - MP357
音乐 - 乙烯基58
音乐 - 音乐视频59
音乐 - 礼品版60
礼品 - 属性61
礼品 - 小工具、机器人、体育62
礼品 - 软玩具63
礼品 - 棋盘游戏64
礼品 - 棋盘游戏(紧凑型)65
礼品 - 卡片、贴纸66
礼品 - 发展67
礼品 - 证书、服务68
礼品 - 纪念品69
礼品 - 纪念品(链接)70
礼品 - 袋,相册,鼠标垫71
礼品 - 数字72
程序 - 1C:企业873
程序 - MAC(数字)74
计划 - 家庭和办公室75
节目 - 家庭和办公室(数字)76
课程 - 教育77
课程 - 教育(图)78
服务79
实用程序 - 门票80
纯粹的载体(尖顶)81
纯载体(片)82
电池83

3、项目要求

3、1 评估的要求

  (1) 将均方根误差(RMSE)作为评估提交的度量指标;
  (2) 真实销售量被限制在[0,20]范围以内。

3、2 提交文件格式

  该项目要求预测下个月(第34个月或2015年11月)各个商店的每个产品的销售额。即对于测试集中的每个ID(唯一映射到shop_id与item_id),预测出其下一个月的销售总数。提交的文件格式如下所示:

IDitem_cnt_month
00.5
10.5
20.5
30.5

  PS:最新优化没有同步到博客当中,需要交流的可以邮箱交流:博主邮箱:greatpanc@163.com

以下是一个完整的kaggle房价预测比赛的代码示例。注意,这只是一个示例,并不是唯一的解决方案。 首先,我们需要导入必要的库: ```python import numpy as np import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.ensemble import RandomForestRegressor from xgboost import XGBRegressor from sklearn.metrics import mean_squared_error ``` 接下来,我们可以读取训练和测试数据: ```python train_data = pd.read_csv("train.csv") test_data = pd.read_csv("test.csv") ``` 然后,我们可以进行一些基本的数据探索和清理: ```python # 检查缺失值 print(train_data.isnull().sum()) # 删除缺失值过多的列和无关列 train_data.drop(["Alley", "PoolQC", "MiscFeature", "Id"], axis=1, inplace=True) test_data.drop(["Alley", "PoolQC", "MiscFeature", "Id"], axis=1, inplace=True) # 用中位数替换缺失值 train_data["LotFrontage"].fillna(train_data["LotFrontage"].median(), inplace=True) test_data["LotFrontage"].fillna(test_data["LotFrontage"].median(), inplace=True) train_data["MasVnrArea"].fillna(train_data["MasVnrArea"].median(), inplace=True) test_data["MasVnrArea"].fillna(test_data["MasVnrArea"].median(), inplace=True) train_data["GarageYrBlt"].fillna(train_data["GarageYrBlt"].median(), inplace=True) test_data["GarageYrBlt"].fillna(test_data["GarageYrBlt"].median(), inplace=True) # 对于其他缺失值,用众数替换 for column in train_data.columns: if train_data[column].dtype == "object": train_data[column].fillna(train_data[column].mode()[0], inplace=True) test_data[column].fillna(test_data[column].mode()[0], inplace=True) else: train_data[column].fillna(train_data[column].median(), inplace=True) test_data[column].fillna(test_data[column].median(), inplace=True) # 对于分类变量,进行独热编码 train_data = pd.get_dummies(train_data) test_data = pd.get_dummies(test_data) # 确保训练和测试数据的列数相同 train_labels = train_data["SalePrice"] train_data, test_data = train_data.align(test_data, join="inner", axis=1) ``` 接下来,我们可以对数据进行标准化: ```python scaler = StandardScaler() train_data = scaler.fit_transform(train_data) test_data = scaler.transform(test_data) ``` 然后,我们可以将数据拆分为训练和验证集: ```python X_train, X_val, y_train, y_val = train_test_split(train_data, train_labels, test_size=0.2, random_state=42) ``` 接下来,我们可以训练和评估几个不同的模型: ```python # 线性回归模型 lr = LinearRegression() lr.fit(X_train, y_train) lr_preds = lr.predict(X_val) print("Linear Regression RMSE:", np.sqrt(mean_squared_error(y_val, lr_preds))) # 随机森林模型 rf = RandomForestRegressor(n_estimators=100, random_state=42) rf.fit(X_train, y_train) rf_preds = rf.predict(X_val) print("Random Forest RMSE:", np.sqrt(mean_squared_error(y_val, rf_preds))) # XGBoost模型 xgb = XGBRegressor(n_estimators=100, learning_rate=0.1, random_state=42) xgb.fit(X_train, y_train) xgb_preds = xgb.predict(X_val) print("XGBoost RMSE:", np.sqrt(mean_squared_error(y_val, xgb_preds))) ``` 最后,我们可以用最佳模型生成提交文件: ```python # 训练最佳模型 best_model = XGBRegressor(n_estimators=1000, learning_rate=0.05, random_state=42) best_model.fit(train_data, train_labels) # 生成提交文件 test_preds = best_model.predict(test_data) submission = pd.DataFrame({"Id": test["Id"], "SalePrice": test_preds}) submission.to_csv("submission.csv", index=False) ``` 这就是完整的代码示例。请注意,这只是一个可能的解决方案,你可以根据自己的需求和数据进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值