【Python量化乾貨】Statsmodels/OLS/建模思想

2021-02-20 樂學FinTech
更多原創編程/機器學習/數據科學/FinTech/量化投資/雲計算 乾貨.歡迎關注與標星★公眾號喲~

statsmodels包可以做傳統統計方面的分析,有強大的函數庫可以調用,比如線性回歸,時間序列等

官網:http://www.statsmodels.org/stable/index.html

我們先通過例子快速了解如何通過Statsmodels進行統計學分析,我們首先導入相應庫:

在這裡我們需要引入一點矩陣運算的知識補充:

tip:我們只要是通過回歸的方法,都可以認為是一種「抓住信息」的過程:

我們也可以這樣看,有這樣一系列數據,我們如果直接帶入上述這樣的方程,其實是無解的,這個時候我們就需要找到一個「折中的方案」,也就是「誤差最小」的方案:

我們找到一個「誤差最小的」模型,然後用這個模型去擬合這樣一組數據,這樣我們就能夠通過模型最大限度「抓住」這k組數據的特徵,這樣如果我們面對新的數據,就能夠通過我們這個模型進行判斷和預測了。

所以問題來了,我們該如何改變這個模型的係數對數據進行「擬合」呢?

tip:這個時候我們需要介紹OLS方法:通過最小化誤差的平方和尋找數據的最佳函數匹配,比如說下圖的diabetes的數據,數據呈現散點,我們可以通過OLS找到一條誤差最小的線,去最大限度的擬合所有的散點,這條線,就是我們通過數據「抽象出來」的「規律」,

或者我們可以這樣感性的理解:我們的生活中經歷的事情就是這一些散點,這一條線,就是我們「總結出來的經驗」。

有以上的感性理解與直覺判斷後,我們通過數學公式來嚴格定義:

誤差平方最小化,也就是上式最小化

我們當然可以通過代數的方法求解,但是計算非常複雜,我們這裡介紹矩陣的方法求線性方程組:

同樣是上述方程組:

我們將其寫成矩陣的形式:

根據矩陣運算性質,有:

也就是說,我們如果想把「最優的係數」擬合出來,本質上轉換成了求A的過程

我們做一下矩陣的變換,可得A:

我們甚至能把回歸的SSE求出來:

我們來看一下Statsmodels裡面的OLS該如何調用:

注意這裡的參數,是用的內生變量和外生變量

tip:一個模型,是由許多變量構成的。當我們想要研究一些變量對另一個變量的影響時,被選定的變量就是自變量,被影響的變量就是因變量。由模型自身所決定的變量,被稱為內生變量,由模型外的因素和條件所決定的變量,就是外生變量。在一個模型中的參數就是由模型外部條件所決定的,通常就是外生變量

所以endog 是回歸中的反應變量(也稱因變量),是模型中y(t), 輸入是一個長度k的array, exog 則是回歸變量(也稱自變量)的值,就是

statsmodels.OLS 不會假設回歸模型有常數項,我們需要注意這一個參數的設定:

所以在默認情況下,模型為:

那麼我們接下來可以生成一組數據,先用純矩陣運算的方法求出A,然後再看看Statsmodels裡面的如何調用,再將兩者對比看看是否一致:

我們首先可以通過linspace生成x的樣本array:

注意我們需要x矩陣的第一列為1,Statsmodels裡面恰好有這一功能,非常方便:

接下來我們不妨確認下係數,我們選擇8與18兩個吉利的數字:

當然殘差項不能忘記,我們根據性質,生成正態分布的殘差項:

接著我們可以進行運算,求得y:

這樣我們首先可以直接通過矩陣運算求A:

通過下式:

當然,矩陣連乘還可以用這樣的方法:

兩者結果一樣

那麼我們再來看看用statsmodels如何快速計算出係數:

我們需要把y與X放入,生成模型後開始擬合數據就行了

我們會發現擬合模型的數據與我們直接用矩陣運算的數據完全一致

當然我們也可以通過summary調出整個回歸的詳細:

我們可以發現係數7.69,18.02與我們最開始設置的8,18非常接近

當然我們也可以可視化一下:

我們通過導入matplotlib

並將擬合的y數據調出:

然後我們可以生成數據的圖與通過OLS回歸出來的圖

當然,如果覺得不明顯的話,我們可以通過調整殘差的係數對數據進行調整,例如,我們將殘差乘以5

