iPAS 備考專區 登入

iPAS AI 應用規劃師 中級 科目二 大數據處理分析與應用・114 年第二次・L22・第 50 題

sklearn LinearRegression + statsmodels OLS 語法哪些正確?

原題

考慮資料集已經補填遺漏值,參考下圖執行結果,下列何者正確? from sklearn.linear_model import LinearRegression import statsmodels.api as sm X = df[['youtube', 'facebook', 'newspaper']] y = df['sales'] reg = 空格1 print(reg.coef_) X2 = sm.add_constant(X) model_sm = 空格2 print(model_sm.summary()) (OLS 結果:R-squared 0.898、Adj. R-squared 0.896、F-statistic 573.0、No. Observations 200、Df Residuals 196、Df Model 3;coef: const 3.5561、youtube 0.0455、facebook 0.1891、newspaper -0.0006;P>|t|: const 0.000、youtube 0.000、facebook 0.000、newspaper 0.914) A:空格 1 完整語法 reg = LinearRegression().fit(y, X) B:空格 1 完整語法 reg = LinearRegression().fit(X, y) C:print(reg.coef_) 結果為包括截距項等 4 個係數值 D:空格 2 完整語法 sm.OLS(X2, y).fit() E:model_sm 迴歸模型的所有迴歸係數在 α=0.05 之下具有顯著的解釋力 F:截距項係數值為 3.5561

白話

題目給出 sklearn LinearRegression 和 statsmodels OLS 的迴歸分析程式碼框架,以及實際執行後的 OLS 摘要結果。六個敘述(A 到 F)各描述程式碼語法或統計結果是否正確,題目把它們打包成 4 個組合選項,要你找出哪些敘述是正確的。

問你:針對 LinearRegression.fit() 的參數順序、coef_ 的係數個數、sm.OLS 的參數順序、係數顯著性以及截距項數值,哪些描述是正確的?

一句話總結

正確答案是總選項 B(敘述 B 和 F):B(fit 參數順序 X 在前 y 在後)正確,F(截距項 const = 3.5561)正確。C 錯因為 sklearn 的 coef_ 不含截距(只有 3 個係數),E 錯因為 newspaper 的 p-value=0.914 不顯著。

情境

先感受問題:兩個函式庫的語法長得不一樣

行銷資料分析師小嘉要用廣告費用(youtube、facebook、newspaper)預測銷售量(sales),同時用 sklearn 和 statsmodels 兩個函式庫建立線性迴歸模型:

sklearn 的特色:fit(X, y),X 在前 y 在後,沒有截距項存在 coef_ 裡(截距在 intercept_)

statsmodels 的特色:OLS(y, X2),y 在前 X 在後,統計結果詳細(含 p-value、R²、信賴區間)

兩者參數順序相反,這是最常見的錯誤來源。

六個敘述分別考:fit() 的 X/y 順序(A vs B)、coef_ 的係數個數(C)、sm.OLS() 的 y/X 順序(D)、係數顯著性(E)、截距值(F)。

舊方法

逐一驗證六個敘述是否正確

  1. 敘述 A:fit(y, X) → 錯。sklearn 的 LinearRegression().fit() 參數順序是 fit(X, y),X 是特徵矩陣在前,y 是目標向量在後。fit(y, X) 參數反了,會把銷售量當特徵、把廣告費用當預測目標,結果完全錯誤。
  2. 敘述 B:fit(X, y) → 正確。sklearn 所有的 estimator 都遵循 fit(X, y) 的慣例,X 是 feature matrix(形狀 n×p),y 是 target vector(形狀 n)。reg = LinearRegression().fit(X, y) 是正確語法。
  3. 敘述 C:coef_ 有 4 個係數(含截距)→ 錯。sklearn 的 reg.coef_ 只包含 3 個係數(youtube、facebook、newspaper 各一個),截距項存放在 reg.intercept_ 而非 coef_ 裡。coef_ 的形狀是 (3,) 或 (1,3),不是 4 個。
  4. 敘述 D:sm.OLS(X2, y) → 錯。statsmodels 的 OLS 參數順序是 OLS(y, X),y 在前,X 在後,與 sklearn 相反。OLS(X2, y) 把 X 和 y 放反了,統計結果會完全錯誤(用廣告費用預測廣告費用)。
  5. 敘述 E:所有係數在 α=0.05 下顯著 → 錯。OLS 摘要顯示 newspaper 的 P>|t| = 0.914,遠大於 0.05(顯著水準),代表 newspaper 係數不顯著(無法拒絕係數為 0 的虛無假設)。只有 const、youtube、facebook 的 p-value < 0.001 是顯著的。
  6. 敘述 F:截距項係數 = 3.5561 → 正確。OLS 摘要的 const 那行,coef = 3.5561,這就是截距項(常數項)的估計值。sm.add_constant(X) 加入了常數欄,對應 OLS 輸出的 const = 3.5561。

