Submit Search
Upload
Pythonでカスタム状態空間モデル
•
1 like
•
1,375 views
Hamage9
Follow
状態空間モデルの真の力はカスタムモデルを構築することです。カスタム状態空間モデルをPythonで実装する方法を説明しています
Read less
Read more
Data & Analytics
Report
Share
Report
Share
1 of 21
Download now
Download to read offline
Recommended
Rパッケージ“KFAS”を使った時系列データの解析方法
Rパッケージ“KFAS”を使った時系列データの解析方法
Hiroki Itô
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
Masashi Komori
変分ベイズ法の説明
変分ベイズ法の説明
Haruka Ozaki
PRML第6章「カーネル法」
PRML第6章「カーネル法」
Keisuke Sugawara
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
Shushi Namba
階層ベイズとWAIC
階層ベイズとWAIC
Hiroshi Shimizu
PRML輪読#3
PRML輪読#3
matsuolab
Recommended
Rパッケージ“KFAS”を使った時系列データの解析方法
Rパッケージ“KFAS”を使った時系列データの解析方法
Hiroki Itô
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
【読書会資料】『StanとRでベイズ統計モデリング』Chapter12:時間や空間を扱うモデル
Masashi Komori
変分ベイズ法の説明
変分ベイズ法の説明
Haruka Ozaki
PRML第6章「カーネル法」
PRML第6章「カーネル法」
Keisuke Sugawara
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
Shushi Namba
階層ベイズとWAIC
階層ベイズとWAIC
Hiroshi Shimizu
PRML輪読#3
PRML輪読#3
matsuolab
状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38
horihorio
階層ベイズと自由エネルギー
階層ベイズと自由エネルギー
Hiroshi Shimizu
構造方程式モデルによる因果推論: 因果構造探索に関する最近の発展
構造方程式モデルによる因果推論: 因果構造探索に関する最近の発展
Shiga University, RIKEN
距離と分類の話
距離と分類の話
考司 小杉
Rによるベイジアンネットワーク入門
Rによるベイジアンネットワーク入門
Okamoto Laboratory, The University of Electro-Communications
Rで階層ベイズモデル
Rで階層ベイズモデル
Yohei Sato
グラフィカルモデル入門
グラフィカルモデル入門
Kawamoto_Kazuhiko
比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
takehikoihayashi
これからの仮説検証・モデル評価
これからの仮説検証・モデル評価
daiki hojo
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介
Naoki Hayashi
ELBO型VAEのダメなところ
ELBO型VAEのダメなところ
KCS Keio Computer Society
スパース推定法による統計モデリング(入門)
スパース推定法による統計モデリング(入門)
Hidetoshi Matsui
計量経済学と 機械学習の交差点入り口 (公開用)
計量経済学と 機械学習の交差点入り口 (公開用)
Shota Yasui
2 3.GLMの基礎
2 3.GLMの基礎
logics-of-blue
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
宏喜 佐野
Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)
Kohta Ishikawa
PRML勉強会 #4 @筑波大学 発表スライド
PRML勉強会 #4 @筑波大学 発表スライド
Satoshi Yoshikawa
ブートストラップ法とその周辺とR
ブートストラップ法とその周辺とR
Daisuke Yoneoka
Disentanglement Survey:Can You Explain How Much Are Generative models Disenta...
Disentanglement Survey:Can You Explain How Much Are Generative models Disenta...
Hideki Tsunashima
PRML輪読#11
PRML輪読#11
matsuolab
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
de:code 2017
後期第五回ネットワークチーム講座資料
後期第五回ネットワークチーム講座資料
densan_teacher
More Related Content
What's hot
状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38
horihorio
階層ベイズと自由エネルギー
階層ベイズと自由エネルギー
Hiroshi Shimizu
構造方程式モデルによる因果推論: 因果構造探索に関する最近の発展
構造方程式モデルによる因果推論: 因果構造探索に関する最近の発展
Shiga University, RIKEN
距離と分類の話
距離と分類の話
考司 小杉
Rによるベイジアンネットワーク入門
Rによるベイジアンネットワーク入門
Okamoto Laboratory, The University of Electro-Communications
Rで階層ベイズモデル
Rで階層ベイズモデル
Yohei Sato
グラフィカルモデル入門
グラフィカルモデル入門
Kawamoto_Kazuhiko
比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
takehikoihayashi
これからの仮説検証・モデル評価
これからの仮説検証・モデル評価
daiki hojo
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介
Naoki Hayashi
ELBO型VAEのダメなところ
ELBO型VAEのダメなところ
KCS Keio Computer Society
スパース推定法による統計モデリング(入門)
スパース推定法による統計モデリング(入門)
Hidetoshi Matsui
計量経済学と 機械学習の交差点入り口 (公開用)
計量経済学と 機械学習の交差点入り口 (公開用)
Shota Yasui
2 3.GLMの基礎
2 3.GLMの基礎
logics-of-blue
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
宏喜 佐野
Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)
Kohta Ishikawa
PRML勉強会 #4 @筑波大学 発表スライド
PRML勉強会 #4 @筑波大学 発表スライド
Satoshi Yoshikawa
ブートストラップ法とその周辺とR
ブートストラップ法とその周辺とR
Daisuke Yoneoka
Disentanglement Survey:Can You Explain How Much Are Generative models Disenta...
Disentanglement Survey:Can You Explain How Much Are Generative models Disenta...
Hideki Tsunashima
PRML輪読#11
PRML輪読#11
matsuolab
What's hot
(20)
状態空間モデルの考え方・使い方 - TokyoR #38
状態空間モデルの考え方・使い方 - TokyoR #38
階層ベイズと自由エネルギー
階層ベイズと自由エネルギー
構造方程式モデルによる因果推論: 因果構造探索に関する最近の発展
構造方程式モデルによる因果推論: 因果構造探索に関する最近の発展
距離と分類の話
距離と分類の話
Rによるベイジアンネットワーク入門
Rによるベイジアンネットワーク入門
Rで階層ベイズモデル
Rで階層ベイズモデル
グラフィカルモデル入門
グラフィカルモデル入門
比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
これからの仮説検証・モデル評価
これからの仮説検証・モデル評価
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介
ELBO型VAEのダメなところ
ELBO型VAEのダメなところ
スパース推定法による統計モデリング(入門)
スパース推定法による統計モデリング(入門)
計量経済学と 機械学習の交差点入り口 (公開用)
計量経済学と 機械学習の交差点入り口 (公開用)
2 3.GLMの基礎
2 3.GLMの基礎
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
ベイジアンモデリングによるマーケティングサイエンス〜状態空間モデルを用いたモデリング
Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)
PRML勉強会 #4 @筑波大学 発表スライド
PRML勉強会 #4 @筑波大学 発表スライド
ブートストラップ法とその周辺とR
ブートストラップ法とその周辺とR
Disentanglement Survey:Can You Explain How Much Are Generative models Disenta...
Disentanglement Survey:Can You Explain How Much Are Generative models Disenta...
PRML輪読#11
PRML輪読#11
Similar to Pythonでカスタム状態空間モデル
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
de:code 2017
後期第五回ネットワークチーム講座資料
後期第五回ネットワークチーム講座資料
densan_teacher
mishimasyk#4
mishimasyk#4
Takayuki Serizawa
C++0x 言語の未来を語る
C++0x 言語の未来を語る
Akira Takahashi
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Yasutomo Kawanishi
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
聡 中川
東京工業大学「ロボット技術」 ロボットミドルウェア
東京工業大学「ロボット技術」 ロボットミドルウェア
openrtm
AOZORAYOMITE and Intent
AOZORAYOMITE and Intent
Yuki Higuchi
GoF デザインパターン 2009
GoF デザインパターン 2009
miwarin
170420 東工大授業「ロボット技術」資料
170420 東工大授業「ロボット技術」資料
openrtm
「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"
Ken'ichi Matsui
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
Daiyu Hatakeyama
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information
Sony Network Communications Inc.
Gurobi python
Gurobi python
Mikio Kubo
2023_freshman
2023_freshman
TakaakiYonekura
実践コンピュータビジョン 3章 画像間の写像
実践コンピュータビジョン 3章 画像間の写像
yaju88
Spock's world
Spock's world
Takuma Watabiki
ソフトウェア自動チューニング研究紹介
ソフトウェア自動チューニング研究紹介
Takahiro Katagiri
世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ
Yukei Wachi
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
Haruki Eguchi
Similar to Pythonでカスタム状態空間モデル
(20)
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
後期第五回ネットワークチーム講座資料
後期第五回ネットワークチーム講座資料
mishimasyk#4
mishimasyk#4
C++0x 言語の未来を語る
C++0x 言語の未来を語る
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
Pythonによる機械学習入門 ~SVMからDeep Learningまで~
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
東京工業大学「ロボット技術」 ロボットミドルウェア
東京工業大学「ロボット技術」 ロボットミドルウェア
AOZORAYOMITE and Intent
AOZORAYOMITE and Intent
GoF デザインパターン 2009
GoF デザインパターン 2009
170420 東工大授業「ロボット技術」資料
170420 東工大授業「ロボット技術」資料
「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information
Gurobi python
Gurobi python
2023_freshman
2023_freshman
実践コンピュータビジョン 3章 画像間の写像
実践コンピュータビジョン 3章 画像間の写像
Spock's world
Spock's world
ソフトウェア自動チューニング研究紹介
ソフトウェア自動チューニング研究紹介
世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
Pythonでカスタム状態空間モデル
1.
pythonでカスタム状態空間モデル 2020-10-27 濱川 普紀
2.
自己紹介 大阪在住 職業:某繊維メーカーで工場のスマート化に従事しています Python歴:2年 趣味:電子音楽制作、ライブ活動 Name : 濱川普紀
Hamakawa Hirotoshi @hamage9
3.
経歴 2000年8月 某産業機械メーカーに就職 電気設計を従事 2016年7月 某産業機械メーカーで IoT開発に従事 2020年3月 某繊維メーカーに就職 工場のスマート化に従事 1997年4月 大学を卒業して電子部品を扱う某商社に 就職。 その後転々と転職。。。
4.
1.状態空間モデルとは 2.観測方程式と状態方程式 3.カスタムモデルの意義 4.今回使用するモデル 5.実装開始 6.データをDataFrameに格納 7.モデルの定義 8.学習、サマリー確認 9.推定と予測 Agenda
5.
状態空間モデルとは ・元々は物理モデルやシステム同定、制御分野などで使用されており、ロケットの軌道の推定 と修正制御に使用されていたことが有名です。 ・時系列解析にベイズ統計の要素を加えたものという解釈もできると思います。 ・一番の特徴は見えない「状態」を推定できることです。センサなどで観測したデータにはノイ ズ(主にセンシング誤差など)が含まれていると考え、そのデータの真の状態を推定します。 (本当の真の状態は神のみぞ知る。)
6.
観測方程式と状態方程式 モデルの構造は、観測方程式(観測モデルという記述の文献もあり)と状態方程式(システム モデルという記述の文献もあり)から成っています。
7.
カスタムモデルの意義 状態空間モデルの中でもカスタムモデルの意義は下記のようなことにあります。 ・状態空間モデルの真の力は、カスタムモデルの作成と推定を可能にすることです。 (statsmodelsのカスタムモデルの説明ページ の引用(Google翻訳)) ・状態空間モデルとは、「たくさんの統計モデルを統一的に表すことができる統計モデ ル」なのです。だから状態空間モデルが注目を浴びてきているのです。( 馬場さんの サイトlogics
of blueの引用) ・私は時系列解析に物理的な変数を組み込むことにより解釈可能なモデルを構築す ることができることだと思っています。
8.
今回使用するモデル ・A:定数 ・B:定数 ・z : 外生変数(exogenous
variable)
9.
実装開始 さてここからPythonコードです。まずはライブラリのインポートなど。 import numpy as
np import pandas as pd import datetime import statsmodels.api as sm import matplotlib.pyplot as plt %matplotlib inline plt.rc("figure", figsize=(16,8)) plt.rc("font", size=15)
10.
実装開始 テスト用のデータを生成。 def gen_data_for_model1(): nobs =
1000 rs = np.random.RandomState(seed=93572) Ht = 5 Tt = 1.001 A = 0.1 B = -0.007 Qt = 0.01 var_z = 0.1 et = rs.normal(scale=Ht**0.5, size=nobs) z = np.cumsum(rs.normal(size=nobs, scale=var_z**0.05)) Et = rs.normal(scale=Qt**0.5, size=nobs) xt_1 = 50 x = [] for i in range(nobs): xt = Tt * xt_1 x.append(xt) xt_1 = xt xt = np.array(x) xt = xt + A * np.exp(B/z) + Et yt = xt + et return yt, xt, z yt, xt, z = gen_data_for_model1() _ = plt.plot(yt,color = "r") _ = plt.plot(xt, color="b")
11.
実装開始 テスト用のデータを生成。観測されたデータと、観測できない真の状態。 ー:観測データ ー:状態プロセス
12.
データをDataFrameに格納 データをDataFrameに格納。 df = pd.DataFrame
() df['y'] = yt df['x'] = xt df['z'] = z df
13.
データをDataFrameに格納 予測をするためにindexをdatetimeにする。 st = datetime.datetime.strptime("2001/1/1
0:00", '%Y/%m/%d %H:%M') date = [] for i in range(1000): if i == 0: d = st dt = d.strftime('%Y/%m/%d %H:%M') date.append(dt) d += datetime.timedelta(days=1) df['date'] = date df['date'] = pd.to_datetime(df['date'] ) df = df.set_index("date") df
14.
モデルの定義 class custom(sm.tsa.statespace.MLEModel): param_names =
['T', 'A', 'B', 'Ht', 'Qt'] start_params = [1., 1., 0., 1., 1] def __init__(self, endog, exog): exog = np.squeeze(exog) # 外生変数は1つのため次元削減 # endog:観測データ(y)、exog:外生変数(z)、k_state=1:状態プロセスの次元 super().__init__(endog, exog=exog, k_states=1, initialization='diffuse') self.k_exog = 1 # 外生変数の次元は1である # Z(design matrix)は単位行列である self['design', 0, 0] = 1. # R(selection matrix)は単位行列である self['selection', 0, 0] = 1. # c_t(state_intercept)は時変数であると定義 self['state_intercept'] = np.zeros((1, self.nobs)) def clone(self, endog, exog, **kwargs): # 時変状態空間行列を含むカスタムモデルであることを定義 return self._clone_from_init_kwds(endog, exog=exog, **kwargs)
15.
モデルの定義 def transform_params(self, params): #
分散は正数である必要があるので一旦2乗する params[3:] = params[3:]**2 return params def untransform_params(self, params): # R2乗したものを1/2乗して元の大きさに戻す(平方根) params[3:] = params[3:]**0.5 return params def update(self, params, **kwargs): # 更新するための定義 params = super().update(params, **kwargs) # T = T:0番目のパラメータをtransition matrixに代入 self['transition', 0, 0] = params[0] # c_t = A * exp(B / z_t):1,2番目のパラメータをstate_interceprに代入 self['state_intercept', 0, :] = params[1] * np.exp(params[2] / self.exog) # Ht:3番目のパラメータを観測ノイズの分散に代入 self['obs_cov', 0, 0] = params[3] # Qt:4番目のパラメータを状態ノイズの分散に代入 self['state_cov', 0, 0] = params[4] 参考文献 ・statsmodelsのMLEModelの説明ページ ・statsmodelsのカスタムモデルの説明ページ
16.
学習、サマリー確認 推定用データと予測用データに分ける df_test = df.iloc[:800,:] df_train
= df.iloc[800:,:] 学習、サマリー確認 mod = custom(df_test['y'], df_test['z']) res = mod.fit() print(res.summary()) # 初めに生成したダミーデータ Tt = 1.001 A = 0.1 B = -0.007 Ht = 5 Qt = 0.01
17.
学習、サマリー確認 推定結果をDataFrameに格納 ss = pd.DataFrame(res.smoothed_state.T,
columns=['x'], index=df_test.index) ss
18.
推定と予測 推定と予測 predict = res.get_prediction() forecast
= res.get_forecast(df.index[-1], exog = df_train['z'].values) ・予測する場合は、どの時点まで予測するかを指定する必要があります。(今回は df.index[-1]で指定) ・外生変数をモデルに使用する場合は、予測の時に「 exog=」の引数でデータを指定 する必要があります。今回は全てがダミーデータですが、実際に予測で使用する場合 は、過去のデータなどからダミーデータを作成する必要があります。 ・データの間隔が不均一なデータは予測に使えません。 (同じく外生変数を使った SARIMAXなども同じことが言えます)
19.
推定と予測 可視化 fig, ax =
plt.subplots() y = df['y'] # Plot the results y.plot(ax=ax,label='y') predict.predicted_mean.plot(label='x') predict_ci = predict.conf_int(alpha=0.05) predict_index = predict_ci.index ax.fill_between(predict_index[2:], predict_ci.iloc[2:, 0], predict_ci.iloc[2:, 1], alpha=0.1) forecast.predicted_mean.plot(ax=ax, style='r', label='forecast') forecast_ci = forecast.conf_int() forecast_index = forecast_ci.index ax.fill_between(forecast_index, forecast_ci.iloc[:, 0], forecast_ci.iloc[:, 1], alpha=0.1) # Cleanup the image legend = ax.legend(loc='best'); fig.savefig('custom_statespace.png')
20.
推定と予測 可視化
21.
ご静聴ありがとうございました 濱川 普紀 21
Download now