農林漁牧網

您現在的位置是:首頁 > 林業

PowerBI多元迴歸預測資料(R語言)

2023-01-07由 Lin王發林 發表于 林業

怎麼把powerbi匯入ai

前幾天寫了一篇直接在PowerBI裡面使用度量值做一元迴歸的內容,雖然靈活性很高,但是實際中對一個結果影響的因素是很多的,還是使用多元迴歸的場景更多。而且我們藉助統計分析包不僅可以計算出迴歸引數,還可以看看一些衡量模型的重要指標,比如R2/調整的R2,還可以透過置信區間的設定來求出預測區間。

PowerBI多元迴歸預測資料(R語言)

我們這次的案例是有四個影響GMV值得因素,UV訪客數、推廣費用的投入、整體商品降價水平(優惠力度)和客服的服務評分,透過計算這四個因素的具體影響值來求出預測GMV,本次使用的是在PowerBI資料集的基礎上呼叫R script來實現,下次再來用Python實現。資料和模型會放在最後供下載學習使用,資料如下↓

PowerBI多元迴歸預測資料(R語言)

下面開始實現,首先在PowerQuery裡面載入資料,載入的資料和我們原始資料內容一樣,當然如果是訂單明細資料,只需要進行一下按日期Group by就行了。

PowerBI多元迴歸預測資料(R語言)

這就是我們需要處理的資料樣式,就是表格,在R語言裡面叫做資料框,然後我們需要在PowerQuery裡面呼叫R語言指令碼,在Transform選單下面最後一列↓

PowerBI多元迴歸預測資料(R語言)

點選後就會出現R語言指令碼的編輯器,這裡就不介紹R語言如何實現多元線性迴歸模型的了,我記得之前R語言的集合裡面有詳細介紹

《R語言_018迴歸》

,有興趣的可以翻去看看。主要就是使用lm擬合多個引數,然後我們這裡再把擬合的結果求出來就行了,程式碼也很簡單,如下↓

fit <- lm(gmv ~ uv + promotion_exp + price_diff + service_score,

data=dataset)

df<- data。frame(coef(fit))

names(df)[names(df)==“coef。fit。”] <- “coefficients”

df[‘variables’] <- row。names(df)

再多說一句,不管是呼叫R語言還是Python,不管PowerQuery裡面當前的流程是怎麼命名的,在指令碼編輯器裡面的資料集都是用dataset命名的。最後執行結果如下↓

PowerBI多元迴歸預測資料(R語言)

於是我們已經得到了我們最需要的幾個引數,根據我們的歷史資料,得出來的截距是-41045,uv的影響是12。62(每新增100個使用者就會帶來1262的GMV),費用投入影響是24。21(每投入100元帶來2421的GMV),降價影響1074(每降價1元帶來1074GMV),服務評分影響是8855(評分每增加0。1分GMV增加885)。總體看來各項因素對GMV都有一定的影響,在此基礎上,我們如果想要達到目標的GMV,就可以從這幾方面入手了。

然後回到PowerBI,我們把這幾個引數用度量值寫下來,再把公式寫出來,DAX語句和結果如下↓

Intercept = CALCULATE(SUM(‘迴歸係數’[coefficients]),‘迴歸係數’[variables]=“(Intercept)”)

UV = CALCULATE(SUM(‘迴歸係數’[coefficients]),‘迴歸係數’[variables]=“uv”)

promotion_exp = CALCULATE(SUM(‘迴歸係數’[coefficients]),‘迴歸係數’[variables]=“promotion_exp”)

price_diff = CALCULATE(SUM(‘迴歸係數’[coefficients]),‘迴歸係數’[variables]=“price_diff”)

service_score = CALCULATE(SUM(‘迴歸係數’[coefficients]),‘迴歸係數’[variables]=“service_score”)

PowerBI多元迴歸預測資料(R語言)

PowerBI多元迴歸預測資料(R語言)

關鍵值和預測GMV的公式我們都有了,我們就可以帶入相關值進行預測了,只需要新建四個引數就行了,然後新建一個預測的度量值就行了,度量值和結果如下↓

預測公式 =

“預計GMV公式 = ” & UNICHAR(10) &

