网站建设与推广销售户话术,淘宝客优惠卷网站模板,wordpress下载器插件,淘宝网卖家中心入口在本文中#xff0c;我们将尝试实现一个机器学习模型#xff0c;该模型可以预测在不同商店销售的不同产品的库存量。
导入库和数据集
Python库使我们可以轻松地处理数据#xff0c;并通过一行代码执行典型和复杂的任务。
Pandas -此库有助于以2D阵列格式加载数据帧#…在本文中我们将尝试实现一个机器学习模型该模型可以预测在不同商店销售的不同产品的库存量。
导入库和数据集
Python库使我们可以轻松地处理数据并通过一行代码执行典型和复杂的任务。
Pandas -此库有助于以2D阵列格式加载数据帧并具有多种功能可一次性执行分析任务。Numpy - Numpy数组非常快可以在很短的时间内执行大型计算。Matplotlib/Seaborn -这个库用于绘制可视化。Sklearn -此模块包含多个库这些库具有预实现的功能以执行从数据预处理到模型开发和评估的任务。XGBoost -这包含eXtreme Gradient Boosting机器学习算法这是帮助我们实现高精度预测的算法之一。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn import metrics
from sklearn.svm import SVC
from xgboost import XGBRegressor
from sklearn.linear_model import LinearRegression, Lasso, Ridge
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error as maeimport warnings
warnings.filterwarnings(ignore)现在让我们将数据集加载到panda的数据框中并打印它的前五行。
df pd.read_csv(StoreDemand.csv)
display(df.head())
display(df.tail())如我们所见我们有10家商店和50种产品的5年数据可以计算得
(365 * 4 366) * 10 * 50 913000现在让我们检查一下我们计算的数据大小是否正确。
df.shape输出
(913000, 4)让我们检查数据集的每列包含哪种类型的数据。
df.info()根据上面关于每列数据的信息我们可以观察到没有空值。
df.describe()特征工程
有时候同一个特征中提供了多个特征或者我们必须从现有的特征中派生一些特征。我们还将尝试在数据集中包含一些额外的功能以便我们可以从我们拥有的数据中获得一些有趣的见解。此外如果导出的特征是有意义的那么它们将成为显著提高模型准确性的决定性因素。
parts df[date].str.split(-, n 3, expand True)
df[year] parts[0].astype(int)
df[month] parts[1].astype(int)
df[day] parts[2].astype(int)
df.head()无论是周末还是工作日都必须对满足需求的要求产生一定的影响。
from datetime import datetime
import calendardef weekend_or_weekday(year,month,day):d datetime(year,month,day)if d.weekday()4:return 1else:return 0df[weekend] df.apply(lambda x:weekend_or_weekday(x[year], x[month], x[day]), axis1)
df.head()如果有一个列可以表明某一天是否有任何假期那就太好了。
from datetime import date
import holidaysdef is_holiday(x):india_holidays holidays.country_holidays(IN)if india_holidays.get(x):return 1else:return 0df[holidays] df[date].apply(is_holiday)
df.head()现在让我们添加一些周期特性。
df[m1] np.sin(df[month] * (2 * np.pi / 12))
df[m2] np.cos(df[month] * (2 * np.pi / 12))
df.head()让我们有一个列其值指示它是一周中的哪一天。
def which_day(year, month, day):d datetime(year,month,day)return d.weekday()df[weekday] df.apply(lambda x: which_day(x[year],x[month],x[day]),axis1)
df.head()现在让我们删除对我们无用的列。
df.drop(date, axis1, inplaceTrue)可能还有一些其他相关的特征可以添加到这个数据集中但是让我们尝试使用这些特征构建一个构建并尝试提取一些见解。
探索性数据分析
EDA是一种使用可视化技术分析数据的方法。它用于发现趋势和模式或在统计摘要和图形表示的帮助下检查假设。 我们使用一些假设向数据集添加了一些功能。现在让我们检查不同特征与目标特征之间的关系。
df[store].nunique(), df[item].nunique()输出
(10, 50)从这里我们可以得出结论有10个不同的商店他们出售50种不同的产品。
features [store, year, month,\weekday, weekend, holidays]plt.subplots(figsize(20, 10))
for i, col in enumerate(features):plt.subplot(2, 3, i 1)df.groupby(col).mean()[sales].plot.bar()
plt.show()现在让我们来看看随着月末的临近库存的变化情况.
plt.figure(figsize(10,5))
df.groupby(day).mean()[sales].plot()
plt.show()让我们画出30天的表现。
plt.figure(figsize(15, 10))# Calculating Simple Moving Average
# for a window period of 30 days
window_size 30
data df[df[year]2013]
windows data[sales].rolling(window_size)
sma windows.mean()
sma sma[window_size - 1:]data[sales].plot()
sma.plot()
plt.legend()
plt.show()由于sales列中的数据是连续的让我们检查它的分布并检查该列中是否有一些离群值。
plt.subplots(figsize(12, 5))
plt.subplot(1, 2, 1)
sb.distplot(df[sales])plt.subplot(1, 2, 2)
sb.boxplot(df[sales])
plt.show()高度相关的特征
plt.figure(figsize(10, 10))
sb.heatmap(df.corr() 0.8,annotTrue,cbarFalse)
plt.show()正如我们之前所观察到的让我们删除数据中存在的离群值。
df df[df[sales]140]模型训练
现在我们将分离特征和目标变量并将它们分为训练数据和测试数据我们将使用这些数据来选择在验证数据上表现最好的模型。
features df.drop([sales, year], axis1)
target df[sales].valuesX_train, X_val, Y_train, Y_val train_test_split(features, target,test_size 0.05,random_state22)
X_train.shape, X_val.shape输出
((861170, 9), (45325, 9))在将数据输入机器学习模型之前对其进行标准化有助于我们实现稳定和快速的训练。
# Normalizing the features for stable and fast training.
scaler StandardScaler()
X_train scaler.fit_transform(X_train)
X_val scaler.transform(X_val)我们将数据分为训练数据和验证数据并对数据进行了归一化。现在让我们训练一些最先进的机器学习模型并使用验证数据集从中选择最佳模型。
models [LinearRegression(), XGBRegressor(), Lasso(), Ridge()]for i in range(4):models[i].fit(X_train, Y_train)print(f{models[i]} : )train_preds models[i].predict(X_train)print(Training Error : , mae(Y_train, train_preds))val_preds models[i].predict(X_val)print(Validation Error : , mae(Y_val, val_preds))输出
LinearRegression() :
Training Error : 20.902897365994484
Validation Error : 20.97143554027027[08:31:23] WARNING: /workspace/src/objective/regression_obj.cu:152:
reg:linear is now deprecated in favor of reg:squarederror.
XGBRegressor() :
Training Error : 11.751541013057603
Validation Error : 11.790298395298885Lasso() :
Training Error : 21.015028699769758
Validation Error : 21.071517213774968Ridge() :
Training Error : 20.90289749951532
Validation Error : 20.971435731904066