地図データを使って、自分の移動を隠れマルコフモデルでモデリングしてみた話
地図データと隠れマルコフ
去年ぐらい?にNHKでデータサイエンス特集みたいなものをやってたときに、紹介してたのをやってみた。
やったこと
google Location Historyから自分の移動履歴を取得して、 AからB、BからCというような移動データを抽出。 その移動データをHMMの状態遷移モデルでモデリング。 どの地点からどの地点への移動の確率が高いのかを検討した。
google Location Historyとは
参考(Googleのロケーション履歴ブラウザーは、あなたの人生を分刻みでプレイバックする)
- googleが提供している位置情報の履歴サービス
- Androidとかで位置情報サービスをONにすれば、一定間隔で位置情報を送信してくれる
- Webからも確認ができる
- 履歴はKML形式のエクスポートが可能
- 1日単位でエクスポートできる
- 過去の日付もOK
KML
- 緯度経度とか様々の情報を含んだXMLっぽいデータ形式
- こんな感じ(youtube参照)でgoogle earthでも再生できる
- 時間とともに動くように再生できるので、これだけで楽しい
処理の流れ
まぁ、今回もRで書いちゃいました。コードは下で、おおまかな処理の流れを書きます。
KMLから緯度・経度を抽出する
逆ジオコーディング
- 後ろに0埋めをする
- 書式設定の数値から、有効桁数の変更して変更した
- KMLでエクスポートした緯度経度をそのまま逆ジオコーディングかけたらエラーになってしまった
- どうやら、
23.6233601
でなく、23.623360100
としないといけないみたい- 地理データの形式わからない・・・
- 書式設定の数値から、有効桁数の変更して変更した
- 逆ジオコーディング
- ここのサイトを利用させていただきました
- [緯度,経度]の形式で貼付ければ、変換してくれる
- googleの逆ジオコーディングAPIはAPIの使用回数制限に引っかかってしまったので・・・
- 出力された住所一覧をエクセルに張りつけ
- 区切り位置とかでがんばって、必要な部分を抽出して、テキストに張りつけ
HMM
- 住所一覧をベクトルで読み込み
- HMMにかける
- 結果をみる
HMMについては他のページをみてください。 この辺が参考になります。
- http://www.mathworks.co.jp/jp/help/stats/hidden-markov-models-hmm.html
- http://d.hatena.ne.jp/a_bicky/20100621/1277076531
- フリーソフトでつくる音声認識システム - パターン認識・機械学習の初歩から対話システムまで
結果と考察
結果はこんな感じになった。
- TOとFROMの地名はダミーにしてます(生活範囲がモロバレなので)
見方
- 今上野にいるときに次に恵比寿にいく確率が
0.409
となる - 横の確率を足すと1になってます
- 今上野にいるときに次に恵比寿にいく確率が
- 思うところ
- {RHmm}の使い方があっているのか分からない自信がないけど、なんとなく、それっぽいデータになった
苦労したこととか
- google Location Historyの緯度・経度が飛ぶときがある
- 滞在をどう扱うか
- 長い滞在を入れてしまうと、自分自身への遷移が非常に多くなって、他の遷移の重みが限りなく0になってしまう
- 今回は2回以上は削除した
- 長い滞在を入れてしまうと、自分自身への遷移が非常に多くなって、他の遷移の重みが限りなく0になってしまう
- 細かい移動をどう扱うか
- 今回はかなりデータを削って14地点の遷移のモデルにしたけど、ローデータは50以上の地点のデータがあった
- 50地点の遷移データになると、本当に見たい遷移が隠れちゃう
- データ量がおおくなれば解消されるのか?
- google 逆ジオAPIが使えなくなって、前処理をExcelとメモ帳の置換でがんばった
- 再利用性も糞もないので、あまりやりたくないが、しかたがない・・・
- ビッグデータを扱うときって、全部プログラムでやるしかないのだろうか・・・
- 前処理はエクセルでやると、すごい簡単だったりするんだよね
- プログラムで前処理をきちんとやる癖つけないとな