Advertisement
Advertisement

More Related Content

Advertisement

TensorFlowで統計モデリング

  1. TensorFlowで統計モデリング Kentaro Matsuura 2018.12.9
  2. ある架空の電化製品の価格
  3. 複数店舗の週次の時系列データ • ドメイン知識にサポートされているデータの特徴 • 経過時間とともに価格𝑌が指数関数的に減少する • 値が高い時の方が, 低い時よりバラツキが大きい • 複数の理由から途中で下げ止まる期間がありそう 3
  4. 目的 • 全体平均の価格推移を予測したい. • バラツキがどれほどか知りたい. ※ここでは, 複数店舗をまとめて扱うとする. 4
  5. とりあえずProphetで 5 予測区間がちょっと狭過ぎ?? 予測が0を下回っている?? • 悪くない!けど…
  6. Prophetの長所 • お手軽! • 一般化加法モデルの表現力が高い. • 周期成分の抽出に優れていると思う. 6
  7. Prophetの短所 トレンド関連 • トレンドがペキペキ折れ線で検出しにくい場合がある. • トレンドが滑らかにならずジグザグになる場合がある. • トレンドがペキッと変わることを予測するのが難しい. • 以上から, トレンドの予測が良くない場合がある. その他の機能 • 出力が多次元の時系列に未対応. • 任意の非線形関数や減衰するイベント効果に未対応. その前に, Prophetのモデルを理解してますか? 7
  8. 統計モデルを理解しよう 理由 • 現実は, ツールの前提条件をいとも簡単に破る! • そのとき, 自分で拡張できると楽しい. • 拡張するには, 統計モデルの理解が必須. 8 アルゴリズム 統計モデル 前提条件・適用範囲 長所と短所ここまでの理解は 分析に必須 できればここまで 理解してほしい! • 手法を実装したツールのレイヤー
  9. 本発表の方針 • 思考がツールに縛られるのは楽しくないので, なるべく 汎用的なツールを使いたい. • ドメイン知識を反映して, 真の構造に近い構造をモデル に組み込めば, 予測性能は向上するはず. ※ 予測の評価方法についてはここでは省略. 9 この例をTensorFlowでモデリングしてみよう!
  10. 速習TensorFlow
  11. 僕の中のTensorFlow 「GPUを簡単に使える勾配法による点推定ツール」 利点 • モデルをかなり自由に設定できる • 推定アルゴリズムが豊富 • DNN用の関数が豊富 • 可視化ツール(TensorBoard)が良い 欠点 • sessionまわりが面倒くさい • tf.XXXみたいな関数たちをまた覚えるのか… 11
  12. TensorFlowの使い方① モデル定義 • データを代入する変数を tf.placeholder で定義 • 推定したい変数を tf.Variable で定義 • これらの変数を組み合わせて, 最小化したいcost (loss, 目的関数) を定義する. 最適化 • costを引数に推定のアルゴリズム(Optimizer)を 選択して, 変数(例: train)に格納する. • sessionを立ち上げて各変数の初期化をする. • run関数で, costが収束するまでtrainを評価. 12
  13. TensorFlowの使い方② • 線形回帰のデモ tf_tutorial.html 13
  14. TensorFlowで統計モデリング ~知識を数式に落としこむ練習~
  15. Model 1 指数関数でフィッティング 15
  16. 数式への落とし込み① “経過時間とともに指数関数的に減少する” 16 “指数関数でフィッティング” 𝜇 𝑖 = 𝑦0 exp −𝜆 𝑇 𝑖
  17. 数式への落とし込み② “値が高い時の方が, 低い時よりバラツキが大きい” 17 “対数をとってから(二乗誤差で)フィッティング” ノイズは𝜀 ~ 𝑁 0, 𝜎2 に従うとして, (1)式ではなく, (2)式で考えていることに相当する. 𝑌 𝑖 = 𝜇 𝑖 + 𝜀 (1) 𝑌 𝑖 = 𝜇 𝑖 𝑒 𝜀 (2)
  18. 図解 18 𝑌 𝑖 = 𝜇 𝑖 𝑒 𝜀 𝑌 𝑖 = 𝜇 𝑖 + 𝜀 同じ幅 値が大きい時に 幅が大きい
  19. TensorFlowによる実装&結果 • modeling.html のModel 1 19
  20. Model 2 時の流れを止める 20
  21. 数式への落とし込み③ “途中で下げ止まる期間がありそう” 21 下げ止まる=時の流れが止まる と考えた.
  22. 実質的な時間経過𝑓 𝑇 の導入 𝜇 𝑖 = 𝑦0 exp −𝜆 𝑓 𝑇 𝑖 22 時刻 𝑇 𝑓 𝑇 実質的な時間経過 𝜇 𝑠𝑙𝑜𝑝𝑒は 0,1 の範囲を動く 𝑠𝑙𝑜𝑝𝑒 = 1なら 時の流れは普段通り 𝑠𝑙𝑜𝑝𝑒 = 0なら 時は完全に止まる
  23. 𝑠𝑙𝑜𝑝𝑒と𝑓の実装例 • 制約のない変数 slope_raw を定義する • tf.sigmoidで 0,1 の範囲の変数slope を作る • slope の累積和で f を作る 例 • slope = [0,1,1,1,0,0,0,1,1,1] とすると, f = [0,1,2,3,3,3,3,4,5,6] となる. 23
  24. TensorFlowによる実装&結果 • modeling.html のModel 2 24
  25. Model 3 時の流れを滑らかにする 25
  26. 数式への落とし込み④ “時の流れは滑らか” 26 時刻の隣同士の𝑠𝑙𝑜𝑝𝑒は“似ている” slope_rawに2次のトレンドモデルを設定
  27. 1次のトレンドモデル 𝑡𝑟𝑒𝑛𝑑 𝑡 ~ 𝑁 𝑡𝑟𝑒𝑛𝑑 𝑡−1, 𝜎𝑡𝑟𝑒𝑛𝑑 2 𝑡 = 2, . . , 𝑇 • 𝑡𝑟𝑒𝑛𝑑の値が滑らかであることの一表現 • 使用頻度が高い! トレンドの予測 • 最後の時刻𝑇以降は, 𝑡𝑟𝑒𝑛𝑑 𝑇を並べて予測する 実装 • 上式の対数尤度をそのままcostに追加すればよい 27
  28. 2次のトレンドモデル 𝑡𝑟𝑒𝑛𝑑 𝑡 − 𝑡𝑟𝑒𝑛𝑑 𝑡−1 ~ 𝑁 𝑡𝑟𝑒𝑛𝑑 𝑡−1 − 𝑡𝑟𝑒𝑛𝑑 𝑡−2, 𝜎𝑡𝑟𝑒𝑛𝑑 2 𝑡 = 3, . . , 𝑇 あるいは, 𝑡𝑟𝑒𝑛𝑑 𝑡 ~ 𝑁 2 𝑡𝑟𝑒𝑛𝑑 𝑡−1 − 𝑡𝑟𝑒𝑛𝑑 𝑡−2, 𝜎𝑡𝑟𝑒𝑛𝑑 2 𝑡 = 3, . . , 𝑇 • 𝑡𝑟𝑒𝑛𝑑の変動分が滑らかであることの一表現 • 使用頻度が高い! トレンドの予測 • 最後の時刻𝑇以降は, 最後の変動𝑡𝑟𝑒𝑛𝑑 𝑇 − 𝑡𝑟𝑒𝑛𝑑 𝑇−1 がそのまま続くものとして予測する. 28
  29. TensorFlowによる実装&結果 • modeling.html のModel 3 29
  30. まとめ • 現実は, ツールの前提条件をいとも簡単に破るので, 自分で拡張できるようにモデルを理解してほしい. • 知識を数式に落とし込む経験は非常に大切. 日々やってみよう. • TensorFlowなどの汎用的なツールに慣れておこう. • 実は今日やったようなモデルの試行錯誤をずっと簡 単にできるのがStan. Stanの話はまたいつか. 30
Advertisement