【 實用統計模型 】文組生也能輕鬆學會的統計邏輯!
在 NTU DAC 下學期的社課,經過前面的機器學習基本概念以及兩堂 Python 社課,相信社員們對 Python 的使用和資料分析已有基本的概念!這次的社課很榮幸邀請到 DAC 第四屆資訊設計長 Richard 學長,現職為快找整合顧問有限公司、以及 Cutters AI Technologies 的 Data Analyst,和同學們分享 #實用統計模型。
Richard 學長透過自身的跨領域背景,致力於「用一般人也能聽得懂方式講述統計觀念」,帶領社員了解統計的不同面向與應用~
本文 Key Takeaways:
✨ Jupyter Notebook 使用小技巧
✨ 如何定義「好」的迴歸線?
✨ 怎麼用 Python 製作迴歸報表和解讀?
✨ 資料建模
✨ 羅吉斯迴歸
✨ 商業問題實戰練習
Jupyter Notebook 使用小技巧
🧠 在每一次開啟一個新的 Jupyter Notebook 時,可以先簡單條列式紀錄本次目的,讓自己大的腦梳理本次任務,更能夠讓未來與同事的協作更加順利
💡 先寫 Markdown,不要馬上開始 coding
💡 設定開始時間、結束時間 ➔ 瞭解 code 要跑的時間
💡 在數據分析的最一開始:灌入數據科學三寶 ➔ numpy、pandas、matplotlib
實戰商業問題
Step1. 查看資料的資訊
✏️ data.info( )
Step2. 查看前五筆數據
✏️ data.head()
Step3.查看資料的描述性統計
✏️ data.describe()
Step4. 在資料前處理時先更改欄位名稱,讓欄位一目瞭然
✏️ data = data.rename(columns={ })
💡 Tips:中文的文字可先改為英文,避免字體出現問題
Step5. 繪製 Scatter plot
✏️ plt.scatter(data[‘income’], data[‘food_expenditure’], s=10, color=’black’, alpha=0.3)
💡 Notes:s 代表「點的大小」、color 代表「顏色」、alpha 代表「透明度」
如何定義「好」的迴歸線
🧠 一條好的迴歸線能夠最好地擬合資料,並最小化預測值與實際值之間的差距,通常會使用最小平方迴歸(OLS)方法來進行配適。
Least Square Estimation (LSE) ➔ 最小平方法是一種直觀性很強的線性估計方法
Maximum Likelihood Estimation (MLE) ➔ 是一種估計模型參數的方法,適用時機在於手邊有模型,但是模型參數有無限多種,透過真實觀察到的樣本資訊,想辦法導出最有可能產生這些樣本結果的模型參數,也就是挑選使其概似性 (Likelihood) 最高的一組模型參數,這系列找參數的過程稱為最大概似估計法。
殘差 = 實際值 − 迴歸線的預測值,而把每一個殘差取平方,全部加起來,就會是「殘差平方和」,能夠讓殘差平方和最小的線就是我們要的迴歸線!
如何使用 Python 製作迴歸報表和解讀
Step1. 為了使用 statsmodels,需給 X 增加一列常數作為截距
✏️ X = sm.add_constant(data[ ])
Step2. 定義 y = data[ ]
Step3. 使用最小平方法(OLS)進行配適
✏️ model = sm.OLS(y, X).fit( )
Step4. 顯示迴歸結果
✏️ print(model.summary( ))
🧠 在解決商業問題前至少需要看懂
R² (判定係數) 即代表這個模型能解釋的百分比
coef (coefficients):代表該模型的每個迴歸係數(coefficients)
P>|t| (P-value):這個係數在建立 100 次中,有幾次是可用的?(通常報告上,可以不負責任的解釋為,這個迴歸係數存在的機率為何?)
資料建模
🧠 如果要拿掉一個變項,一定要知道為什麼,使商業邏輯通順!
Step1. 為了使用 statsmodels,需要給 X 增加一列常數作為截距
✏️ import statsmodels.api as sm
✏️ X = sm.add_constant(data[[ ]])
Step2. 被迴歸變數
✏️ y = data[ ]
Step3. 使用「簡單線性迴歸」模型進行,統計上叫做 OLS (Ordinary Least Squares) ✏️ model = sm.OLS(y, X).fit( )
Step4. 印出統計結果
✏️ print(model.summary())
💡 如果樣本獨立且服從同一個常態分配,可以 用 QQPlot 把線拉直來看是否有符合常態分佈
💡 Shapiro-Wilk Test,p-value >= 0.05, 代表殘差可能是常態分配的,意味著迴歸模型可能適合這些數據
💡 p-value < 0.05, 即殘差可能不是常態分配,這意味著迴歸模型可能不適合這些數據。因此在商業問題上要符合常態分佈不容易。
💡Richard 也提醒大家,教科書上所定義的各項數值(如:p-value、t 檢定等)不一定能實際符合每個商業問題的需求,建議同學熟悉產業並適時作出調整
羅吉斯迴歸
🧠 羅吉斯迴歸類似線性迴歸分析,主要在探討依變數與自變數之間的關係。線性迴歸中的依變數 (Y) 通常為連續型變數,但羅吉斯迴歸所探討的依變數(Y)主要為類別變數,特別是分成兩類的變數(例如:是/否、有/無、同意/不同意等)。然而,在商業用途中,Logistic Regression 其實「預測」的意義比較大,不一定要詳細解釋數字含義,只需要知道方向性即可。
Step1. 為了使用 statsmodels,需要給 X 增加一列常數作為截距
✏️ X = sm.add_constant(data[ ])
Step2. 被迴歸變數
✏️ y = data[‘ ‘]
Step3. 設定目標函數
✏️ model_Logit = sm.Logit(y, X).fit( )
Step4. 印出統計結果
✏️ print(model_Logit.summary( ))
實戰商業問題:運用鐵達尼號資料瞭解各變數和倖存勝算間的關係
線性方程 = 2.4235−0.3202(𝑝𝑐𝑙𝑎𝑠𝑠)−0.0414(𝑎𝑔𝑒)+0.1773(𝑠𝑖𝑏𝑠𝑝)−0.3291(𝑝𝑎𝑟𝑐ℎ)
+0.0041(𝑓𝑎𝑟𝑒)
艙等每上升一單位,倖存勝算取自然對數就會下降 0.3202
年齡每上升一歲,倖存勝算取自然對數就會下降 0.0414
每多一位船上的兄弟姐妹或配偶,倖存勝算取自然對數就會增加 0.1773
每多一位船上的父母或小孩,倖存勝算取自然對數就會下降 0.3291
每多一元票價,倖存勝算取自然對數就會增加 0.0041
💡Tips:在羅吉斯迴歸中,「數值」雖然不直觀,不過「方向性」很直觀!也可以用 Odds Ratio 來解釋羅吉斯迴歸結果,會更淺顯易懂~
Step1. 首先,先計算 odds ratio 的值
✏️ odds_ratios = pd.DataFrame(
{“Odds Ratio”: model_Logit1.params,
“Lower CI”: model_Logit1.conf_int( )[0],
“Upper CI”: model_Logit1.conf_int( )[1],
})
✏️ odds_ratios = round(np.exp(odds_ratios), 四捨五入)
✏️ odds_ratios
➔ 可得到每個數值的 Odds Ratio、最低/最高信賴區間,例如:
艙等/年齡每上升一單位,倖存勝算就會變成原本的__倍
每多一位船上的兄弟姐妹、配偶或小孩,倖存勝算就會變成原本的__倍
票價每多一元,倖存勝算就會變成原本的__倍
查看資料集中所有數值型變數之間的兩兩關係
➔ 繪製 Pairplot
✏️ sns.pairplot(data, hue=’survived’, diag_kind=’kde’, kind=’scatter’, palette=’husl’)
# hue: 顏色
# diag_kind: 對角線的圖表類型
# kind: 非對角線的圖表類型,
# palette: 調色板
✏️ plt.show( )
Probit Regression
➔ 一種廣義的線性模型,常用於處理二元分類問題,其中 dependent variable 是二元的,也就是只有兩個可能的結果。Probit 迴歸的主要應用是在分析並針對依變數 (dependent variable) 的機率進行建模,通常用於探索事件發生的機率。
Step1. 為了使用 statsmodels,需要給 X 增加一列常數作為截距
✏️ import statsmodels.api as sm
X = sm.add_constant(data[[ ]])
Step2. 被迴歸變數
✏️ y = data[ ]
Step3. 設定目標函數
✏️ model_Probit = sm.Probit(y, X).fit( )
Step4. 印出統計結果
✏️ print(model_Probit.summary( ))
Step5. 獲取預測機率
✏️ y_prob = model_Probit.predict(X)
Step6. 獲取預測類別
✏️ _pred = np.where(y_prob > 0.5, 1, 0)
最後 Richard 學長也提醒大家在做統計時要特別注意 Missing Value 問題!
✏️ 例如:為了解決春吶犯罪過多的問題,政府加派警力,今年犯罪數目再創新高
➔ 在此議題中的重點是春吶影響警力、也影響犯罪人數,並非警察影響犯罪人數。因此,這個例子如果使用迴歸並不能得到正確的結論,還是須回歸到 story telling 才能真正解決問題!
再次感謝 Richard 學長利用一堂課程的時間,用簡單明瞭卻十分扎實的方式,帶領同學由淺入深認識統計邏輯、模型以及觀念,相信同學有滿滿的收穫!
歡迎各位讀者拍手交流,NTU DAC 也會持續在 Medium、Facebook 與 LinkedIn 更新多樣的資訊,歡迎對資料有興趣的大家持續關注,跟我們交流想法~👏🏻👏🏻
____________________________
📣工商時間
如果你對 DAC 的課程內容深感興趣的話,想要學習資料科學的你/妳別忘了鎖定與關注 FB 粉專、IG ,還有 Podcast 頻道,和我們一起在資料分析和商業決策的路上成長~
💡學習資源
DAC 官網:https://ntudac.com/
FaceBook:https://www.facebook.com/NTUDAC
Podcast:https://linktr.ee/ntudacpodcast
LinkedIn:https://www.linkedin.com/company/ntudataanalyticsclub
Instagram:https://www.instagram.com/ntu_dac/
#NTUDAC #第五屆 #數據分析 #資料分析 #商業決策 #NTUDAC社課精華 #實用統計模型