天天看點

(六)機器學習---銷售額預測分析(線性回歸分析案例)

目錄

    • 一: 背景:
    • 二:資料概況分析:
    • 三:單變量分析:
    • 四:相關性分析和可視化:
    • 五:回歸分析:

1: 分析的目的:

對各類因素投入産出比做出評估。

2: 分析的資料:

電視廣告,線上,線下,門店内,微信管道等促銷投入和銷售額之間的關系。

3:資料的說明:

(六)機器學習---銷售額預測分析(線性回歸分析案例)

4: 分析流程:

(六)機器學習---銷售額預測分析(線性回歸分析案例)

1:檢視資料的前5條記錄:

(六)機器學習---銷售額預測分析(線性回歸分析案例)

2:檢視資料的基本資訊:

(六)機器學習---銷售額預測分析(線性回歸分析案例)

3:統計各個列哪些存在空值,以及空值的數量:

由于缺失的不多,後期考慮直接删除。

(六)機器學習---銷售額預測分析(線性回歸分析案例)

1:資料分布資訊:

各個列的最大值,平均值,中位數,衆數等。

(六)機器學習---銷售額預測分析(線性回歸分析案例)

2:使用describe不會統計字元串類型的,是以單獨檢視event列:

發現分為四種促銷:

(六)機器學習---銷售額預測分析(線性回歸分析案例)

3: 檢視四種促銷分别對應的營業額是多少?

(六)機器學習---銷售額預測分析(線性回歸分析案例)

4:檢視四種促銷分别對應的廣告投放量是多少?

(六)機器學習---銷售額預測分析(線性回歸分析案例)

5:one hot 編碼:獨熱碼:

注意:對于person來說這種字元串類型的,我們要進行線性分析,肯定要轉化成數字。如果我們使用0 1 2 3 來區分四種,實際上就是付給每個列一個權重,而這些權重會影響我們的分析。是以是不可取的。

獨熱碼是用向量來存儲列,每列的值就是相等的:

(六)機器學習---銷售額預測分析(線性回歸分析案例)

而pandas中可以使用get_dummies方法,将其中的字元串類型的列,轉化成啞變量,即獨熱碼的形式存儲。

(六)機器學習---銷售額預測分析(線性回歸分析案例)

1: 檢視每個列之間的相關性:

(六)機器學習---銷售額預測分析(線性回歸分析案例)

注意:此時求出來的相關性,并不代表一定相關。是否真正的相關,需要我們根據這幾個列,建構線性回歸模型,進行訓練,然後得到權重,我們才能得出結論。

2:檢視與revenue相關的列的排序:

注意sort_values隻有一列也需要指定按照哪一列進行排序。

(六)機器學習---銷售額預測分析(線性回歸分析案例)

3:使用seaborn檢視local_TV與銷售額之間的關系:

#可視化分析
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
#線性關系可視化
#斜率與相關系數有關
sns.regplot('local_tv','revenue',store)
           
(六)機器學習---銷售額預測分析(線性回歸分析案例)

發現:local_TV與銷售額之間存在一次線性關系。

4: 檢視人員和銷售額之間的關系:

(六)機器學習---銷售額預測分析(線性回歸分析案例)

5: 檢視instore(門店内海報)與限售額之間的關系:

發現是牽強的一次性關系。

(六)機器學習---銷售額預測分析(線性回歸分析案例)

1: 去除空值,然後劃分測試集和訓練集:

# 1:導入線性回歸分析的包和劃分測試集和訓練集的包
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

# 2:去除存在空值的行
store.dropna(inplace=True)

y = store['revenue']
x=store[['local_tv','person','instore']]

# 3: 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(x, y)
           

2:進行歸一化和線性模型進行拟合:

# 1: 導入歸一化函數
from sklearn.preprocessing import StandardScaler
# 2:建立歸一化對象
ss = StandardScaler()
# 3:對訓練集進行歸一化處理和訓練
X_train = ss.fit_transform(X_train)
# 4: 對于測試集也進行歸一化
X_test = ss.transform(X_test)


# 1:建立線性模型對象
model = LinearRegression()
# 2:利用訓練集進行拟合
model.fit(X_train, y_train)
# 3:列印自變量系數
print(model.coef_)
# 4: 列印截距
print(model.intercept_)
           

列印結果:

# 1: 利用測試集進行測試
y_predict = model.predict(X_test)
from sklearn.metrics import mean_squared_error
from math import sqrt
# 2: 擷取均方誤差的開跟值
sqrt(mean_squared_error(y_true=y_test, y_pred=y_predict))