名古屋で数学するプログラマ(仮)

@antimon2 が趣味兼一部本職の数学で何かするときのブログ。

センサーデータ解析(『CodeIQの問題・パズルを考えよう!』提案その3)

CodeIQの問題・パズルを考えよう!(by CodeIQ×はてな)』にまたまた応募してみます。

前 2 回は「ほぼ完全な問題」(そのまま出題できそうな問題)の投稿でしたが、今回は(お題本来の意図に沿った?)「問題のアイデア」応募。

モーションセンサー

iPhoneAndroid 搭載スマホには各種センサーが搭載されていますよね。
傾きを検知するジャイロセンサージャイロスコープ)、移動・落下・重力を検知する加速度センサー、近接センサーなんてのもありますね。
特に「加速度センサー」や「ジャイロスコープ」は、動きを検知する所謂「モーションセンサー」の部類に入り、スマホアプリでよく利用されると思います。
「モーションセンサーを利用して、スマホの画面上で傾きに応じてボールが転がるアプリを作りましょう」
とかってのはアプリ開発ネタとして Web マガジンの記事とかセミナーとか勉強会とかでよく出るお題だと思います。
それを CodeIQ で出題するのも、それはそれでアリとして。

提案する問題アイデア

以下の 2 つのアイデアを提出します。

アイデア (1)
  • まず、スマホで取得したモーションセンサーのデータを用意する。
    • 例えば、加速度センサーのデータを 20ms ごとに取得して数分間、合計数千〜数万行のデータ。
    • データ形式は、CSV とか TDV とか一般的なもの。どの列がどのデータかの説明はもちろん必要。
      例えば加速度センサーなら、「タイムスタンプ(ms), x方向(G または m/s^2), y方向(G または m/s^2), z方向(G または m/s^2)」
  • 問題は以下のような感じ:

このセンサーデータを解析して、この人がどういう行動をしていたのかを推測してください!

  • 実際に何らかの、できる限り単純な行動(歩く、走る、階段の上り下り、等)をしたときのデータを用意すること。
  • ヒントは最小限に(車や電車などの移動物には乗っていません、とか)。
  • データを後出しで追加するのもありかも(最初は加速度センサーだけ、そこに後でジャイロスコープのデータや、GPS データを追加するとか)。
アイデア (2)
  • まず、スマホで取得したモーションセンサーのデータを数種類用意する。
    • データの形式等は「アイデア (1)」と同様。
    • 違いは、数種類用意して「このデータは普通に歩いたときのデータ、これは走ったときのデータ、これはエレベータに乗ったときのデータ…」等の説明を付ける
  • それを受けて、もう 1 種類別のセンサーデータ(形式は同じ)を出して以下のような出題:

ではこのデータは、この人がどういう行動をしたときのデータでしょう?推測してください!

狙いとか意図とか

「アイデア (1)」は、単純なデータ解析。
ざっくりとした時系列データが与えられて、それをいかに適切に料理するか。
例えば、解析手法で言えば、フーリエ解析とかウェーブレット解析とか、ハイパス/ハイカットとか。
他にはもっと低レベルの数学的な話をすれば、離散積分(和分)とか逆に微分(差分)とか。
それらを利用して「明確に答えの分かっているサンプル無しに、いかに特徴を抽出して、どこまで真実に近づけるか」。
なんかワクワクしません?

「アイデア (2)」も、一見「アイデア (1)」と同じデータ解析。
違いは、答えの分かっているサンプルが与えられていること。
まずは答えの分かっているサンプルを解析し、どういう行動の時はどう言う特徴がある、というのを抽出する。
それと問題データを同じ手法で解析して、このデータと同じ特徴があるからこういう行動をしている可能性がある。とか。
あるいは↑こういったことを直接抽出せずに、扱いやすい数値データに変換した上で「機械学習」にかける(クラスター分析とか)ことで答えを導き出すとか。
用意するデータの種類や量によって出題側の「こう解いて欲しい」という意図も(直接表に出さなくても)変化させることが出来ると思います。

問題点、要考察点

一番の問題は、「データをどうやって用意するか」ですね(^-^;
あと「正解となる行動を何にするのか、それがうまく抽出できるデータが用意できるか」。
適当なそれっぽいデータを作るのも難しいでしょうから、スマホアプリを組んで実際にデータ取得して、それが妥当なデータになっているか自分で確認してみる、のが結局やっぱり手っ取り早いでしょうかね(^-^;

そうそう、加速度センサーは常に重力加速度も検知するので、データ取得中に端末の姿勢が変わるとデータの重力成分が変わって解析しづらくなりますよね。
分かってて敢えてそのままにしても良い(重力成分をそれなりに排除する方法はある)でしょうし、例えば端末を胸ポケットに同じ向きに入れたままデータを取得してその旨を(ヒントとして)注記してもよいかも。