書評:Shocks, Crises, and False Alarms: How to Assess True Macroeconomic Risk

2025/4/20

Shocks, Crises, and False Alarms: How to Assess True Macroeconomic Risk Philipp Carlsson-Szlezak, Paul Swartz Shocks, Crises, and False Alarms: How to Assess True Macroeconomic Risk  本書はマクロ経済における近年見られたような、ショック、危機などのリスクを案内します。  マクロ経済のリスクを判断するとき、リスクが実際のショック ...

ReadMore

合衆国の新関税の税率と貿易収支

2025/4/17

2025年4月2日に合衆国の新しい関税の税率が公表されました。現在の貿易収支の状況と導入される関税の税率をまとめます。 合衆国の貿易収支 図1 合衆国の貿易収支2023年(単位:USD million)  図1は、左側が輸出国、右側が輸入国です。マウスポインタを領域の上に置くと、輸出入額(単位:100万USドル)を表示します。 データソースはJETROがまとめている貿易投資年報より参照。 新関税の税率と各国の対米貿易収支 図2 関税税率と対米貿易収支 対米貿易収支は、輸出額から輸入額を減算した値(単位:1 ...

ReadMore

強化学習による因果探索 gCastle因果探索アルゴリズムの検証(3)

2025/3/18

gCastleに実装された探索アルゴリズムの中で、強化学習を使ったアルゴリズムが高い性能を示しています。本稿ではこの探索のための強化学習アルゴリズムを解説します。 強化学習を使った探索  強化学習は一般的にポリシーを学習することを目的に用いられますが、彼らはこれをDAGの探索に使っています。  巡回セールスマンの問題と同様に、d次元のnシーケンスでベストスコアを導くことで、入力データからバイナリの隣接行列の生成を考えます。  隣接行列を出力するためにエンコーダ/デコーダ・モデルを作りますが、エンコーダ自己 ...

ReadMore

CastleBoardの使い方 gCastle因果探索アルゴリズムの検証(2)

2025/3/2

中国のAI技術動向の調査を兼ねて、gCastleに実装された因果探索アルゴリズムを検証しました。gCastleはGUIツールCastleBoardを含んでいますが、パッケージにツールのマニュアル類は添付されていません。そのため、本稿では実際にアルゴリズムを検証するためのCastleBoardの使い方について解説します。 CastleBoardの操作  GUIツールはいくつかの設定項目への入力でテストデータを生成できるため、テストプログラムを組むより簡単にアルゴリズムを検証できます。ツールの機能は主に二つの ...

ReadMore

マイニング・セクターのリスク許容度、関税の影響 (DoubleMLの推論)

2025/3/14

 2025年2月に合衆国の新政権の政策として、鉄鋼とアルミニウムに25%の関税が課されることが決定されました。一方で、ウクライナへのこれまでの支援の対価として、ウクライナの鉱物資源などの天然資源の権益取得が交渉されています。  この関税政策が、原料である鉄鉱石やボーキサイトなどの鉱物資源の採掘を行なっている企業に与える影響について分析します。  分析手段として機械学習を使った推論手法、DoubleML(Double Machine Learning)を用います。このDoubleMLという推論手法と同じ名称 ...

ReadMore

gCastle 因果探索アルゴリズムの検証

2025/2/28

gCastleは、因果探索アルゴリズムが実装された因果の構造を学習するツールチェインです。パッケージは、Webアプリを含んでおり、因果探索アルゴリズムがGUIベースの操作で検証できるようになっています。 gCastle 概要  Huawei社のリサーチラボから提供されています。因果探索アルゴリズムが実装されており、Webアプリを使用してアルゴリズムの動作が検証できます。  GCastleの名称は、Gradient-based Causal Structure Learning pipeline. の頭文字 ...

ReadMore

クレジット・カードの種別と利用額の最適化 YLearnによる因果推論(2)

2025/2/20

YLearn因果推論パッケージを使ったケース・スタディを使ってYLearnの機能を解説します。YLearnの因果推論パイプラインを使ったマーケティング上の分析の一つになります。クレジット・カードのグレードを更新した場合の効果の推論です。 機能と仕様  以下、簡単に機能をまとめ、最後にケーススタディを使って動作を確認します。ケース・スタディでは、Kaggleの実際のデータセットを使います。 DAG グラフと交絡因子  観測されていない変数はconfounding arcとして定義し、下の図1では(黒の点線) ...

ReadMore

YLearnによる因果推論(1) 概要とセットアップ

2025/2/20

 因果推論はAIシステムが、イベント間の真の因果関係をよりよく理解する助けになります。中国製のLLMが最近、話題(注1)になっていたので、データサイエンス分野で中国の因果推論に関する取り組みとツールについて評価します。  因果推論や因果探索のツールとして、Huaweiが提供しているgCastleと、因果探索・因果推論ツール、ylearnを使います。gCastleはPyTorchで実装された因果探索パッケージです。因果関係に関連した代表的なアルゴリズムが実装されて、検証ツールが提供されています。Huawei ...

ReadMore

Jupyter-notebookがAnaconda Navigatorから起動できない問題

2025/2/6

新しいAnaconda Navigatorをインストールしたところ、jupyter-notebook(7.3.2)がNavigatorから起動できない問題がありました。 Navigatorのエラーメッセージは、次のようになっています。 【The file /Users/xxx/anaconda3/bin/Jupyter_mac.command does not exist.】 jupyter_mac.command does not exist.  問題は、インストールまたはNavigatorが参照してい ...

ReadMore

Apple Silicon Mac 用 Anacondaバージョン更新・インストール

2025/2/5

Apple Silicon用に新しいバージョンのAnacondaがリリースされていたので、Navigatorの更新を兼ねてインストールします。 (Mac OSの更新(Sequoia15.3)によって、使用中のNavigatorが起動しなくなったため) Anaconda Navigatorのインストール  以下のAnacondaのサイトにアクセスします。最近のAIに対する、人と資本、計算リソースの流れを反映した画面に様変わりしています。 https://www.anaconda.com  【1】画面左上のP ...

ReadMore

ファイナンス リスクモデル

為替レートと地政学的リスク- 割り込まれた時系列データのCausalPyによる分析

 R版の因果推論パッケージCausalImpactの評価のために、軍事侵攻が外国為替レートに与えた影響を、counterfactual推論(注1)の例として紹介しました。このCausalImpactのPython実装版がgoogleから提供されました。これはTensorFlow Probabilityの上に実装されています。その他、Python用の因果推論パッケージが多くリリースされています。その中でPyMCの因果推論ライブラリCausalPyを取り上げ、前述のR版CausalImpactで用いたデータセットを使ってこの実装を評価してみます。

注1:Counterfactual

実際の観測値に反する推論。もしその割り込み(intervention)が発生していなければ、観測データはどうなっていたかを実際とは異なる状況を想定して推論します。ここでは、ツールの評価用に入手が容易な時系列データのサンプルとして為替レートを用います。

因果推論ライブラリ

 ここで評価するツール以外にもPythonの因果推論パッケージが多くリリースされいます。西海岸の企業だけでなく、ハイテク企業やコンピュータサイエンスに力を入れている大学などが、最近、AIへの投資を増加させているので、Googleの他、複数の企業や研究機関からベイジアンと機械学習に関連した因果推論ライブラリが提供されています。別の機会にいくつか紹介したいと思います。

tfCausalImpact

 TensorFlow Probabilityは、当初、EdwordとしてTensorFlowを使って実装されていたPythonのベイジアンライブラリをTensorFlowが本体に取り込んで、機能を追加したものです。TensorFlowがKerasを内部に取り込んで本体のAPIとして提供しているのと同様です。以前のKerasやEdwordは外部ライブラリでなくTensorFlow内のAPIとして提供されています。

  • インストール
pip install tfCausalimpact

 APIの引数の仕様はR版を踏襲しており、ほぼ同じ仕様です。結果の出力も以下の記事で解説しているR版のCαusalImpactと同一の仕様になっています。

CausalPy

 CausalPyはPyMCをベースにした因果推論パッケージです。

 APIの引数の仕様は以下の”割り込まれた時系列データの例”を参照してください。結果の表示におけるHDIはHighest Density Intervalsを意味し0を含む、94%の信頼区間として定義してあります。

  • インストール
pip install CausalPy

割り込まれた時系列データの例

 R版のCausalImpactの評価で用いたデータセット(期間2021-05-12 ~ 2023-03-17のドル円為替レート)を使って、CausalPyの時系列データに対する割り込み(intervention)を評価します。最初にCausalPyをインポートします。

import arviz as az
import pandas as pd

import causalpy as cp
%load_ext autoreload
%autoreload 2
%config InlineBackend.figure_format = 'retina'
seed = 42
The autoreload extension is already loaded. To reload it, use:
  %reload_ext autoreload

 CausalImpactで用いた為替レートのデータ(USDJPY.csv)を読み込みます。

 pd.readcsv(index_colum = 0)でインデックスカラムを指定して読み込んだ場合、dateがindexとして認識されますがデータ型が文字列になります。このままCausalPyのAPIに渡すとindexがTimestamp型でないため、エラーになります。そのため、index_columを設定せずにcsvを読み込み、データフレームのインデックスをTimestamp型に設定します。

urlpath = "./../ファイルパス/USDJPY.csv"

#df_x = pd.read_csv(urlpath,index_col=0)
df_x = pd.read_csv(urlpath)
df_x.index = pd.to_datetime(df_x['date'])
df_x = df_x.drop('date',axis=1)

 割り込みの日時を設定し、新しいデータフレームを作ります。

treatment_time = pd.to_datetime("2022-02-25")
df = pd.DataFrame({ 'x':df_x['t'],'y':df_x['close']})
df.head()

データ系列は以下のようになります。

 モデルを定義し、PyMCのサンプラーを実行します。fomulaの定義"y ~ 1 + x"の最初の項の1は、線形回帰においてインターセプトを適合させるかどうか(0または1)を意味します。

result = cp.pymc_experiments.InterruptedTimeSeries(
    df,
    treatment_time,
    formula="y ~ 1 + x",
    model=cp.pymc_models.LinearRegression(sample_kwargs={"random_seed": seed}),
)

 サンプリングが終了しました。結果を表示します。

fig, ax = result.plot()

 R版CasalImpactと比較して,CausalPy版のCausalImpactも同じ三つのパネルを表示します。同様の結果を確認することができます。

result.summary()

総合的な影響による推論 - Synthetic controlの例

 CausalPyを使った複数のユニットの中の特定のユニットに処置を施す合成コントロール(Synthtic control)の例として、複数の通貨バスケットの中での出来事の影響によるJPYの推移を調べてみます。Synthetic controlのcounterfactualの例を外国為替レートに応用して検証してみましょう。

 日本円以外の主要国の通貨のクロスレートを用いて調べてみます。他通貨との比較をわかりやすくするために、円の為替レートはUSDJPYでなくJPYUSDを使います。通貨のクロスレートの単位を合わせるために、USD 1 : JPY 100でスケールを変換しています。ここで用いるJPYUSDの指標は、実際のJPYUSDレートを100倍しています。

 次の通貨、AUD,CHF,EUR,GBPを使います。counterfactual予測の前に、線形回帰と同様の考えで、これらの通貨を用いてJPYUSDを近似します。これらの通貨をdonor poolとみなし、JPYの結果を予測します。treatmentの時期は、前の割り込み時系列の例と同じ日程の2022年2月末日で設定します。シミュレーション後にtreatment以後のJPYのcounterfactual予測と実際のデータを比較します。

 主要通貨の対ドルレートのデータを’’crossUSD.csv"を読み込みます。

urlpath = "./ファイルパス/crossUSD.csv"

df_x = pd.read_csv(urlpath)
df_x.index = pd.to_datetime(df_x['date'])
df_x = df_x.drop('date',axis=1)
df2 = pd.DataFrame({ 'aud':df_x['Audusd'],'chf':df_x['Chfusd'],'eur':df_x['Eurusd'],'gbp':df_x['Gbpusd'],'y':df_x['Jpyusd']})
df2

 データフレームは以下のようになります。

 Synthetic control estimatorの予測には、pymc_modelsモジュールからWeightedSumFitter()を用います。

model2 = cp.pymc_models.WeightedSumFitter()

 formulaの構造は、以下の定義になります。interceptはfitさせません。

formula2 = 'y ~ 0 + aud + chf + gbp + eur'

 モデルを定義して、サンプラーを動かします。

treatment_time = pd.to_datetime("2022-02-28")
model2 = cp.pymc_models.WeightedSumFitter()
formula2 = 'y ~ 0 + aud + chf + gbp + eur'
results = cp.pymc_experiments.SyntheticControl(
    df2,
    treatment_time,
    formula = formula2,
    model = model2
)

 サンプリングが終了しました。結果を表示します。

fig, ax = results.plot()

results.summary()

 結果を見ると、図のSynthetic Controlとの間で幾らかの乖離があります。出来事の前まで、地域的に近いAUDとの連動の割合が大きかった分、実際の観測値は、AUDの推移より大きな変動をもたらしていることを意味しています。欧州通貨同様にエネルギー需給の影響を強く受けているため、乖離は大きくなってます。

 Synthetic controlの各通貨の重みの係数を表示します。

ax = az.plot_forest(results.idata, var_names="beta", figsize=(6, 3))
ax[0].set(title="Estimated weighting coefficients");

-ファイナンス, リスクモデル
-, , , , , ,