货架最低库存

基于货架库存会对货架的销量产生影响的猜想,建立模型求取保证货架活力的最低库存 ,使用货架库存随着时间变化的数据来训练模型。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
from sklearn.model_selection import cross_val_score
datas = pd.read_csv('C:/Users/acer/Desktop/sf-data1.CSV')
datas.head()
 
 dayidsku
01A122493274
11A167385280
21A188452279
31A275823271
41A353800265

观察各货架的库存随着随着时间的变化,发现随着库存越来越低销量存在拐点(库存在低于一定程度时销量慢慢停滞),所以认定货架库存会对货架的销量产生影响的猜想成立

#各货架库存随时间变化的散点图
fig = plt.figure(figsize=(16, 16))
for i, j in zip(list(datas.id.unique()), range(len(list(datas.id.unique())))):
    sp = fig.add_subplot(3,3,j+1)
    plt.scatter(datas[datas.id==i].day,datas[datas.id==i].sku)
    sp.set_title(i)
    sp.set_xlabel('day')
    sp.set_ylabel('sku')

对观测货架的库存按天取均值,得到一组新数据(新的数据代表所有货架每天的库存均值),以这组数据建立模型,并估计保证货架活力的最低库存

sku_mean = list()
for i in list(datas.day.drop_duplicates()):
    sku_mean.append(datas[datas.day==i].sku.mean())
data = pd.DataFrame(dict(day = list(datas.day.drop_duplicates()), sku_mean = sku_mean))
print(data)
plt.scatter(data.day, data.sku_mean)
 
    day    sku_mean
0     1  273.111111
1     2  258.555556
2     3  244.111111
3     4  235.000000
4     5  221.111111
5     6  206.888889
6     7  192.555556
7     8  180.777778
8     9  171.666667
9    10  164.000000
10   11  157.888889
11   12  151.666667
12   13  146.666667
13   14  141.555556
14   15  136.444444
15   16  131.333333
16   17  126.555556
17   18  123.111111
18   19  120.777778
19   20  117.555556
20   21  113.777778
<matplotlib.collections.PathCollection at 0x2ae5afc50>

建立2、3、4次多项式模型,选出最佳模型

day = np.array(data.day).reshape(-1,1)
sku_mean = np.array(data.sku_mean).reshape(-1,1)
degrees = [2, 3, 5]
plt.figure(figsize=(12, 5))
for i in range(len(degrees)):
    ax = plt.subplot(1, len(degrees), i + 1)
    #plt.setp(ax, xticks=(), yticks=())
    
    polynomial_features = PolynomialFeatures(degree=degrees[i],include_bias=False)#使用i次拟合模型
    linear_regression = LinearRegression()#建立线性回归模拟器
    pipeline = Pipeline([("polynomial_features", polynomial_features),
                         ("linear_regression", linear_regression)])#管道函数,包装函数
    pipeline.fit(day, sku_mean)
    scores = cross_val_score(pipeline, day, sku_mean,
                             scoring="neg_mean_squared_error", cv=6)#使用6折交叉函数评估模型
    plt.plot(day, pipeline.predict(day), label="Model")#模型图像
    plt.scatter(day, sku_mean, edgecolor='b', s=20, label="Samples")#散点图
    plt.xlabel('day')
    plt.ylabel('sku')
    plt.legend(loc='best')
    plt.tight_layout()
    print(degrees[i],'次多项式交叉验证得分:',np.round(scores,3))#输出各验证块得分,保留三位小数,scores得分越低越好
    print('截距:', np.round(linear_regression.intercept_, 3))
    print('系数:',np.round(linear_regression.coef_, 3))
    for i in list(datas.id.unique()):
        day = np.array(datas[datas.id == i].day).reshape(-1,1)
        sku = np.array(datas[datas.id == i].sku).reshape(-1,1)
        sku_predict = pipeline.predict(day)
        print('货架', i, '预测值与真实值的方差:',sum(abs((sku-sku_predict))))
2 次多项式交叉验证得分: [-25.407 -11.506 -12.576 -13.136  -4.455 -46.016]
截距: [288.526]
系数: [[-15.836   0.367]]
货架 A122493 预测值与真实值的方差: [108.52726744]
货架 A167385 预测值与真实值的方差: [83.84477861]
货架 A188452 预测值与真实值的方差: [123.39734844]
货架 A275823 预测值与真实值的方差: [154.98522789]
货架 A353800 预测值与真实值的方差: [82.05393589]
货架 A378337 预测值与真实值的方差: [335.99730221]
货架 A555168 预测值与真实值的方差: [131.63246654]
货架 A606732 预测值与真实值的方差: [165.48621026]
货架 A692238 预测值与真实值的方差: [99.87570375]
3 次多项式交叉验证得分: [-224.745   -8.546   -9.205   -5.262   -0.263  -19.648]
截距: [293.182]
系数: [[-1.8114e+01  6.2000e-01 -8.0000e-03]]
货架 A122493 预测值与真实值的方差: [111.66487034]
货架 A167385 预测值与真实值的方差: [77.24853086]
货架 A188452 预测值与真实值的方差: [123.12205415]
货架 A275823 预测值与真实值的方差: [163.83667447]
货架 A353800 预测值与真实值的方差: [85.64801992]
货架 A378337 预测值与真实值的方差: [330.7526821]
货架 A555168 预测值与真实值的方差: [125.29274328]
货架 A606732 预测值与真实值的方差: [152.39309407]
货架 A692238 预测值与真实值的方差: [89.25827524]
5 次多项式交叉验证得分: [-1.287563e+03 -3.652000e+00 -8.510000e-01 -2.406000e+00 -4.585000e+00
 -3.734700e+01]
截距: [280.544]
系数: [[-6.754 -2.239  0.285 -0.013  0.   ]]
货架 A122493 预测值与真实值的方差: [113.84140579]
货架 A167385 预测值与真实值的方差: [64.25593217]
货架 A188452 预测值与真实值的方差: [129.05619528]
货架 A275823 预测值与真实值的方差: [148.43293249]
货架 A353800 预测值与真实值的方差: [92.54495995]
货架 A378337 预测值与真实值的方差: [338.46397757]
货架 A555168 预测值与真实值的方差: [138.63485879]
货架 A606732 预测值与真实值的方差: [149.5886654]
货架 A692238 预测值与真实值的方差: [73.64250533]

根据交叉验证得分、各货架的真实值与预测值差距、各货架的真实值与预测值的总差距这些指标,看到2、3、4次模型之间的误差相差不大, 为了方便球模型减缓点选取三次模型作为预测模型。即:

sku = 293.182 - 18.11x + 0.62x^2 - 0.008*x^3

对模型求斜率渐缓点(对模型求两阶导,再求其两阶导的零点,即为斜率减缓点起点)大致在day=17.222点,此时sku=124.3179,所以若要保证货架活力应保证货架的库存不低于[120,140]

转载于:https://www.cnblogs.com/aioverg/p/11157459.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值