難度跟課程長度突然驟升= = Simple Linear Regression只講了一小時左右、因為我有概念所以實作跟概念吸收很快,真是Simple。Multiple linear regression講了兩小時(含step by step 實作),所以大概要花個一兩天來看惹吧…
本課直接從資料開始解說。有一個50間創新公司的資料,內容包含行政、研發、行銷花費、所在城市以及利潤。現在如果你是資料科學家、要怎麼預測哪間公司風險最值得投資呢? (OS: 不就利潤最多那間嗎,為什麼要做預測XD)
不過還有其他面向可以考量,例如,在特定城市中,花多一點在行銷預算比較賺錢,還是花多一點在研發預算比較賺錢呢?
透過這個資料,我們可以幫創投公司做預測模型,讓他們知道在哪邊投資、投資哪種預算結構的公司,最容易套現。
Multiple Linear Regression公司如下
Y, 表示我們想預測的數值,也可以稱為dependent variable (中文會翻成依變數或因變數)
b0跟linear regression一樣,其他因素沒有變化的狀況下的值 (可以回去上一章看馬鈴薯的範例XD 比較好理解)
X1 ~ Xn就是各種自變數(independent variable),變數之間沒有直接的因果變化關係,以本章的案例來說,可以把X1, X2, X3分別看成是研發、行政、行銷預算。
B0~Bn就是coefficient值,也就是係數,Xn每增加一單位時對Y的影響是多少。假設B0 = 0.1,表示X=1時,Y會增加0.1。
作者再次用馬鈴薯的範例解釋。
當我們考量影響馬鈴薯生產量不只考量肥料,還考量溫度、雨水變化時,就可以把上述的各種考量量化成以上的公式。
一塊土地的馬鈴薯產量 = 8噸(還是什麼都不做就有八噸馬鈴薯,真好XD),同時每施肥一公斤就會多長三噸,但每增加一度就會減少0.54噸,最後則是雨水每增加1mm會讓馬鈴薯產量增加0.04噸。上面參數雖然是胡謅的拿來解釋公式用的,但類似的研究是真的有人做ㄛ,不過看摘要這篇的重點是拿multiple linear regression model 跟Artificial Neural Network model 比較哪種模式預測得比較好,未看先猜是後者預測結果比較好(也的確是)XD 敝人經驗是越複雜的模式通常預測的越精準,但原理越不好懂、解釋起來也不直觀。
到預測模式跟模式的使用,Linear regression 也不是什麼情境都能使用的。
有四種數據及被稱為 anscombe quartet ,由anscombe於1973年提出(我查到只有四種,但講師另外補充兩種XD quartet是4重奏嘛,所以應該是一開始anscombe提出四種,後面有人加了兩種)![]()
只有左上角是ok的、其他都是不能使用線性回歸的情境。那麼具體來說必須怎麼樣才能使用呢?
看到這邊我已經有點失去了信心,感覺一下掉入深水區了。
我有點好奇假設資料有違反以上六點假設,要怎麼處理,問與答有人討論過了:
Linearity: If the relationship between variables isn't linear, try transforming your variables (e.g., log, square root) or use polynomial regression.
假設不是線性的,就做資料轉換讓他變成線性關係,或者用polynomial regression
Independence: If errors are correlated (e.g., time series), use models like ARIMA or add lag variables.
假設變數的變化不獨立 > 用其他模型。
Homoscedasticity: If residuals have unequal variance, use weighted least squares or transform variables.
假設違反,就要在驗證的模型使用加權方差,或者對變數做些轉換,使變數的變化是相同性質的。
Normality: If residuals are not normally distributed, try transformations or use robust regression techniques.
好了、不翻了,這個很直觀,不是常態的數據有不是常態的作法,不要執著了(X)
No Multicollinearity: If predictors are highly correlated, remove or combine predictors, or use regularization techniques like Ridge or Lasso.
These adjustments help improve the model's validity when assumptions don't hold!
那假設自變數之間高度相關呢? 建議要嘛移除要嘛就合併,不然還有其他的處理手法(太高深XD 感覺要真的碰到才比較知道別用)。
其他補充概念: 多元線性回歸基本上是拿很多個X變數去預測Y,但是實際上,太多X並不實際。有些X變數根本對於Y沒有意義,所以就算加入或拿掉也沒有影響。而另外則是、當X變數太多的時候,要解釋就不容易。試想你要如何一下子解釋10到20個X對Y的影響呢? 所以課程有介紹一些向後篩選、向前篩選、All in 各種篩選變數的方式,而向後篩選是最常使用的,因為相對簡單XD
篩選方式細節不於此介紹,因為如果使用skicit 模組,該模組會挑選對Y來說有顯著意義的X變數。不過~"~ 我其實大概時操作過實作做過了,發現不完全是這樣= =" 最後看了問與答、如果要用backward elimination,還是得要用statmodel來做篩選(另有章節介紹)
另外、講者還講了dummy variable trap,在講這個陷阱前,要先了解為何有dummy variable。
Dummy variable 通常是拿來處理類別變數的,例如資料含有'橘子、柳丁',並要預測產量。這時候我們可以創一個dummy variable,假設把柳丁設為dummy variable X4好了,當柳丁有值,x4對應的細數也會有值,當資料為橘子時,x4會直接=0,橘子對應的數值就是截距那個值,所以預測上是合理的。
但是當你有三個或四個類別變數時,例如資料含有'柳丁、橘子、椪柑',要預測產量,如果直接把橘子、柳丁、椪柑都各建立一個係數,會造成共線性。雖然講師說sklearn會處理,但我自己研究後覺得應該沒有XD sklearn 本身只負責跑出一堆數字來,然後用OLS 方法找到最佳解。基本上解一定都有,只是這個解正不正確嘛....所以最好的處理方式是用onehotencoder,並且要設定drop='first',此時計算的邏輯會不同。詳細解說可以參考以下這篇,處理的方式概念上是把柳丁當成一個Baseline,橘子、椪柑的係數是相較於柳丁多了、或少了多少產量。用這個方式處理時、就不會出現共線性了。
https://medium.com/@ramdhanhdy/understanding-the-dummy-variable-trap-78d00f8bf20a
不過又看到一些說法、共線就共線,Y是準的就好(https://datascience.stackexchange.com/questions/72604/dummy-variable-trap?rq=1
),好像也對XD 不過我想如此一來建出來的model就會不太穩定,或者解釋上會出現矛盾,可能不只一組係數會得到一樣的預測結果,所以就按照官方建議的方式處理吧:
drop{‘first’, ‘if_binary’} or an array-like of shape (n_features,), default=None
Specifies a methodology to use to drop one of the categories per feature. This is useful in situations where perfectly collinear features cause problems, such as when feeding the resulting data into an unregularized linear regression model.