QCon2014:異常検知　機械学習

[QCon Tokyo 2014](http://www.qcontokyo.com/program.html)
[QCon2014 My Report Top](http://qiita.com/kozayupapa/items/97012d2d6f663712249e)

Detail Report#3/8 

# 異常検知　機械学習の有望なアプリケーション
寺田英雄:オープンストリーム
 
## 講師 BackGround
* 機械学習（独学）
* 動画エンコーダー、同期再生エンジン
* 画像処理、パターン認識
* オブジェクト指向（driver FW）
* 言語は assembra, c, c++, python, R,,

## Anomaly Detection ?
### 異常検知の目的
正常とされるパターンに一致しないパターンを見つけること
（なんかあるぞと警報を出す）

### 技術的に
* あらゆるアルゴリズムを動員（定番がない）
* 活発な研究
* 機械学習の書学者に生きた教材
* 結果がシンプル=>正常 or 異常

### 社会的に
* あちこちにニーズ
* 異常の意味の広がり（通常とそうでないと意味で使うと応用例が増える）

### 異常検知は現場導入しやすい
* 結果がシンプル（なんかビッグデータがあるけどというときに）
* 学習データを用意しやすい
* 評価しやすい
* デバッグしやすい　

## 機械学習とは？
### 普通のプログラム
入力 Xi -> アルゴリズムYi = f(Xi)　-> 出力データ Yi

### 普通に作れない場合
入力データ（不定形）　-> ???? -> 出力データ
（この???の部分を半自動でコンピュータにやらせる）

### モデルベース学習（オフライン学習）
学習と実行が分かれている
#### 学習
生データ -> 学習アルゴリズム -> モデルデータ
#### 実行
生データ　-> モデル実行エンジン(モデルデータ) -> 出力

### モデルベース（オンライン学習）
#### 学習と実行

生データ -> 学習アルゴリズム -> モデルデータ 
　　　　　->(モデルデータ:上記の計算結果で常時上書きながら) -> 出力


# 学習アルゴリズム検討事項
* 入力データの性質
* 異常のタイプ
* データらベル（教師）の有無
* 検知結果の出力
* 特徴


## 入力データの性質
* インスタンスは属性値の集合
* 単変量型と多変量型

![DSC_9706.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/7249026a-8273-f1be-99b8-246e5ccd7ae3.jpeg)


### 属性値の型と手法
* ２値 binary
* カテゴリ categorical
* 連続値　numerical

統計的手法 -> 連続値、カテゴリ
最近傍型手法-> 距離定義が必要

### インスタンス間の関係性
* シーケンスデータ(順序に意味がある)
* 空間データ(位置により意味合いが変わる　近傍インスタンスと関係)
* グラフデータ (graphdata) (facebook, 友人関係など)　エッジで結合されたデータノード

##  異常のタイプ
### 点異常
![DSC_9709.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/e897bde7-483f-b93a-25b8-c2ce44312ce0.jpeg)

### 文脈依存型異常
晴れ続きでは雨が、雨続きでは晴れが異常になる

![DSC_9707.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/27791967-4330-afa3-b6d6-830543e6475d.jpeg)

* 集団型異常

いつもとちがう動きをしているところ
![DSC_9708.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/f0a61dbe-5586-43f9-7e0d-68825db072d1.jpeg)


##  データラベル（教師）の有無
### 教師あり異常検知
* 正常なパターンも異常のパターンもある
* 異常検知というよりも、ただの区別


### 教師無し異常検知
(仮定を用いて判定)
* 正常なデータは異常なデータよりも頻繁に発生する
![DSC_9711.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/56a5e3bf-ea46-9ebf-0ec0-2e2e70183083.jpeg)

### 半教師有異常検知
* 正常データだけにラベル有
* 正常でないものを異常とする

##  検知結果の出力
Score で表示するか、2値で表示するか。

* Score
異常度合を出す

* ラベル
正常、異常

##  よい特徴量とは？
* 一言では答えられない
* 生データVS アルゴリズム
* アルゴリズムに引っかかりやすい形式
* ノイズに負けにくい形式
* 経験則、ノウハウ-> 批判 -> [Deep Learning by Google](https://sites.google.com/site/deeplearning2013/)

## 異常検知のアルゴリズム
* 分類による異常検知
### 分類モデル
* ニューラルネットワーク
* ベイジアンネットワーク
* サポートベクターマシン
* ルールベース

分類器を見つけさせる

### 最近傍
[LOF](http://en.wikipedia.org/wiki/Local_Outlier_Factor)(Local outlier factor)の概念図

## 事例 
### SQL インジェクション攻撃の検知
* 正常時SQLパターンの多重統計モデルを学習
![DSC_9712.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/fe244316-6c69-d4b2-1ceb-d92a05c42586.jpeg)

* システム構成
![DSC_9713.jpg](https://qiita-image-store.s3.amazonaws.com/0/41631/af9c7d45-e108-72b4-be55-49b6781b5c37.jpeg)

#### Provider
SQLを取り出す

#### Parser
* SQLを解析、Token列を抽出
* Skelton Queryを作成

#### Feature Selector
* Feature vector 作成
* Profileを選択

## 自動車用歩行者検知
* 教師有学習
* 車両前方カメラ
* ランダム背景
* 学習データ
* 何千人分

### スキャン
各点の郊外の向きと強さで人とグラム
Histogram of oriented Gradient
Histogram binを特徴ベクトルに変換する

## その他事例
* ネットワーク侵入
* クレジットカード不正利用
* 携帯電話不正利用
* 保険請求
* インサイダー取引
* 画像診断：病巣検知

## まとめ
* 実用性が高い
* 機械学習の勉強に最適
* みんなでやってみよう