kaggleのkernelを読んでみる その２（TalkingData AdTracking Fraud Detection Challenge）

# コンペ内容について
https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection

- オンライン広告のクリックの内90％以上は不正であり、その人たちがアプリをインストールすることはない
- 広告主にとっては無駄な浪費になっている
- ユーザーがアプリをダウンロードするかどうかの予測をして欲しい

# 本題
- [前回](https://qiita.com/masleisii/items/9bcf86a8fcc2cd321221)と同様、内容を理解したい。そして今後の分析の指針にしたい
- 今回の対象は https://www.kaggle.com/yuliagm/talkingdata-eda-plus-time-patterns
- （）内は私の意見です


## Explore ip counts. Check if multiple ips have any downloads.
同一ipがとても多く出現していたらそれはbot（つまりは不正）なのか？そうでないことがわかった

- 出現数が多いtop10のipを取り出し、そのipのis_attributed==1のデータを調べた   
　（→何のために調べたのか理解できず）
- is_attributed==1のデータすべてを調べた
 -  同一ipで最も出現が多い（=ダウンロードが多い）もので56個あった
 -  よって多くのdeviceを持つネットワークのipに違いない   
    （→ipがdevice単位だとすると同一ipで56個は多すぎるのでいくつかのdeviceに共通するipだと考えた、という認識で良いのか？）

## Conversion rates over Counts of 300 most popular IPs
ipごとの

- ダウンロード（is_attributed==1）率（prop_downloaded）
- 出現数（click_count）

を出現数が多い順に上位300を出力。   

- 出現数とダウンロード率に相関がないことがわかった。   
（出現数が多いipでもダウンロード率に無関係だからbotでない、と解釈したのかな？）

## Conversions by App
上記と同様にappごとのダウンロード率と出現数を調べている。今度は出現数上位100まで。

- appごとの出現数は1～13000万
- 出現数が減少するにつれてダウンロード率も下がっている
- 出現数が何千のアプリでは、比率は0.0001〜0.0015の境界内にとどまります
- それほど普及していないアプリだと変動が広くなる


## Conversions by OS
上記と同様にosごとのダウンロード率と出現数を調べている。今度は出現数上位100まで。

- appと同じ傾向。

## Conversions by Device

- デバイスは非常に不均衡に分散しており、ナンバーワンのデバイスがほぼ94％の時間使用されています。
- そのデバイスのダウンロード率は0.001326でした。 （0.13％）   
（→[前回のここ](https://qiita.com/masleisii/items/9bcf86a8fcc2cd321221#%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E6%95%B0%E5%88%A5device%E6%95%B0)で外れ値だから不正と言ってしまったが、ダウンロード率を見ると別におかしくはないっぽい）

## Conversions by Channel
妥当な出現数でチャネルのピークが数個あるように見えますが、パターン全体は上と同じです。

## Checking for time patterns
- 一時間単位で丸めてパターンを見る
- データが時間ごとに並んでるので、これまでみたいに上からn件取り出すやり方はしない
- 一般的な考察を得るためにランダムに10万件選んだデータ（train_sample.csv）を使う

### HOURLY CLICK FREQUENCY（4日間の時間毎のクリック数推移）
- 特定の時間帯だけクリック数が下がっている

### HOURLY CONVERSION RATIO（4日間の時間毎のダウンロード率推移　）
（ダウンロード率は時間毎でばらつきがあるがクリック数と多少相関しているように見える）

- 比率には時間的なパターンが明確ではありませんが、時刻に基づいてクリックの頻度が確定しています。
- 毎日の時間帯を抽出し、組み合わせた傾向を見る（4日間を1時間ごとにマージします）。

### HOURLY CLICK FREQUENCY、HOURLY CONVERSION RATIOのbarplot、lineplot（時間毎のクリック数・ダウンロード率）
- データが完全であると見積もられた場合、比率はより信頼性が高くなります。 無作為のサンプルでは、変動性が高すぎるため、特にクリック数の少ない時間には、あまりにも難しいと言えます。 すなわち、クリック数/コンバージョン数が少ないほど、推定コンバージョン率のマージンが広くなります。 

### HOURLY CONVERSION RATIO（時間毎のダウンロード率のbarplot）
（縦の黒棒の中に95％のデータが入ってる（信頼区間）そうで、前述した通り確かにクリック数が少ないと変動が大きい）

## Look into attributed_time
広告をクリックしてからダウンロードするまでにどれくらいの時間が経過したかを見てみましょう。

- （中央値が5分なのに対して平均値が1時間10分ということは、時間が長い人はかなり長いということだろう）
- クリックしてからダウンロードするまで4秒～20時間かかっている
- 4秒で判断が下がるようです。 この人物は前に広告を見たことがあるか、または既に他の方法で製品を認識していたでしょう。
- それは広告が複数回クリックされたことを意味しますが、1回のクリックがコンバージョンとしてカウントされましたか？ または、ダウンロードの意思を持って広告をクリックした人ですか？ （例えば、チャンネルがGoogle検索のようなものであれば、検索結果表示中にクリックしてすぐにダウンロードすることができます。）   
（ここらへんの解釈の意味が分かっていない。4秒でダウンロードしたから複数回クリックされたと推測しているのはどういう根拠だろう？）
- 疑問
 - コンバージョントラッキングはどれぐらい正確ですか？   
（正確でないとかあったりするのか。。。）
 - クリックとダウンロードはどのようにリンクされていますか？ 
 - 複数回クリックした後にダウンロードするとどうなりますか？ 
 - 同じユーザー（同じIP、デバイスなど）を識別する方法はありますか？   
（同一ipで数百とか数万とかあるからipだけだとユーザーが判別出来なそう。というか前述してたネットワークごとのipなのだろう）

# 感想
- 不正かどうかのひとつの目安として、それぞれの値ごとのダウンロード率が参考になるのかなと思った。
- 前回は出現数で不正なのか見ようとしていたが早計だった。
- ソースを見ることでpythonの勉強になった
 - データの丸め方
 - pandasでそのままプロットできるのを知らなかった！
- 今後どう進めていけばよいのだろう。
 - 時間ごとのグラフを見る限り20時前後だけ不自然に低下してたから何かあるのかも。国がまんべんなく網羅されていると仮定するとグラフがもっと平らになるはずだから。特定の国の就寝時間だったりとか。そのへん調べたい。
 - ダウンロード率みたいな指針がほかにないだろうか