Python
メモ
Kaggle

kaggleのkernelを読んでみる(TalkingData AdTracking Fraud Detection Challenge)

コンペ内容について

https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection

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

本題

冒頭部分

  • データが2億4000万行と今までで一番多い
  • 評価方法はROC-AUCである
  • この問題はbinary分類問題である。正しい or 不正
    (→提出するのは0 or 1でなくて確率と書いてあるんだけども)

AUCスコアは2つのクラスをどれだけうまく分離できるかによって異なります。実際には、これは予測の順序だけが重要であることを意味し、
この結果、モデルの出力確率に対して行われた再スケーリングはスコアに影響しません。他の競技では、ディメンションに定数や乗数を加えてディストリビューションにリサイズすることができますが、ここでは該当しません。

(→よくわからん。。。)

Data overview

  • 2億4000万行のうち100万行だけ取り出してる
  • それぞれの特徴ごとのユニーク数をカウント
    (→ipのユニーク数が多いのはわかるが、deviceやosもこんなに種類あるんですね)

Encoded variables statistics

ip別クリック数

  • x軸はクリック数の少ない順にipにindexを振ってる
  • 多いのだとひとつのipで6000くらいクリックしてる

クリック数別ip数

1クリックが最も多く、10000種類を超える。(逆に同一ipで数千クリックとかは明らかに不正なのだろう)

app id別クリック数

(このアプリは不正されやすいみたいなのがあるのだろうか?)

クリック数別app id数

(140000クリックされてるapp idもあるが、広告をたくさん出してれば不自然ではないのかな?
いやでも14%がそのapp idになってしまうわけだからそれはないか)

device別クリック数

最も多いdeviceで100万クリックある

クリック数別device数

クリック数100万の次が数万だがそれでも一種類のdeviceだけ。(よってこの100万と数万クリックある二種類のdeviceは外れ値っぽいので不正?)

os別クリック数

(同じく指数関数的な推移だが、ip、app id、deviceに比べると緩やか)

クリック数別os数

(二種類のosが飛び抜けているが主流のosならば別に不自然ではないのだろうか?一般的なOSの分布がどんなもんなのかわからないので考察しようがない。また、osの値もただの数値なので、実際のos名やversionがどれくらいの細かさで振られているのかわからないと参考にならない気がする。)

channel別クリック数

(publisherによって不正が多いというのはありそう。)

クリック数別channel数

(今までと比べるとまんべんなく分布している気がする。publisherによって不正が多いというのはないのかも?)

What we're trying to predict

  • 不正とそうでないデータの割合を表示している
  • 不正が99.83%とかなり不均衡なデータであので、モデルが堅牢であるかもしくはデータの再サンプリングが必要になります

感想

  • データ量が多い
    • 全データ(train.csv.zip)は1.21Gあるので、10万件データ(train_sample.csv.zip)を使ってある程度モデルを作って、精度を上げる時に全データ使えば良いのかな?
  • 不正とそうでないデータが不均衡
    • こういう場合どうすればいんだろう?それぞれが同じデータ量でモデル作らないと偏る?
  • マスクされたデータ
    • click_id ip app device os channelが数値に置き換えられてるので扱いづらい(ipの範囲で弾くとかできない)
    • click_timeを使えということなのだろうか。
  • 分布の意味
    • それぞれのパラメータの分布を見たが、結局グラフが不自然なのか自然なのかわからないのであんま意味なかった。。。
    • それぞれのパラメータの一般的な分布を知っておいたほうが良さそう

この記事の続き