FinTechの活用事例【継続的アップデート】

FinTechと書きましたが、実際は、気になる研究を斜め読みした、感想も書いています。

# 8th May 2019
## ReWork Deep Learning in Finance Summit
https://syncedreview.com/2019/04/15/rework-deep-learning-in-finance-summit/

3月19日・20日に、ロンドンで、FinTech / AIの活用事例についてのサミットが開かれた。そのレポートをまとめました。

1. **Jackson Hull (British financial services company GoCompare Group)**
DLを使った顧客体験（UX）の改善について話した。
    - 契約データを更に活用→顧客へより良い金融サービスを提供
    - 他のFinTech ventureと組み、MLとデータサイエンスのベストプラクティスを共有。AIを組み込んだAPIを実装中。
    - "Open Learning"（ML開発のオープンコラボ）が次のステップだという。→既にKaggleとかあり、さまざまなデータセットで競争されKernelもあるので、目新しくはない。

2. **Huma Lodhi (principal data scientist from Direct Line Group)**
「保険・リスク管理業界へのScene understanding(状況理解)のテクノロジーの重要性について」と「リスクモデリング（金融商品リスクで言えばVaRのようなものか？）や保険金支払いへのDL応用の成功例」を話した。
    - 統計的な手法：パラメトリック、事前知識必要→小さなデータセット・少ない変数にはうまくフィット。
    - ML手法：ノンパラメトリック、事前知識不必要→大きなデータセットにも対応。
    - MLの方が統計的より特に優れている点：新しいデータセットに一般化したとき、よりworkするらしい。→単に「汎化性能に優れている」のではなくて、「新しいタスクに転移学習などしてモデルを再利用可能」と言っているのか？

3. **Manuel Proissl (head of predictive analytics at UBS)**
「ドメイン特化したNNでの、Human-Augmented Training(人間によって増強されたトレーニング)」と「モデル透明性（Black boxだから）」
MLの応用が、どのように、データから**モデル化できる部分を抽出し**ているのか説明→NNはこの部分を数理モデル化し、予測する。

4. **Rich Radley (customer engineer from Google Cloud)**
Googleは、金融サービスの組織と組んで、いろいろやっている。
    - 大事なのは、model interpretability(**モデル解釈性**)→信用、バイアス緩和（？）、パフォーマンス向上に役立つ。
    - 新しい**BCM(Baysian Case Model)**を構築する重要性→評価時間（？）・解釈性を向上するキーとなるfeature(特徴)を同定できるから。

# 27th April 2019
## Andrej Karpathy blog "A Recipe for Training Neural Networks" 25th April 2019
http://karpathy.github.io/2019/04/25/recipe/

NNでの良くあるmistakeを予防するための方法論について。
実務的に非常に役立ちそうだったので、私自身100％理解してはいませんが、できるだけまとめます。

筆者はまず、NN実装関連で見受けられる、２つのObservationを列記。

