WHAT' CHA GONNA DO FOR ME?

Python、統計、機械学習、R、ファイナンスとか

pandasでFama-Frenchの3ファクターを取ってみた

pandasで、Franch教授のデータライブラリーからデータがインポートできるときいたので、実際にやってみた。

ファイナンスでは、Fama-Frenchの3ファクターという有名なファクターがある。
それぞれのファクターのざっくりとした説明はこちら。

Mkt-RF:リスクフリーレートで借り入れて時価加重のマーケットポートをロングするロングショートポート
SMB:小型株をロングして大型株をショートするロングショートポート
HML:バリュー株をロングしてグロース株をショートするロングショートポート

詳細は、French教授のHPを読みましょう。
Kenneth R. French - Data Library

もしくは超有名な原論文を読みましょう。
FF(1992)
http://www.bengrahaminvesting.ca/Research/Papers/French/The_Cross-Section_of_Expected_Stock_Returns.pdf
FF(1993)
http://home.business.utah.edu/finmll/fin787/papers/FF1993.pdf

↓の1行で取れると聞いて半信半疑でやってみたら、

In [144]: ip=web.DataReader("F-F_Research_Data_Factors", "famafrench")

本当に取れた。たまげたなあ。
今までHPからzip落として解凍して、テキストファイルからcsv作ってRで読み込んでたのは何だったんや!

ディクショナリー型で取れて、key:0が月次リターン、key:1が年次リターンのようなので、ここでは月次を使う。
\-99.99は欠損を表すのでNaNに変換してレコードごと削除したうえで、3ファクターだけを抜き出す。
これが1行でさらっと書けるのはすばらしい。

In [145]: ff3=ip[0].replace(-99.99,np.NaN).dropna().ix[:,0:3]

要約統計量と時系列プロットを見てみる。これも簡単に書ける。

In [149]: ff3.describe()
Out[149]: 
          1 Mkt-RF        2 SMB        3 HML
count  1062.000000  1062.000000  1062.000000
mean      0.653927     0.219642     0.396591
std       5.404478     3.224314     3.536978
min     -29.130000   -16.400000   -13.280000
25%      -2.015000    -1.560000    -1.277500
50%       1.025000     0.060000     0.230000
75%       3.657500     1.780000     1.747500
max      38.850000    36.700000    35.460000

In [150]: ff3.plot()
Out[150]: <matplotlib.axes._subplots.AxesSubplot at 0x1b4937d0>

f:id:lofas:20150213131247p:plain

コード全体はこちら。
pandasかわいいよpandas

# -*- coding: utf-8 -*-
import pandas.io.data as web
import numpy as np
import seaborn as sns
import pandas as pd

ip=web.DataReader("F-F_Research_Data_Factors", "famafrench")
ff3=ip[0].replace(-99.99,np.NaN).dropna().ix[:,0:3]
ff3.describe()
ff3.plot()