FORMAT([Intercept],“#0”) &

“ + UV*” & FORMAT([UV],“#0。00”) &

“ + 費用*” & FORMAT([promotion_exp],“#0。00”) &

“ + 降價*” & FORMAT([price_diff],“#0”) &

“ + 服務分*” & FORMAT([service_score],“#0”)

PowerBI多元迴歸預測資料(R語言)

當然我們還沒有結束,前面說過我們我們還可以加入很多值來判斷這個模型的好壞,其中一個很重要的指標就是R2和調整的R2,當然我們還可以檢驗線性關係、共線性等問題。這裡我們以R2舉例,還是在PowerQuery裡面來實現,只需要把R語言程式碼改一下就行了,程式碼和結果如下↓

fit <- lm(gmv ~ uv + promotion_exp + price_diff + service_score,

data=dataset)

s1 <- summary(fit)

df <- data。frame(name = c(“R2”,“R2ajd”),

values = c(s1$r。squared,s1$adj。r。squared))

PowerBI多元迴歸預測資料(R語言)

得到了R2和調整的R2,0。78,說明這個多元線性迴歸模型還是相當的不錯,如果在真實場景中有這麼高的R2,就燒高香把。簡單說明前面的4個因素就已經能夠解釋78%的結果了,價值非常高,再去找找其他因素整個模型就越來越完美了,然後我們照例把度量值建立起來,等一下放在圖裡面,DAX語句如下↓

R2 = CALCULATE(SUM([values]),‘R2’[name]=“R2”)

R2ajd = CALCULATE(SUM([values]),‘R2’[name]=“R2ajd”)

上面我們是進行點預測的,就是影響引數值固定的,變數後預測的結果是一個固定的值,有時候我們還想看看預測的區間,看看整個區間我們能不能夠接受,這裡我們就可以呼叫R語言裡面迴歸擬合結果的置信區間範圍值了,預設是95%的置信區間,我們就選用預設值,然後會求出區間兩界限的引數值,R語言程式碼和結果如下↓

fit <- lm(gmv ~ uv + promotion_exp + price_diff + service_score,

data=dataset)

dfc <- confint(fit)#提供模型引數的置信區間(預設95%)

dfcd <- data。frame(name = c(“Intercept”,“uv”,“promotion_exp”,“price_diff”,“service_score”),

pct2。5 = dfc[,1],

pct97。5 = dfc[,2])

PowerBI多元迴歸預測資料(R語言)

從結果我們就可以很清晰的看到上界和下界引數值了,然後我們再在PowerBI裡面把各引數的度量值寫出來,DAX語句如下↓

p25 Intercept = CALCULATE(SUM([pct2。5]),‘置信區間’[name]=“Intercept”)

p25 price_diff = CALCULATE(SUM([pct2。5]),‘置信區間’[name]=“price_diff”)

p25 promotion_exp = CALCULATE(SUM([pct2。5]),‘置信區間’[name]=“promotion_exp”)

p25 service_score = CALCULATE(SUM([pct2。5]),‘置信區間’[name]=“service_score”)

p25 UV = CALCULATE(SUM([pct2。5]),‘置信區間’[name]=“uv”)

p97 Intercept = CALCULATE(SUM([pct97。5]),‘置信區間’[name]=“Intercept”)

p97 price_diff = CALCULATE(SUM([pct97。5]),‘置信區間’[name]=“price_diff”)

p97 promotion_exp = CALCULATE(SUM([pct97。5]),‘置信區間’[name]=“promotion_exp”)

p97 service_score = CALCULATE(SUM([pct97。5]),‘置信區間’[name]=“service_score”)

p97 UV = CALCULATE(SUM([pct97。5]),‘置信區間’[name]=“uv”)

然後根據度量值,把上下界的GMV預測函式寫出來,順便把合併的區間寫出來,DAX語句如下↓

預計GMV上線 =

[p97 Intercept] + [p97 UV]*[UV Value] + [p97 promotion_exp]*[推廣費用 Value] + [p97 price_diff]*[價格降低 Value] + [p97 service_score]*[服務評分 Value]

預計GMV下線 =

[p25 Intercept] + [p25 UV]*[UV Value] + [p25 promotion_exp]*[推廣費用 Value] + [p25 price_diff]*[價格降低 Value] + [p25 service_score]*[服務評分 Value]

預計GMV區間 = “[” & FORMAT([預計GMV下線],“#,##0”) & “ - ” & FORMAT([預計GMV上線],“#,##0”) & “]”

最後我們把所有度量值,點預測和區間預測結果,R2值放在一起,只需要進行引數調整就可以來進行資料預測了↓

PowerBI多元迴歸預測資料(R語言)

當然這裡我們不能夠選擇歷史資料的範圍,如果我們需要調整歷史資料的範圍,我們只能在PowerQuery裡面進行調整,或者我們可以寫固定的日期值,比如我們可以固定最近90天或者180天的資料,這裡每天資料就會自動滾動變化了,用最新的只預測效果應該也會更好,我們這裡使用90天的資料來看一下結果↓

PowerBI多元迴歸預測資料(R語言)

可以看到結果還是有所差異的,不過R2還是很不錯,說明這個模型還是不錯的,今天寫的有點多了,過兩天再來用Python實現一下。