1. 程式人生 > >Python金融大資料分析-迴歸分析

Python金融大資料分析-迴歸分析

1.pandas的線性迴歸        

迴歸分析是金融中一個繞不過的話題,其實最好的工具應該是R語言,但是pandas其實也是能夠勝任絕大部分工作的。

        這裡我們就簡單介紹一下。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
noise = np.random.normal(0,12,100)
x= np.array(range(100))
y = 0.7*x + noise
pp = pd.DataFrame({'xvalue':x,'yvalue':y})
model = pd.ols(y=pp['yvalue'],x=pp['xvalue'])
print model
plt.plot(x,y,'r.')
plt.plot(x,model.beta[1]+model.beta[0]*x,'b')

        程式碼很簡單,不用做過多的解釋

         我們可以看一下程式的輸出,以及圖形上的表示。


        這裡,pandas的迴歸給出了上圖的分析。決策係數是0.7621,調整後的是0.7597,不過筆者這裡有一個疑問,一元線性迴歸的調整係數有意義嗎?

        p-value很小,越小越拒絕,所以,我們拒絕原假設,換句話說,這裡的水平是顯著的。我們可以看到,我們程式中x和y的關係是沒有intercept項的,但是在迴歸的時候卻產生了。但是我們可以看到,他的p-value是很大的,所以,講道理我們是可以拒絕原假設,換句話說,截距項是不顯著的,也就是說,我們不能承認這一截距項是對的。


        然後繪製一個圖,直觀的看一下回歸的過程,總的來說,效果還是很好的。當然,如果我們用的是真實世界的資料,恐怕就不會那麼好了吧。

2.numpy的迴歸擬合

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#定義一個函式,用於迴歸
def f(x):
    return np.sin(x) + 0.5*x
#對x抽樣
x = np.linspace(-2*np.pi,2*np.pi,50)
#利用一階線性進行迴歸
reg = np.polyfit(x,f(x),deg = 1)
#rg就是迴歸之後的y的取值
ry = np.polyval(reg,x)
plt.plot(x,f(x),'b')
plt.plot(x,ry,'r.')
        numpy中的擬合更加具有實用意義,其實我們可以改變deg來進行不同階的多項式的擬合。
既然我們可以進行多項式擬合,那麼也就可以給出不同的擬合基函式。

        上面的例子中,我們的曲線實際上是由sin函式和x組合的,所以,假設我們知道了這樣的情況,然後,選好這樣的兩個基,然後進行迴歸擬合,應該會得到更加好的效果,而實際上也確實是這樣的。

matrix = np.zeros((2,len(x)))
matrix[1,:] = np.sin(x)
matrix[0,:] = x
reg = np.linalg.lstsq(matrix.T,f(x))[0]
print reg
ry = np.dot(reg,matrix)
plt.plot(x,f(x),'b')
plt.plot(x,ry,'r.')
        在上面的程式碼中,我們首先初始化了一個matrix,這個matrix就是用來儲存我們的基的。一個是sin一個是x。然後用linalg,線性模擬函式,最小化平方和的方法獲取reg,然後用dot方法或者擬合後的y值,如果對矩陣或者線性代數很瞭解的話,這一過程應該是可以很容易就理解的。

         我們繪製出來後是這樣的結果。


        發現擬合的非常完美,然後擬合係數打印出來後時候0.5與1,這和我們設定的完全一樣。