? 回歸分析是統計學的核心。它其實是一個廣義的概念,指那些用一個或多個預測變量來預測響應變量的方法。通常,回歸分析可以用來挑選與響應變量相關的解釋變量,可以描述兩者的關系,也可以生成一個等式,通過解釋變量來預測響應變量。
? 下面介紹如何用R函數擬合OLS回歸模型、評價擬合優度、檢驗假設條件以及選擇模型,為了能夠恰當地解釋OLS模型的系數,數據必須滿足以下統計假設↓
正態性:對于固定的自變量值,因變量值成正態分布。
獨立性:Yi值之間相互獨立。
線性:因變量與自變量之間為線性相關。
同方差性:因變量的方差不隨自變量的水平不同而變化。也可稱作不變方差,但是說同方差性感覺上更犀利。
? 如果違背了以上假設,統計顯著性檢驗結果和所得的置信區間就很可能不精確了。而現在機器學習中的回歸都完全忽略了這一點,它認為現在的數據都是大數據了,其實,很多時候我們得到的不是所謂的大數據。
? 在R中,擬合線性模型最基本的函數就是lm(),格式為:
fit
? 其中,formula指要擬合的模型形式,data是一個數據框,包含了用于擬合模型的數據。結果對象存儲在一個列表中,包含了所擬合模型的大量信息。
表達式(formula)形式如下↓
Y ~ X1 + X2 + ... + Xk
~ 左邊為響應變量,右邊為各個預測變量,預測變量之間用 + 符號分隔。
? 擬合模型后,將這些函數應用于lm()返回的對象,可以得到更多額外的模型信息。
summary():展示擬合模型的詳細結果coefficients():列出擬合模型的模型參數(截距項和斜率)confint():提供模型參數的置信區間(默認95%)fitted():列出擬合模型的預測值residuals():列出擬合模型的殘差值anova():生成一個擬合模型的方差分析表,或者比較兩個或更多擬合模型的方差分析表vcov():列出模型參數的協方差矩陣AIC():輸出赤池信息統計量plot():生成評價擬合模型的診斷圖predict():用擬合模型對新的數據集預測響應變量值
? 當回歸模型包含一個因變量和一個自變量時,我們稱為簡單線性回歸。
? 當只有一個預測變量,但同時包含變量的冪時,我們稱為多項式回歸。
? 當有不止一個預測變量時,則稱為多元線性回歸。
? 先從一個簡單的線性回歸例子開始,然后逐步展示多項式回歸和多元線性回歸↓
【簡單線性回歸】
? 數據準備,數據還是模擬電商的交易數據。
setwd("E:/R/基礎/data")library(xlsx)df = read.xlsx("模擬相關數據.xlsx",1,encoding = "UTF-8")
fit summary(fit)
? 通過輸出結果,可以得到預測等式:每日訂單數=19.4+0.0236*每日UV數,相當于,每增加42個UV數,就能帶來一個新的訂單。因為沒有用戶登錄就不可能有訂單,所以沒必要給截距項一個物理解釋,它僅僅是一個常量調整項;在Pr(>|t|)欄,可以看到回歸系數顯著不為0(p<0.001);R平方項(0.6987)表明模型可以解釋69.87%的方差,它也是實際和預測值之間相關系數的平方;
擬合模型的預測值
fitted(fit)
擬合模型的殘差值
residuals(fit)
plot(df$UV,df$訂單數, xlab="每日UV數", ylab="每日訂單數")abline(fit,col='red',lwd=2)
【多項式回歸】
fit2 data=df)
? I(UV^3) 表示向預測等式添加一個UV的立方項。先試了一下平方項,發現3次項擬合效果更好。
? 新的預測等式為:每日訂單數=68.32+9.602e-03*每日UV數+1.389e-10*每日UV數的平方。
plot(df$UV,df$訂單數, xlab="每日UV數", ylab="每日訂單數")lines(df$UV,fitted(fit2),col='#0AC941',lwd=2)
【多元線性回歸】
? 當預測變量不止一個時,簡單線性回歸就變成了多元線性回歸,分析也稍微復雜些。多元回歸分析中,第一步最好檢查一下變量間的相關性。cor()函數提供了二變量之間的相關系數,car包中scatterplotMatrix()函數則會生成散點圖矩陣。scatterplotMatrix() 函數默認在非對角線區域繪制變量間的散點圖,并添加平滑和線性擬合曲線。對角線區域繪制每個變量的密度圖和軸須圖。
df1?cor(df1)
使用lm()函數擬合多元線性回歸模型
fit data=df)summary(fit)
? 可以看到,影響銷售金額的主要因素是訂單數、單均價和賣家數量。而這里顯示UV和轉化率對銷售金額影響不顯著,這明顯是不符合常理的。而UV和轉化率對訂單數影響很顯著,然后通過訂單數影響銷售金額。
fit1 data=df)summary(fit1)
結果是這樣↓
? 每增加一筆訂單,金額增加356元;
? 單均價增加1元,金額增加116元;
? 賣家數量增加1家,金額增加489元。
? 賣家數量增加很難,就要想辦法增加訂單數和單均價,而訂單數與UV和轉化率關系很大,UV數每增加1000個,訂單數可以增加24個,金額增加8544萬元;而轉化率每增加0.1%,訂單數增加418筆。
? 所以拉新、留存很重要,運營也很重要。

End