(一)作業要求
advertising.csv檔案(檔案私聊可取)是某商品的廣告推廣費用(單位為元)和銷售額資料(單位為千元),其中每行代表每一周的廣告推廣費用(包含微信、微博和其他型別三種廣告費用)和銷售額,若在未來的某兩周,將各種廣告投放金額按如下分配,請預測對應的商品銷售額:
(1)微信:100,微博:100,其他型別:100
(2)微信:200,微博:100,其他型別:50
另外,請提交對應的代碼,若有對應的說明檔案,也請提交,
(二)作業內容
對于這個實驗,是機器學習中最常見的一類回歸問題,通過已有的資料,判斷對某一資料的影響,我將依次按照下列順序進行,

-
對表格中基本資訊的觀察:
當我們打開Excel檔案的時候,得到的是一系列的資料,一共201行,4列;第一行是標簽的資訊,包括微信、微博、其它和銷售額(前三個是投放),底下的二百行是不同的投放量和對應的銷售額,如此看來不是很直觀,我們可以通過matplotlib將資料可視化出來,另外,為了使繪制的圖更好看,我還使用了seaborn庫中的set函式,





因為我想使用線性回歸的方法對樣本進行估計,所以需要觀測三種投放量之間和銷售額是否存在線性關系,簡單直觀的方式可以是使用散點圖在二維平面中對資料進行可視化表示,于是我們再通過plt.scatter()繪制散點圖:
觀察影像我們得出的結論是:①每種投放量都是在一定區域內浮動的,沒有一個準確的定值,且相對而言微信投放量最大、其他投放次之、微博投放最少②銷售額大體上隨著三種投放的增加而增加,并且在5~25(千元)內浮動③觀察散點圖中銷售額和各投放量的關系我們可以得到:微信投放和銷售額的線性關系最強,其他投放和銷售額的線性關系最弱,但是都滿足,隨著投放量的增長,銷售額也隨之增長,

2、分別對各投放量的銷售額進行估計
上面的散點圖告訴我們,投放量和銷售額大致滿足線性關系,那我們分別用微信投放量、微博投放量、其他投放量和三者總投放量對銷售額進行預測,
- 用三種總投放量預測銷售額
首先,我們通過pandas庫讀取csv檔案并分別獲取投放量和銷售額的資訊,然后我們通過sklearn.model_selection中的train_test_split將資料分割為測驗集和訓練集,在此我定義測驗集的比例為0.1,因為我首先選擇使用最簡單的線性回歸進行預測,所以我們還要匯入LinearRegression并且通過fit函式對模型進行訓練,訓練之后,為了檢測結果的耦合程度,我們利用測驗集的X_test通過predict函式產生一個預測的y_predict,然后和真實值y_test進行比較,為了使結果更形象,我們可以繪制一個折線圖,并且通過sklearn庫中封裝好的score函式對模型進行評分,然后呈現出來,


評分是0.957,再看影像,大體上還是令人滿意的,于是我們根據所給的投放量:
① 微信:100,微博:100,其他型別:100
② 微信:200,微博:100,其他型別:50
再次進行預測,預測的方法很簡單,直接將所給的資料裝到一個DataFrame型別的陣列中,然后以這個陣列作為x_test,輸出測驗的predict即可,


預測值分別為7.148千元和8.336千元,我查看了表中類似的資料,結果大體上正確,
2、通過微信、微博、其他投放進行預測
其實這部分并沒有什么太大的意義,只是我希望看到三種投放量哪個對銷售額影響大、哪些影響小,對于這部分,具體代碼和上面幾乎一模一樣,就是把測驗和訓練用的資料限定在微信投放量上,這樣得到的預測曲線和預測結果如下:


(微信)

![]()
(微博)


(其它)
我們發現除了微信投放和銷售額曲線較為擬合外,其他兩種投放方式和實際值相去甚遠,也就看出不可以使用線性回歸對這兩種投放量進行預測,
觀察到如此大的差異后,我們再用回歸系數觀測一下三種投放量對銷售額的影響程度:我們可以通過seaborn庫中的heatmap熱力圖來繪制相關性矩陣熱力圖,比較各個變數之間的相關性:


顏色越淺代表相關性越大,圖中可以看出微信對銷售額的影響最大,其他對銷售額的影響最小,為了讓圖反應出的資訊更加直觀,我們可以直接列印出相關性的排名如下:

相關性最大的是微信,同時根據回歸系數的性質我們知道,回歸系數越大,說明x對y的影響越大,所以我們也可以通過查看他們的回歸系數來判斷三種投放對銷售額的影響程度,
3、使用多項式回歸預測銷售額
在上面的程序中我發現對于微博投放和其他投放而言,從散點圖可以看出它們和銷售額并不完全服從線性回歸,在觀看了北京理工大學python機器學習應用部分章節之后,我了解到對于線性不擬合的資料,我們也可以通過多項式擬合的方式預測資料,

下面我將以多項式擬合查看和銷售額的擬合程度并且預測在給定條件下的銷售額的值,
我們將PolynomialFeatures的degree屬性設定為2,也就是關于微信投放量資訊X的二次多項式,然后我們選擇一百八十個資料進行訓練,并且列印出訓練后曲線和原散點圖的影像:

結果非常的amazing啊,比線性回歸的的一條直線要擬合不少,然后我們再拿出20個資料進行預測,看看大概的匹配程度如何:


可以看到結果還是差強人意(大體上使人滿意)的,兩種投放方式得出的結果和第一次得出的結果還是挺接近的,
4、使用隨機森林預測銷售額
我感覺單純的線性回歸還是滿足不了我,我就又在網上找其他的回歸方法,最終決定用隨機森林的方法再次預測銷售額,
隨機森林的定義我就不班門弄斧了,下面直接進行操作,依然分別進行三種投放同時作用和分別作用造成的銷售額的變化情況,
- 三種投放同時作用
其實我感覺各種回歸方法雖然很難,但是基本的運用還是很容易的,只是需要反復使用fit和predict方法罷了,然后通過plot函式打出來,結果如下:

可以看到擬合程度非常的高!但是其實我也不知道原理,只是發現通過這個方法只需要十幾行代碼就可以讓它的擬合度如此之高!我們趁熱打鐵,把預測結果的值算出來:

可以發現和我們最初使用線性回歸的結果十分接近,并且應該更準確,
2、只有微信投放


3、只有微博投放


4、只有其他投放


總的來說:三種演算法算出的結果分別在7~8和8~9之間,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/393149.html
標籤:python
