WHAT' CHA GONNA DO FOR ME?

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

pandasでFF+C4ファクターを作ってみた

pandasでFF3ファクターが取れたので、ここにモメンタムファクターを加えて、Carhartの4ファクターを作ってみたという話。
モメンタムファクターについては以下の通り。

MOM:過去1年間(直近1ヶ月は除く)の勝ち組株をロング、負け組株をショートしたロングショートポート

Carhart(1997)は、この4ファクターを使って米国の投資信託の性質の分析をしていて、これも多分かなり有名。
https://stuwww.uvt.nl/fat/files/library/Carhart,%20Mark%20M.%20-%20On%20Persistence%20in%20Mutual%20Fund%20Performance%20%281997%29.pdf

モメンタムファクターは、フレンチ教授のデータライブラリーでは単体で提供されており、以下で取れる。
欠損値は例によって行ごと削除。

ip=web.DataReader("F-F_Momentum_Factor", "famafrench")
mom=ip[1].replace(-99.99,np.NaN).dropna()

このMOMファクターとFF3ファクターを結合したい。
ただ、両データの日付が微妙に違うため、両方にある日付だけを対象に結合したい。
要はSQLでいうところのINNER JOINをやりたいので、pandasのmerge関数を使う。オプションでインデックスをキーにする。

ffc4=pd.merge(ff3,mom,left_index=True, right_index=True)

要約統計量と時系列プロットは前回見たので、今回はヒストグラムとボックスプロットを見てみる。
f:id:lofas:20150213153812p:plain
f:id:lofas:20150213153822p:plain

よく言われているように、モメンタムファクターの負への歪みが強烈。

コード全体はこんな感じ。

# -*- 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_Momentum_Factor", "famafrench")
mom=ip[1].replace(-99.99,np.NaN).dropna()

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

ffc4=pd.merge(ff3,mom,left_index=True, right_index=True)
ffc4.hist(bins=50,normed=True)
ffc4.boxplot()