Andrew ng先生の論文の読み方でkdd論文を読んでみた話

# Andrew ng先生の論文の読み方でkdd論文を読んでみた話
## 背景
- 昨年の８月ごろAndrew ng先生の論文の読み方という動画が各所で流行っていて、その動画をみた学習記録と備忘録になります。
- またこの手の方法論は、実際に使わないと身につかないものであるので、実際に論文を読んでみてその上でどのように論文を読むべきなのかを自分の言葉でまとめたものです

[Andrew Ng先生の論文の読み方動画](https://www.youtube.com/watch?v=733m6qBH-jI&t=905s)

## Andrew ng先生の論文の読み方について概略
動画の感想については様々な方がもう少し詳しく書かれているブログが沢山あるのでそちらのほうがいいかもです。また一度動画を見てみることをおすすめします！！
https://qiita.com/chobaken/items/027e942b08b0d11129d2

また動画の後半ではMLエンジニアについてのキャリア論（研究者よりだが）についても言及しているのでそちらも興味があればぜひ。

## 動画で紹介されている論文を読み解くステップ
1. タイトル、アブストラクト、図について
2. イントロダクション、コンクルージョン
3. 論文全体を数式なども読み飛ばしながら読む。ただし意味がわからないところは飛ばしつつ読む
4. 論文全体を数式を読みながら読む、ただしここでも本当に意味がわからないところはskipするで構わない。

## 読後の論文への理解度へのセルフチェックとしてまとめるべき項目
1. 著者は何を達成しようとしたのか
2. 重要な要素は何だったのか
3. 何を自分で使うことができるのか。論文の手法はどのように応用可能か。
4. 他に参照したいものがあるか

# 実践
言葉として上記のことは理解できるが、実践しないとポエムなのでkddの論文でandrew先生の論文の読み方を実践した。論文の感想なども最後にまとめるがあくまでも論文紹介を目的とした記事ではないので少々まとめるに留める。

## 対象論文と概略
Anomaly Detection for an E-commerce Pricing System
https://www.kdd.org/kdd2019/accepted-papers/view/anomaly-detection-for-an-e-commerce-pricing-system
kddで発表されたウォルマートでの価格の異常検知を達成するための手法とそのシステム構成についての論文。ウォルマートecサイトでは商品の価格最適化を自動で行っている。しかし主に自社が管理しない外部のデータも推論に使用しているため外部でエラーが発生すると価格最適化に失敗してしまい、水準より高い金額または安い金額で販売してしまうということが発生する。
異常検知によりこのリスクを減らしたいというお話。

## andrew先生の論文の読み方実践編
### 1st STEP : タイトル、アブストラクト、図について
タイトル、アブストラクトはあまり時間がかからなかった。ただ図を確認するのに時間がかかった。
figureまで確認するのでいままでの論文の読み方に比べて論文の方向性が定まってくるのを感じる。
図の一部と判断し表も眺めていたが、わけのわからなさが半端じゃなく誤解も多くなるだけなので次からは表はここでは読まないようにする。

### 2nd STEP : イントロダクション、コンクルージョン
1stepで図の意味がよくわからなかった部分や、abstractでの意味の誤解を解いていく作業をしていた。
またよくわからない部分を飛ばして読むという技術は割と難しい。

### 3rd STEP : 論文全体を数式なども読み飛ばしながら読む。ただし意味がわからないところは飛ばしつつ読む(所要時間６時間ほど
2nd stepまででなんとなくこういう内容なのかなと思っていたところが結構間違っていた理解だったのに気づく。
また数式を理解しないと読み進められないようなところはざっくり理解で読んでいった。

### 4th STEP : 数式込で論文全体を読む
正直３rd stepに時間をかけすぎてしまった。意味のわからないところは他のページを読んでいる際に理解が進むことが結構あるのでわりと飛ばし飛ばしで問題ないと思った。
実際4thステップではあと理解できていないのが数式の一部くらいになってしまっていた。
またすぐに分かるような数式についてはstep 3で理解してしまっても問題ないと感じた。

## 内容のまとめ
使うことのできるシステムを設計するということに重きをおいていて、ナイーブベイズとrandom forestの組み合わせで「うまく」システムを回すということが書かれていて素晴らしいと思う。
また本システムが有用であることを社内の人に示すためのtips（最初はrecallを重視せず、precisionに重きをおくなど）も示されていて興味深かった。
一日一回の全商品への価格異常検知は実行に時間がかかってもパフォーマンス重視でrandam forestを使用し、商品の価格アップデートが走るたびに実行される異常検知は速度重視でGaussian NBを使用する。

### 著者は何を達成しようとしたのか
ウォルマートでの価格最適化アルゴリズムが推測する価格の異常検知システム

### 重要な要素は何だったのか
ウォルマートという膨大なデータを扱うecでのパフォーマンスが高い手法と、速度が早い手法を重ね合わせて、システムとして役に立つものを作るということ。

### 何を自分で使うことができるのか。論文の手法はどのように応用可能か。
昨今dynamic priceを適用しているサービスは増えて来ていると感じるが、その際の安全マージンを取るというところで本論文の手法は応用可能であると考える。商品カテゴリが膨大なシステムの価格予測は難しいと思っていたが、この異常検知の仕組みでdynamic priceの導入を進めることが可能なのかもしれない。
ただ、カテゴリの区分が正確でないと precisionが 0.8から 0.5程度まで下がってしまうらしい。

### 他に参照したいものがあるか
異常検知の手法について、random forest, gaussian NB, isolated forest, auto-encoderなどの手法を試していたが、いくつかの手法についてあまり知らないので勉強してみたいと思う。

## 思ったこととか、今後の改善点とか
論文を読む作業をステップごとに分けると下記ツイートの数学書の読み方に近しくなると感じた。
![](https://i.imgur.com/WwuZR4p.jpg)
引用元
https://twitter.com/percentage011/status/1169220223003574276

この図のようにstep を重ねるごとに分かる範囲を増やしながら、行間を小さくしていく事ができれば、論文を読んでいる際にわかることが増えていくので、読みやすくなると感じた。
頭から最後まで読んでいくスタイルだと、何もわからない状態が長く続くことになるので読み進めるのが辛い。
私の学生時代の論文の読み方はまさに、頭から読んでいくようなことしてしまいがちでした。

また自分のケースではstep 3の一通り論文を読む作業を目次だけを読む作業、内容をざっくり掴む作業というように分割することで、論文理解が捗りそうだと感じた。