まず、株や為替の価格の変動やリスクを数学的手法で定量的に分析・予測する方法について整理します。
社会的要因
景気動向、GDP成長率、求人倍率、失業率、個人消費指数、雇用統計
経済的要因
貿易黒字・赤字、原材料価格、インフレ率・デフレ率、財政黒字・赤字、
為替レートの変動、原油や金などの指標価格の変動、生産指数、金利の変動
金融政策要因
公開市場操作、公定歩合操作、預金準備率操作
国内外の政治動向要因
選挙結果、政策変更発表、政治の安定性、戦争、テロ、自然災害、疫病、法規制の変更、貿易摩擦などの国際関係
マーケット要因
海外市場の動向、マーケットメーカーの動向、市場参加者の構成員の変更、信用取引残高、ストップ高・安やサーキットブレーカーの発動
情報要因
メディア報道、影響力のある発信者の言動、SNSでの情報拡散
株価固有の変動要因
決算発表、配当金、不祥事や訴訟問題、新製品や新技術の発表、競合他社の技術動向、M&A、事業売却
市場の不確実性やランダム性をモデル化し、確率過程などを用いて、株価の動きを表現します。
ランダムウォーク
端的に説明すると、「効率市場仮説が成立していれば株価の未来の価格は予測不可能である」という理論です。
つまり、過去の株価のパターンを分析して未来の価格を予測しようとするテクニカル分析の有効性自体を否定しています。
早とちりした初学者が株価予測を諦めそうな理論ですが、分布や独立性の要件を満たすランダム状態であれば、中心極限定理や幾何ブラウン運動式に従い、確率は正規分布に収束します。
つまり、尺度を広げると、将来のリスクやリターンを近似できるということを示唆しています。
市場全体に分散投資を行うインデックスファンドはランダムウォーク理論に基づいています。
特定の指数に連動するように設計され、個別銘柄ではなく、全体に投資することでリスクを分散し、平均的な市場リターンを狙います。
運用期間が長期になるほど平均を超えるパフォーマンスが出る結果は理論を裏付けています。
パーソンズ法
ピアソン相関係数やカイ2乗検定などの統計的手法を用いた手法でポートフォリオ理論やアセットアロケーションで利用されています。
ブラウン運動
物理学では微粒子のランダム動作を捉える為に使われますが、金融分野でも数理的表現として使われています。
株価、為替、金利、オプション、信用取引などを、モデル化・観測・評価する為の基本的な土台です。
モンテカルロシミュレーション
不確実性やランダム性を含めた確率モデルで、信用リスクの算定などに使われています。
ボリンジャーバンド
過去の一区間の価格の平均値をSMA(単純)、EMA(指数平滑)、WMA(加重)で計算した移動平均線と標準偏差を使って、株価の変動の程度を測ります。
時系列分析
AR(自己回帰)
過去の値を線形結合し、分析することで現在や未来の値を推測する。
ARIMA(自己回帰和分移動平均)
移動平均に加え、回帰と積分を加えたもの
SSM(状態空間)
観測できない潜在状態と、そこから得られる観測値を組み合わせ、時系列データを解析する方法。
状態方程式と観測モデルの2要素から構成。
ファンドや証券会社は、こういった分析を得意とする高等数学を学んだアクチュアリーやクオンツの就職先でしたが、近年、BlackRock社を除く大手は軒並み人員を削減しています。
BIツールをポチポチやっていたような高給取りはシステムに置き換わり、金融市場を動かす主戦力はPh.D持ちになっています。
伝統的な手法の先鋭化と共に、近年、始まった新しい分析手法について、いくつか紹介します。
テキストマイニングによる情報の符号化
日銀の「経済・物価情勢の展望」よりワードを拾って形態素解析を行います。
https://www.boj.or.jp/mopo/outlook/index.htm
サンプルコード
import MeCab import matplotlib.pyplot as plt import japanize_matplotlib from collections import Counter def read_text(file_path): with open(file_path, 'r', encoding='utf-8') as file: return file.read() def analyze_text(text): tagger = MeCab.Tagger() node = tagger.parseToNode(text) words = [] while node: pos = node.feature.split(',')[0] if pos in ['名詞', '動詞', '形容詞']: sub_pos = node.feature.split(',')[1] if sub_pos not in ['接続助詞', '係助詞', '副助詞']: words.append(node.surface) node = node.next return words def count_word_frequency(words, top_n=20): return Counter(words).most_common(top_n) def plot_word_frequency(word_counts): words, counts = zip(*word_counts) plt.figure(figsize=(10, 6)) plt.bar(words, counts) plt.title('出現頻度') plt.xticks(rotation=45) plt.show() def main(): file_path = 'sample.txt' text = read_text(file_path) words = analyze_text(text) word_counts = count_word_frequency(words) print("出現頻度 ") for word, count in word_counts: print(f"{word}: {count}回") plot_word_frequency(word_counts) if __name__ == '__main__': main()
形態素解析では統計的な分類しか出来ませんが、GPTのような自然言語処理に優れたLLMは文章の細かなニュアンスや抽象的な言い回しも解釈できます。
各社の有価証券報告書からSNS上の個人の発信まで、人力では読み切れない膨大なテキストベースの非構造化データの分析が可能です。
画像解析
あるファンドでは、OrbitalInsight社などが有償で提供している衛星画像を解析し、航行する全隻のタンカーの数をカウント。オイルマネー算出に利用する試みが行われています。
他のオルタナティブデータの活用例としては、交通量や求人情報の解析があります。
データ収集と抽出・分析を自動化することで、今まで拾いきれなかった情報まで取り扱えるようになりました。