1. **NNのTrainingは"Leaky Abstraction"である。**
    
    "Leaky Abstraction"とは、Joel Spolskyが言い始めた概念。
    高度に関数化されており、ユーザーは欲しいものを書くだけで、中身をどう計算するか知る必要がない。ただ、**正しくつかわないと、間違った（期待しない）結果や、意味のない結果を得ることがある。**そういう機能のこと。
    * Requestライブラリ: GET/POST, HTTP connection etc.のロジックを知らなくても、やりたいことを簡単に書ける。ロジックは難しいが、Leakはない。（Leaky abstractionではない）
    * NN: 残念ながら、上記のようになっておらず、特に、**逆伝搬法は、Leaky Abstraction**となっている。以下は例。
        * 勾配消失・勾配爆発
        * Dying ReLu: ReLuは負の領域では値が０（勾配が０）。重みの更新の結果、値が大きく負になった場合、重みが更新されなくなる現象。(https://qiita.com/t-tkd3a/items/243b523f962f26281037)
        * RNNでの、勾配消失・爆発問題。
        * DQNでのClipping(原文参照のことhttps://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b)

2. **NNは、何も言わず、失敗する。**
    NNのフレームワークは、どこでミスしたか、エラーメッセージからわからない。

筆者は"Fast and Furious Approach"でNNを訓練しても、うまく行かない、と結論付ける。そこで、注意深く、上記のようなエラーを予防するため、筆者が実践する"Recipe"を公開。

1. データと一体に

    訓練データを徹底的に調査する。
    * **サンプルデータのスキャン**: 破損した画像・ラベル、重複したデータはないか？
    * **分布の確認**：データの不均衡性（imbalance）やバイアスはないか？
    * **パターンの発見**：人間（自分自身）の目・脳で、どのように分類しているか？にも注意すべし→構築するNNのArchitectureのヒントになるぞ。
        * 局所的な特徴のみ？/大局的な特徴が必要か？
        * データにどれくらいの多様性(variation)があるか？
        * Spurious variation（偽の多様性。ラベルが正しくないということか？）はあるか？→どうやって、データのPreprocessで除去するか？
        * 空間的な位置は重要？/average pooling（見ている領域のどこかに、パターンがあれば発火）した方がよい？
        * 画像をダウンサンプルできるか？（タスクに詳細な情報が必要？）
        * ラベルがどれくらいnoisyか？ 
    * 簡単な自作NNモデルを走らせ、誤予測ケースを調査。もし、**予測とデータから見て取れるパターンが矛盾→何かが抜け落ちている・・・**
    * **最後にデータを再確認**：ラベル毎などで、分布を視覚化。**分布の各軸でoutlierを見てみる**。データの質の問題やpreprocessでのバグを発見することが多いらしい。

2. End-to-Endの訓練・検証環境を構築

    データは理解したので、End-to-Endの訓練・検証コードのスケルトンを作成。間違いのないスケルトンを作れば、あとはモデルを精緻化すればよい。
    * **Linear / ConvNetのような小さなモデル**で。
    * **Seedを固定**：結果の再現性のため
    * **シンプルに**：data augmentationなど不必要なRegularisationテクニックなどは使わない。
    * **テストセット全体で、精度を確認**：ミニバッチ上でだけの確認は、今の目的には不十分。
    * **訓練ロスの初期値**：想定される初期値通りか確認。softmaxなら`-log(1/n_class)`らしい。
    * **重み（バイアス）の初期値**：訓練ロスが、最初のミニバッチ数stepで"hockey stick"カーブにならず（最初の数stepでは、基本的にバイアスを学習するらしい）学習がスムーズに進むように、**出力層のバイアスを正しく設定**する。回帰で、訓練データ上で平均50なら、出力層のバイアスを50に設定。不均衡なデータセット（1：10でpos:neg）の場合、出力層のlogitsのバイアスを0.1に設定。
    * **人間のベースライン**：Accuracy（精度）など、人間がチェックできる測定基準をモニタリングするべし（訓練ロスは人間にはピンと来ない）。
    * **インプットと無関係なベースライン**：例えば、インプットを全て０にして、同じモデルを学習させる。元のデータセットに対して結果は悪くなるはず。そうなっているか（モデルは、訓練データセットの情報を反映しているか）？
    * **（２，３の例だけ含めた）1バッチにOverfit**：モデルの層やユニットを増やして、訓練ロスを０にできるか確認。そうならない場合、どこかにバグあり。
    * **訓練ロスは低下するか**：シンプルなトイモデルを使用しているので、underfitしているはず。少し、モデルの複雑性を増してみて、訓練ロスが低下するか確認。
    * **NNへ入力する値の確認**：TFなら`sess.run()`に渡すテンソル値が、正しいデータになっているか確認。筆者はこれを確認することで、何度もミスを見つけたとさ。
    * **予測のダイナミクス**：学習が進むにつれて、**固定した検証データセット上で、予測がどのように変わっていくか可視化**→どのようにモデルの学習が進んでいるか掴めるらしい。
    * など

3. Overfitting

    まず、十分大きな（パラメタ数が多く自由度のある）モデルを作り、訓練データにOverfitさせる。
    * **関連文献のコードをパクりなさい**
    * **Adamを使っておけば安心**
    * **ちょっとずつモデルを複雑にすること**：一気にいろいろやると、間違えるぞ。一つずつ導入し、期待通りの、改善がみられることを確認。
    * **デフォルトの学習率の減衰を信用するな**：筆者は、**LR decayをオフ（定数のLRを利用）にして、本当に最後に、decayを弄るらしい**。

4. Regularisation

    十分大きなモデルが見つかったら、正則化をして、いくらか訓練ロスを許容し検証ロスを改善する。
    以下、筆者のアドバイス。
    * まずは、**もっと多くのデータを探す**のが、王道。
    * **data augmentation**
    * **creative augmentation (fake dataの作成)**：domain randomisation, simulation, the hybrids, GANなどなど。
    * **Pretrain**
    * **教師あり学習に注力**：教師なし学習を使ったPretrainはあまり成功していない
    * S**purious signal(偽のシグナル)を生みそうな特徴を除く。**
        * spurisou signal: Cifar10での例
            * 女性→トラックのラベル
            * ねこのしっぽのみ→ねこのラベル
            * 飛行機と車→飛行機のみのラベル
    * **粒の細かい画像が必要ない→画像を小さくして入力**
    * **より小さなモデルを使用**
    * **バッチサイズを小さくする。**
    * などなど

    最後に、第1層の重みを出力し、特徴して意味のあるエッジ（画像分類では、第1層で、直線パターンをよく認識する）をとらえているか？を確認するといい。Activationにも問題があることがあるので、注意。

5. Tuning

    広いモデルArchitectureの中から検証ロスの小さなモデルを探すためのTips
    * **グリッドサーチよりランダムサーチ**がよい(http://jmlr.csail.mit.edu/papers/volume13/bergstra12a/bergstra12a.pdf)
    * **ハイパーパラメータの最適化**：Baysianハイパーパラメータ最適化で成功しているものもある。

6. 最高の結果を搾り取る

    いいモデルとハイパーパラメータを見つけたが、もう一工夫して、SOTA(State-Of-The-Art)を獲得できる！
    * **アンサンブル**：どんなケースでも、約2%の精度向上が見込めるらしい。（あるいはhttps://arxiv.org/abs/1503.02531）
    * **訓練しつづけること**：訓練ロスが小さくなっても、反直観的に、訓練は続いている。

# 15th April 2019
## AI運用は人知を超えるか　海外株投信で検証
https://style.nikkei.com/article/DGXMZO43391480V00C19A4000000/

AIを用いた運用についてではなく、AIを扱うテーマ型投信のパフォーマンスについての話。紛らわしいタイトル。

- 記事では海外株ファンドの年初来リターンをランキング。 
- 上位にAI関連投信が目立つ。
    - 例えば、一位は、三井住友DSの「グローバルAIファンド」。運用者がAI関連株を選び出すらしい。
    - AIだけでなく、FinTech、ロボット、バイオテクノロジーなどのテーマ型が上位に並ぶ。
- AI運用ファンドの例として、「GSグローバル・ビッグデータ投資戦略Bコース」
    - 海外先進国の株式市場並みの運用成績。→AI運用ファンドは海外株式に広く分散投資しており、株インデックスに近い構成銘柄になっているのかもしれない。
    - 上記の「グローバルAIファンド」の方がアウトパフォーム。→AI関連株に絞って運用していることが原因か？
- 「全く新しい観点から将来の有望銘柄を発掘するなど、過去・現在のデータを分析してもあまり役に立たないであろう分野でのAI活用は不向き。しいて言えば、超短期の株売買なら利用できる余地があるのではないか」と東大の和泉潔教授。
- テーマ型投信の人気は離散しがち。
    - 2017年以降に米国FinTech、ロボット、AIなど銘柄が有名に。
    - 2018年10月、米国発、世界的株安を受け、解約による資金流出が目立つように。現在持ち直しつつあるが、戻り待ちの売り解約が続いている。

# 12th April 2019
## "Lithium-Ion Batteries" - the first machine-generated research book -
https://link.springer.com/book/10.1007/978-3-030-16800-1
個人的には、Auto textsummarisorの技術を知りたい。

- ベーテ大学とSpringer Natureの共同研究で生まれた、初のMachine-Generatedな学術本。
- "Beta Writer"というプログラムに、Springer Natureのコンテンツプラットホームの情報を食わせて、Auto-Textsummarisorをし、先行研究のまとめ本を作成。
- 「学術本の出版」の新時代がスタートする！と本に書いてある。
  - 読者が特定分野の先行研究を理解するのをスピードアップ
- イントロには、技術的なうんぬんより、「誰が本の作者といえるか？」など、出版界・学術界で起こる問題を提起している。

# 11th April 2019
## Neuro-Symbolic Concept-Learner (NS-CL)
https://openreview.net/pdf?id=rJgMlhRctm
ICLR2019での、MITとDeep Mindの共同研究。人間的な「視覚情報を言語（概念）化する」ことは、いかにもAIってかんじ。ただ、先行研究をよく知らないので、個人的にはどこがすごいのかいまいちよくわかっていませんが。。。

動機：「人間はどうやって、視覚的概念(visual concept)を学ぶのか？」

- 「視覚（物体）情報」と「言葉」の組み合わせから学ぶ
    - →より複雑な「物体」と「言葉」についての質問に答えられるようになる。
- MLで実現しよう！→NS-CLの提案

訓練データ

- 画像とQ&Aのペア (画像には何のAnnotationも付与しない)
    
モデル：３つのmoduleからなる

- Neural-beased perception
    - 入力画像（複数の物体が無造作に配置されたもの）→物体認識→知覚的表現（どこに何があるという、「見たままを表現」）
    - viaully-based semantic parser （意味的構文解析）
    - Questionをexecutable programに変換
    - symbolic program executor
  
- NS-CLの何がすごいのか？
    - 「視覚的」にも「言語的」にも、もつれを解いた（disentangled）表現
        - 入力シーン（入力画像）と質問（→semantic program）に関して、一般化（複雑化）できる。
        - 例えば、物体の数が増えると、物体間のrelationを学習する必要があり、組み合わせ的に複雑化する。これをうまく学習できる。→先行研究（例えばAnderson et.al. 2018では難しいらしい）
    - 新しい色の物体や、さらに新しいタスクへ転移（transfer）できる。
    - state-of-the-artの精度を達成 (CLEVERデータセットを利用)
annotationが訓練データに不必要。

# 10th April 2019
## （株）バリューデザインが楽天ペイ（QRコード決済）に対応
- バリューデザインはハウス電子マネー管理システム「バリューカードASPサービス」を提供。
    - 加盟店ではposレジを使用（販売情報を管理するシステムを搭載したレジ→分析し売り上げ改善を図る）。
- この度、楽天ペイに対応。
    - posレジへの実装は低コスト。
    - 加盟店で商品購入されると、posレジから情報がバリューデザインに流れ、そこで電子マネー決済か、他のQRコード決済（楽天含む）か判断し、使用した決済サービス元へ、決済データを送信。
- キャッシュレス化は推進するか？

# 9th April 2019
## 時事通信がxenodata labと提携
- xenodata labはxenoBrainという企業業績予測サービスを提供。
 - 元々、大手金融機関で、上場企業の分析業務に利用されていた。
 - global企業の予測に強かった。
 - ニュース・決算情報→NLPで分析。経済ニュースから「企業に後どんな事象が発生するか」「企業の業績変化」を予想。
- 時事通信が保有するニュース（国内中心、過去10年で100万本）を利用し、国内企業の予測が配信可能に。