未完待續.

Hey,想學了那麼久的Python,推薦一個超乾乾貨入門合集。用Python做爬蟲,數據分析,全棧建設,Fintech金融量化,機器學習,辦公自動化,樹莓派,美好生活DIY,.2000+連載,不僅有編程,還有更多原理講解。

更多內容,歡迎點擊【閱讀原文】訂閱連載視頻。觀看逐行代碼與原理講解與加入同業交流與技術探討社區。也歡迎關注公眾號,有更多編程/機器學習/數據科學/FinTech/量化投資/雲計算 原創乾貨

相關焦點

  • 機器學習:Python常用庫——Statsmodels庫
    這裡就給大家介紹一個強大的統計分析庫——Statsmodels庫。Statsmodels庫是Python中一個強大的統計分析庫,包含假設檢驗、回歸分析、時間序列分析等功能,能夠很好的和Numpy和Pandas等庫結合起來,提高工作效率。下面我們就來試一下。
  • 量化 | 用python輸出stata一樣的標準化回歸結果
    :量化小白上分記作者:量化小白H如果你經常用stata寫論文,會了解stata有個outreg2的函數,可以把回歸的結果輸出成非常規範的論文格式,並且可以把多個回歸結果並在一起,方便對比。例如下圖本文的目的是用python實現outreg2的效果,得到上面這樣的結果,方便對比和分析。其實也不用自己手動寫,statsmodels模塊裡有一個summary_col函數,可以實現以上的功能,不過效果沒有stata那麼好,畢竟python也不是專業的計量分析軟體,但好在代碼並不難,所以如果有一些個性化的需求,自己改一改也挺容易的。先解釋代碼,再上例子。
  • 定量分析方法第23講:statsmodels
    在線文檔位於statsmodels.org。import numpy as npimport statsmodels.api as smimport statsmodels.formula.api as smf1. 引言statsmodels支持使用R樣式公式和pandas DataFrames。
  • 工具&方法 | 6行代碼教你用python做OLS回歸(內附CFPS實例)
    如果你使用 Anaconda 安裝的 python ,那麼:conda install statsmodels如果你使用 pip 管理你的python包,那麼:statsmodels.formula.api as smfdat = sm.datasets.get_rdataset("Guerry", "HistData").dataresults = smf.ols('Lottery ~ Literacy + np.log(Pop1831)', data=dat).fit()print(results.summary())
  • Logistic regression in Python statsmodels
    目錄摘要Python中的statsmodels庫是一個進行統計建模、假設檢驗和數據挖掘的庫,本文基於其中的 Logistic Regression後續會對照SPSS和R語言的邏輯回歸,討論statsmodels的結果,加深對邏輯回歸的理解。並比較Python機器學習庫sklearn實現邏輯回歸的差異。1. 邏輯回歸與odds邏輯回歸常用於二分類,用於估計某種事物的可能性。比如某用戶購買某商品的可能性,某病人患有某種疾病的可能性,以及某廣告被用戶點擊的可能性等。
  • Python & R數據分析常用包
  • python數據分析--回歸函數及線性回歸分析
    此處我們選用python進行分析。首先,我們需要安裝並導入python數據分析常用的庫。線性回歸:分析結論的前提:(數據滿足統計假設)3.1 statsmodels.formula.api.OLS():普通最小二乘模型擬合- - 常用tips = pd.read_csv(r"D:\Case_data/tips.csv",sep=',',encoding='utf-8'
  • Python數據科學實踐 | 統計建模2
    有了前面的鋪墊,我們可以正式進入statsmodels的模型擬合部分。statsmodels有多種線性回歸模型,包括最基本的(例如普通的最小二乘回歸模型),以及複雜的(比如迭代加權最小二乘回歸)等。這裡我們基於火鍋數據,選擇對數線性回歸模型,以購買人數的對數為因變量展示statsmodels中的模型使用。其他的模型的使用過程基本類似。
  • python量化投資(一):量化投資的基本流程
    本文將會講解量化投資過程中的基本流程,量化投資無非這幾個流程:數據輸入-策略書寫-回測輸出其中策略書寫部分還涉及到程式語言的選擇,如果不想苦惱數據輸入和回測輸出的話,還要選擇回測平臺。筆者一開始用的是matlab,但最終選擇了pythonpython:庫很多,只有你找不到的,沒有你想不到,和量化這塊結合比較緊密的有:Numpy&Scipy:科學計算庫,矩陣計算Pandas:金融數據分析神器,原AQR資本員工寫的一個庫,處理時間序列的標配pandas_datareader:國外股票宏觀數據接口Matplotlib
  • python與時間序列基礎教程2(全文超過6000字,12圖,閱讀需要16分鐘)
    本文就是將數據、公式、代碼、數學函數串聯起來,讓你不僅僅了解抽象的數學公式,也能將抽象的內容聯繫到具體的數據和python代碼中,並且也不只是單純的調用python包,而是自己手寫算法。下面的代碼是近20年城鎮就業人員數據(萬人),數據來自中國統計局。
  • Compare: Logistic Regression in statsmodels and sklearn
    摘要Python機器學習庫sklearn中的Logistic Regression算法核心與statsmodelssklearn 與 statsmodels 中 Logistic 回歸的差異直接使用 sklearn 中的 Logistic 回歸,結果與 statsmodels 不同。請看下例。
  • Python數據科學實踐 | 統計建模1
    在實際數據科學項目中,繼數據清洗與整理、描述分析之後,要進行深入的分析,建模是必不可少的非常重要的環節。Python 中統計建模分析的核心模塊是Statsmodels。也就是說這個模塊中包含了幾乎所有常見的回歸模型、非參數模型和時間序列分析模型等統計建模方法。本章試圖通過以火鍋團購數據為基礎就常用的模型來為大家開啟statsmodels學習之路。獲取或安裝Statsmodels的最簡單方法是通過Anaconda安裝,然後載入Statsmodels模塊。
  • python機器學習--線性回歸
    python機器學習--線性回歸線性回歸是最簡單的機器學習模型,其形式簡單,易於實現,同時也是很多機器學習模型的基礎。對於一個給定的訓練集數據,線性回歸的目的就是找到一個與這些數據最吻合的線性函數。針對線性回歸算法在之前的數模案例也有涉及喔,歡迎去看看上一篇博客數學建模預測模型實例--大學生體測數據模型在這裡插入圖片描述OLS線性回歸Ordinary Least Squares 最小二乘法一般情況下,線性回歸假設模型為下,其中w為模型參數
  • 【python量化】Python實現經典的時間序列預測方法
    from statsmodels.tsa.arima.model import ARMAfrom random import random# contrived datasetdata = [random() for x in range(1, 100)]# fit modelmodel = ARMA(data, order=(2, 1))model_fit
  • 統計計量丨常見統計檢驗的本質都是線性模型(或:如何教統計學) Python版(上)
    本譯文則為python代碼版,原作者為George Ho,具體網址請見:https://eigenfoo.xyz/tests-as-linear/本譯文參考了黃俊文的R版本譯文 。import matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport patsyimport scipyimport statsmodels.api
  • Python模型診斷
    import statsmodels.api as smimport statsmodels.formula.api as smf# 因變量在 ~ 左邊、 自變量在 ~ 右邊house1 = smf.glm('value_per_sq_ft ~ units + sq_ft + boro',
  • 乾貨 :萬字長文,演繹八種線性回歸算法最強總結!
    Statsmodels中的多元線性回歸# 接口一import statsmodels.api as smX = sm.add_constant(X) # 加一個常數model = sm.OLS(Y, X).fit()predictions = model.predict(X) print_model = model.summary()model.rsquared# 接口二from statsmodels.formula.api import olsfrom statsmodels.stats.anova import
  • Python數據科學:方差分析
    統計推斷和統計建模,建立解釋變量與被解釋變量之間可解釋的、穩定的、最好是具有因果關係的表達式。在模型運用時,將解釋變量(自變量)帶入表達式中,用於預測被解釋變量(因變量)的值。現階段,我學習的就是統計推斷與建模的知識...
  • Python時間序列數據分析--以示例說明
    from statsmodels.tsa.stattools import adfullerdef test_stationarity(timeseries):            rolmean = pd.rolling_mean(timeseries,window=12)    rolstd = pd.rolling_std(timeseries, window=12
  • 【python量化】最小二乘法(OLS)和加權最小二乘法(WLS)的原理以及python實現
    先從OLS開始,OLS比較常用的是statsmodels裡的OLS模塊,除此之外,numpy裡本身也有一個函數能實現。這裡從定義出發直接算一個,另外做一個簡單測試對比numpy和statsmodels裡的速度差異。