Azure Machine Learning を使って2015年度の千代田区の犯罪発生件数を未来予測する【回帰分析】

Azure Machine Learningを使って2015年度の千代田区の犯罪発生件数を予測してみます。
オープンデータが叫ばれる昨今、**血税を無駄遣いする政府**は一行にまともなデータを提供しない・・と思っていましたが意外と23区のホームページにはデータがいろいろ公開されていたのでそれを使います。


# 予測元データ収集

千代田区のホームページから犯罪発生件数と人口推移データを取得します

http://www.city.chiyoda.lg.jp/koho/kuse/toke/kisotoke/h27-shiryo.html

![スクリーンショット 2015-09-22 16.15.13.png](https://qiita-image-store.s3.amazonaws.com/0/36931/60d8d002-1700-bd2c-8eba-18ff54c0e11e.png)


![スクリーンショット 2015-09-22 16.19.56.png](https://qiita-image-store.s3.amazonaws.com/0/36931/171a81ad-5396-1985-4d68-491d59e9d76b.png)

![スクリーンショット 2015-09-22 16.20.09.png](https://qiita-image-store.s3.amazonaws.com/0/36931/8eeaa958-9429-a293-45e8-dd50c22bdc15.png)


犯罪発生件数はなぜか千代田区のHPには1年前が最新になっているので
最新の平成26年のデータは警視庁からとってきます
http://www.keishicho.metro.tokyo.jp/toukei/keiho/pdf/keiho2.pdf


行政のデータはExcelやPDFなのでCSV形式に落とし込みます


![スクリーンショット 2015-09-22 16.23.56.png](https://qiita-image-store.s3.amazonaws.com/0/36931/47c95a39-4aa6-0fd7-fd8c-539b36e03091.png)

平成17年から平成26年までの千代田区の犯罪発生件数と人口推移から平成27年(2015年度)の犯罪発生件数を予測します。


# 使用する過去データの相関性を想定する

今回は最初から犯罪発生件数と人口推移の関連性に当たりをつけましたが、犯罪発生件数にはもっと別の数値推移も関係するかもしれませんが今回は人口推移に絞りました。
それでも犯罪発生件数と人口増加推移に関係性がなかったら意味のない分析となるので、グラフ化して関連性がそれなりにあるかを確認しておきます。



## 犯罪発生件数と人口推移


![スクリーンショット 2015-09-22 16.30.10.png](https://qiita-image-store.s3.amazonaws.com/0/36931/bd70f079-d37e-3d5f-5f6d-28264151c12c.png)


青軸が犯罪発生件数
緑軸が人口推移数

これだけだとピーンとこないので、人口推移を人口増加推移に変更します


## 犯罪発生件数と人口増加推移
![スクリーンショット 2015-09-22 16.30.16.png](https://qiita-image-store.s3.amazonaws.com/0/36931/6788ca5b-2699-bc03-f9e7-1bb9c5816a4d.png)

青軸が犯罪発生件数
緑軸が人口増加推移数

ここから読み取れるのは

- 犯罪発生件数は人口の数とは関係なく年々下がっている
- 犯罪発生件数は年々さがっているものの、その数は人口増加推移に左右されている
- 人口増加が多い年は犯罪発生件数は下がり幅が弱くなり、むしろ去年より大きくなったりしている


千代田区の人口増加推移と犯罪発生件数に関連性があるとわかったところでAzureMLの回帰分析で未来予測をしてみます

# AzureMLで未来予測を実践する

AzureMachineStudioでの操作は動画をとっていますのでそちらも参考にしてください
https://www.youtube.com/watch?v=-7YTTOlbS8I

ここからAzureML Studioにログイン
https://studio.azureml.net/

## モデルを作成

過去データから分析モデルを作成します
Datasetsに予め過去データCSVをアップロードしておきます

![image](https://qiita-image-store.s3.amazonaws.com/0/36931/37dc20ec-4a06-6718-e4a6-f2780c86eefc.png)

```犯罪率千代田区.csv
平成,年度,犯罪発生件数,総人口,人口増加数
17,2005,5442,42968,1292
18,2006,5246,43933,965
19,2007,5068,44954,1021
20,2008,4475,45461,507
21,2009,4277,46060,599
22,2010,4156,47138,1078
23,2011,3813,47887,749
24,2012,3612,48538,651
25,2013,3735,52284,3746
26,2014,3593,54160,1876
```

[Saved Datasets]->[My Datasets]->犯罪率千代田区をキャンバスに配置

[Data Transformation]->[Manipulation]->[Project Column]を配置

![スクリーンショット 2015-09-22 16.41.35.png](https://qiita-image-store.s3.amazonaws.com/0/36931/03fb12ff-5ef2-26b5-0d1d-f12486d2948e.png)


### (わりと重要)解析対象のカラムを選択

![スクリーンショット 2015-09-22 16.43.23.png](https://qiita-image-store.s3.amazonaws.com/0/36931/e8348e34-6775-3944-71d5-a5432887c40d.png)

[Project Column]のLaunch column selectorを押して解析対象のカラムを選択します。
今回は西暦よりは年度のほうが精度は高かったです。
この形式だとAzureがDate型と認識しないので、ただの数値扱いになります。
精度をさらに高めるならDate型(2015-01-01など）にして実践しましょう。
解析結果が芳しくなかった場合はここのカラムを減らしたり増やしたりします。


### トレーニングモデルを配置

[Machine Learning]->[Train]->[Train Model]を選択しキャンバスに配置します

![スクリーンショット 2015-09-22 16.48.33.png](https://qiita-image-store.s3.amazonaws.com/0/36931/1e213432-4265-fc64-0f8c-e93a1d0402d4.png)



### 解析アルゴリズム（線形回帰）を選択

[Machine Learning] -> [Initialize Model]->[Linear Regression]を選択
![スクリーンショット 2015-09-22 16.50.52.png](https://qiita-image-store.s3.amazonaws.com/0/36931/9904a4cf-9e10-3744-9af9-6b5bf1dbee7f.png)

### Train Model の対象カラム（未来予測をしたいカラム）を選択

![スクリーンショット 2015-09-22 16.51.52.png](https://qiita-image-store.s3.amazonaws.com/0/36931/f2a16276-5be0-63f3-f0c0-7ab45efe68ce.png)

Train Model の Launch column selectorを押下して「犯罪発生件数」を入力します。
この画面は入力補完が効くのでなんかのキーを押せば候補がでてきます。


### RUNを押下し一度モデルを作成する
![スクリーンショット 2015-09-22 16.54.00.png](https://qiita-image-store.s3.amazonaws.com/0/36931/0f8e6f9d-581e-6950-0e96-e810f589269e.png)


RUNを押してモデルを作成します。
緑のチェックが出れば完了。

## 作成したモデルを使って過去データとの比較をしてみる

予測が正しくできるモデルが作成できたか確認するために、過去データ(平成17年〜25年のデータを使って犯罪発生件数予測をしてみます。（過去に作成したモデルをもっていたとして未来予測できたかを検証）


[Machine Learning]->[Score]->[Score Model]を選択し
Train Modelと犯罪発率千代田区.csvに連結し再びRUNします
数秒で処理は完了するはずです。


![スクリーンショット 2015-09-22 16.59.10.png](https://qiita-image-store.s3.amazonaws.com/0/36931/8c97d60b-a82b-45d1-9548-da547f365256.png)


緑のチェックがついたらScore Model を右クリックし
[Scored Dataset]->[Visialize]を選択


![スクリーンショット 2015-09-22 17.00.47.png](https://qiita-image-store.s3.amazonaws.com/0/36931/f655e4bf-5372-7c75-6364-42575ed67605.png)


結果から**かなり精度の高いモデル**が作成できたのがわかります。
実際の過去データと100人もほとんどズレていません。


compare to で 「予測データと犯罪発生件数」を比較してもデータが少ないにもかかわらずほぼ斜めに垂直になっています

![スクリーンショット 2015-09-22 17.07.45.png](https://qiita-image-store.s3.amazonaws.com/0/36931/2953e6fd-220b-083e-a3b5-462e4ee23c4b.png)



## 実際に未来予測を行う

実際に未来予測として２０１５年度の犯罪発生件数を予測したいと思います。
千代田区のHPには平成２７年-2015年の人口増加データはすでにあるため犯罪発生件数は予測可能になります。


### 予測対象のCSVを作成

平成27年の犯罪発生件数を０にしたデータを作成します。


![image](https://qiita-image-store.s3.amazonaws.com/0/36931/06c9e6b5-6e52-2f2b-371a-ddcbc1d76a8b.png)

```chiyodaku_furure_crime_rate.csv
平成,年度,犯罪発生件数,総人口,人口増加数
27,2015,0,56873,2713
```

### Train Model と chiyodaku_furure_crime_rate.csvをくっつける



![スクリーンショット 2015-09-22 17.10.03.png](https://qiita-image-store.s3.amazonaws.com/0/36931/bbe9b6ac-3ff0-c68e-3c49-dbc38b453799.png)


Project Columnsはすでにあるものをコピーして貼り付けます。

RUNを実行

### 結果を確認

緑のチェックがついたらScore Model を右クリックし
[Scored Dataset]->[Visialize]を選択

![スクリーンショット 2015-09-22 17.12.13.png](https://qiita-image-store.s3.amazonaws.com/0/36931/24480d95-0c6d-27ad-7bb9-303c480eb114.png)

**2015年度の千代田区の犯罪発生件数は3672人**と予測されました。
実際にあってるかは2015年度が終わるまでわからないですがあってるか楽しみ？です。

### 最後に予測したデータをグラフにくっつけて推移を確認する.


![image](https://qiita-image-store.s3.amazonaws.com/0/36931/a10cf3f9-5173-8f65-6923-437d91556edf.png)


![スクリーンショット 2015-09-22 17.14.50.png](https://qiita-image-store.s3.amazonaws.com/0/36931/cfbaa708-9253-155b-9d85-1375fdecf7df.png)


今年度は人口増加が去年より多いので犯罪発生件数も少し多そうです。
納得の結果が解析できました。


## まとめ

政府が数は限られてはいるもののオープンデータや一見役にたたなそうなデータを公開してるのでそれを利用して機械学習プラットフォームの学習に使ってみるのがお薦めです。
特にAzureMLはRやPython、Sparkなどのプラットフォームも用意する必要もなく、データだけあればブラウザですぐにアイディアを試せるので是非挑戦してみてください。