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)
要約統計量と時系列プロットは前回見たので、今回はヒストグラムとボックスプロットを見てみる。
よく言われているように、モメンタムファクターの負への歪みが強烈。
コード全体はこんな感じ。
# -*- 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()