新方法

只有 B 和 F 正確,選總選項 B

小嘉確認:

敘述 A:fit(y, X) → 參數反了 ✗

敘述 B:fit(X, y) → sklearn 的正確語法 ✓

敘述 C:coef_ 含截距共 4 個 → sklearn coef_ 只有 3 個,截距在 intercept_ ✗

敘述 D:sm.OLS(X2, y) → statsmodels 參數反了(應是 OLS(y, X2))✗

敘述 E:所有係數顯著 → newspaper p=0.914 不顯著 ✗

敘述 F:截距 = 3.5561 → OLS 摘要 const coef = 3.5561 ✓

只有 B 和 F 正確。四個總選項中,「B、F」對應總選項 B。這就是總選項 B 講的:B、F。

錯選項

為什麼其他總選項是錯的

AB、C、F

字面在說什麼

fit(X,y) 正確、coef_ 有 4 個係數、截距 = 3.5561 這三個都對。

為什麼不對

B 和 F 確實正確,但 C 不對。sklearn 的 reg.coef_ 只包含特徵係數(3 個),截距項(intercept)存放在 reg.intercept_ 這個獨立屬性中,不在 coef_ 裡。coef_ 的形狀是 (3,),print(reg.coef_) 只輸出 3 個值。

誰會選錯

以為 sklearn 和 statsmodels 一樣,把截距放在係數陣列裡的人。或者記得 statsmodels 的 params 包含 4 個值(const + 3 個特徵),誤以為 sklearn 的 coef_ 也是這樣。

CA、C、D、F

字面在說什麼

fit(y,X)、coef_ 4 個、sm.OLS(X2,y)、截距 3.5561 這四個都對。

為什麼不對

A(參數反了)、C(coef_ 只有 3 個)、D(OLS 參數反了)全都錯,只有 F 是對的。這個選項把三個錯誤的敘述都選進去了。

誰會選錯

搞混 sklearn 和 statsmodels 參數順序的人:誤以為 sklearn fit(y,X)(與 statsmodels 一樣 y 在前)、誤以為 statsmodels OLS(X,y)(與 sklearn 一樣 X 在前)。

DB、E

字面在說什麼

fit(X,y) 正確、所有係數都顯著,這兩個都對。

為什麼不對

B 正確,但 E 不正確。OLS 摘要中 newspaper 的 P>|t| = 0.914,超過 α=0.05 的顯著水準,代表 newspaper 的迴歸係數不顯著(不能排除它等於 0 的可能性)。並非所有三個預測變數都顯著,選 E 是讀錯了 p-value 欄位的結果。而且選 D 漏掉了 F(截距 3.5561 正確),答案不完整。

誰會選錯

只看了 const/youtube/facebook 的 p-value(都是 0.000,非常顯著),忽略了 newspaper 的 p-value = 0.914,誤以為全部顯著。

變形題

同個考點下次怎麼變形

延伸

想再往下看,這 5 個

答案、題目或解析有問題?回報這題

出處:iPAS 經濟部產業人才能力鑑定 ・ 114 年第二梯次 iPAS AI 應用規劃師 中級 科目二 大數據處理分析與應用 第 50 題

看官方原文 PDF

原題 © 經濟部產業發展署,AITerms.tw 僅作教學解析使用,本站解析以 CC BY-NC-SA 4.0 授權。