HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

【データ解析の基本中の基本】どういうデータを使うときにどういう解析をするのか

 

 

follow us in feedly

https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png

はじめに

最近は機械学習ブームのおかげで ・線形回帰 ・ロジスティック回帰 ・ニューラルネットワーク ・決定機 ・サポートベクターマシン などの技術を勉強する人が増えています。 ところで、技術を学んだとして、その取り回しについて理解している人は少ないのではないかと思います。 つまり技術を実用的に扱うための心得のようなものです。

今回は、あまり難しい技術を扱わず、「そもそもなぜにデータ解析を行おうとするのか」から始め、そして「どのようなデータに対してどのようなデータ解析を行うか」を完結に述べたいと思います。

データ解析を行う理由

データ解析を行う以前の目の前の課題

データ解析それ自体が目的になるということはありません。同じように機械学習をすることそれ自体が目的になるということもありません。 間違いなく何かしらの課題があり、それを解決する術としてデータ解析という手段を講じることになります。

例えばあなたが金属材料を扱う技術者であったとしましょう。金属の強度 $Y$ を限られたコストと材料を使って上手く保証したいわけですが、これらは今まで技術者のノウハウの勘によって達成されてきたとします。これではベテランの技術者がいなくなってから、この技術を扱っていくことができなくなります。そこでデータ解析を使おうということになります。

あるいはあなたが向上の品質管理者だとしましょう。工業製品には不良品というものがある程度つきものであり、不良率 $Y$ に大きく寄与しているものが一体何であるのかを、データに基づいて示したいという場合にもデータ解析が使われます。

あなたがアルコール飲料メーカであったとして、ビールのアルコール度数 $Y$ を決定づけているものが一体何であるかを知りたい場合にもデータ解析が使われます。

いずれの場合にも、自分が取り組むべき課題において重要になる数値 $Y$ について、データに基づいて調べ上げたいという場合にデータ解析が用いられます。これは強調してもしすぎることはありません。何が調べたいのかもわからない状態で、闇雲にデータ解析をしても意味がありません。もしかしたら、データ解析がしたいから、特に課題もない状態で適当な $Y$ を取り繕ってプロジェクトをスタートしたりしていませんか。

データ解析の末に達成したいこと

さて、着目したい数値的な $Y$ を見つけデータ解析を行おうと考えていますが、データ解析をした後に達成したいことというのは一体何でしょうか。私は「統計」と「機械学習」の姿勢の違いはこの段階で現れるように思っています。

統計の姿勢

統計というのは基本的に、$Y$ に纏わるデータをかなり大量に集められることは想定されていないように思います。もちろん大量に集められるのならば、そちらのほうが信頼のおける解析ができるでしょう。しかし統計が準備しているのは、全体に対してその一部しか手元にない場合に、その一部に対してデータ解析を行い、その結果を全体に当てはめなおしても良いか否かを判断するツール及び解析方法です。

そもそも興味あるものの全容をデータで網羅しきれないような状況を想定しているので、データ解析の姿勢は極めて慎重で、本当にそのデータ解析は正しいのか、その説明性や解釈性に主眼が置かれることもしばしばあります。そして解析結果を全体に当てはめなおす(構築したモデルを用いて予測を行う)というのは次の段階の話です。

機械学習の姿勢

機械学習では $Y$ に纏わるデータを相応にたくさん集められるような状況を想定しています。データは沢山集められても、その中から適切に解析を行い、$Y$ についての正しい知見を得ることは容易ではないでしょう。機械学習に取り組む際にも、通常は多種類のアルゴリズムを比較検討するものです。

ここで統計と異なるのは、データ処理とアルゴリズムの選定が主眼であり、これが上手く行われれば構築したモデルを使った予測は相応に上手くいくであろうと考えています。無論、そもそも集めたデータがゴミであるならば無意味な結果となりますが、まともにデータが集まってさえいれば、あとは直接的に予測結果が良いか悪いかを判断しようという姿勢が一般的です。

達成したいこと

統計でも機械学習でも最終的にはデータ解析した後に、限られたデータから得られた知見を元に(未観測である)全体に対して上手い予測を行いたいと考えています。統計の場合は説明性や解釈性を得られた後にそれで終わりということもあるかもしれませんが、もしもそこで得られた知見が本当に正しいのであれば、予測にも使えそうなことが想定できるので、精度の良し悪しはともかく、やはり予測に使いたいと考えるのが普通かと思います(多分)。

データ解析の姿勢

さて、機械学習と統計、どちらもオーバラップする部分はありますが生まれが違うため姿勢が異なっていることは間違いありません。 結局のところどちらの姿勢で臨むべきなのでしょうか。結論からいえば、それはケースバイケースです。

統計の姿勢で挑む場合

例えば、金属の強度 $Y$ について解析をしたいとしましょう。

これを決定しうる要素として、金属の焼きなまし時間 $X_1$、雰囲気中に含まれる窒素 $X_2$、用いる金属 $X_3$、待機中に含まれるホコリなどの濃度 $X_4$ というものがあるとしましょう。まあまず、鉄を用いるのかアルミを用いるのか、これで全く強度が違うことが伺えますが、ありとあらゆる実験結果をデータ解析に突っ込んだ挙句に、原価が馬鹿高い金属を使うと強度が高くなるということがわかったとして何の意味があるのでしょうか。あるいは待機中のホコリを取り払うには大金を払ってクリーンルームを設置する必要があるかもしれませんが、その予算はどこから取ってくるのでしょうか。

予測結果を用いて今度は金属材料を作るというフェイズに移行したいわけですが、数値的に正しい予測だとして、それは実行可能なのでしょうか。

データは多ければ良いかもしれませんが、そもそも問題の解決に寄与しないもの・あるいは制御不可能な要素を含んだところで無意味でしょう。

私達が知りたいのは、単に焼きなまし時間と雰囲気中の窒素が、どの程度金属の強度 $Y$ に影響を及ぼすかという話かもしれません。

興味があるのはコントロール可能な $X$ と $Y$ の関係なのです。

また、金属の強度を測るには実験が不可欠です。これは必ずしもビッグデータのような状態にはできないでしょう。自然と、少数のデータで説明性の高いモデルが作れることが要求されます。このとき、ある窒素雰囲気下で、ある時間だけ焼きなましを行った金属の強度をピタリと完全に予測できないと行けないわけではありません。私達が得たいのは、焼きなまし時間と窒素濃度がどの程度強度に影響を与えるのか(それが正なのか負なのか、大きめなのか小さめなのか)という粒度が大きくとも信頼のおける情報です。

このような場合は、いわゆる「統計の姿勢」で臨むことになるでしょう。

機械学習の姿勢で望む場合

あなたは工場での品質管理を行っており、この1ヶ月で出て来る不良品の量 $Y$ を予測し、予備的に生産しておかなければならない量を決めておきたいとします。設計の方は至って完璧で、組付けや生産技術との関連性に問題はありません。従って不良品は、工場の気温$X_1$、湿度$X_2$、ライン作業従事者の睡眠時間$X_3$によって構成されている(ライン作業者を取り巻く環境に左右される)ものとしましょう。

さあ、こうなったときに当然、これまでのデータを用いて不良品の量 $Y$ について解析を行うのですが、解析を行った結果、品質管理側として「正すことのできる要素=制御できる要素」は存在するでしょうか。気温も湿度も、超強力なエアコンを用いれば上手く調整できるかもしれませんし、作業者の睡眠時間も指導によって確保可能かもしれません。しかし、超強力なエアコンを準備する予算も、睡眠時間を確保するように指導する権限もなかったりするわけです。

それでも、予備的に生産すべき量を見積もるために、今月の不良品の量を予測しなければならないとしたら、重要なのは各要素 $X$ と $Y$ の関係性自体よりも、兎にも角にも正しい予測値であるはずです。するとこれまでのデータを出来るだけかき集めて、予測精度の高いモデルを意地でも作りたいとなるわけで、機械学習的な姿勢で挑むことになるでしょう(もちろん予算が十分に取れるようになれば、気温や湿度との関連を統計モデルで説明し、エアコンを導入するような試みも後々行うかもしれませんが)。

データ解析の基本中の基本

さて、機械学習的な姿勢というのは、課題設定がしっかり行われた後は、データ収集と前処理、アルゴリズムの選定に勤しむこととなり、ココらへんは結構トレーニングされてる方も多いかと思われます。今回は、逆に疎かになっていそうな非常に単純な統計解析の基本中の基本についてふわっとまとめておきたいと思います。

着目する $Y$ が連続的な数値で、要素 $X$ も連続的な数値

今回の話では焼きなまし時間が金属の強度にどれほどの影響を及ぼすかを知りたい場合などがこれに相当します。あるいは作業者の睡眠時間と製品の不良率でも良いでしょう。

この場合には「回帰」を用いることになります。

回帰にもいろいろ方法がありますが、まずは最小二乗法から試してみれば良いのではないでしょうか。

着目する $Y$ が連続的な数値で、要素 $X$ が離散的(あるいは単に男・女など数値を有さない)

身長 $Y$ に対して年齢 $X$ というのは確かに $X$ が離散的といえば離散的ですが、これは一層のこと連続的だと思ってしまっても良いでしょう。もしも小学生・中学生・高校生・大学生と $X$ を切り分けたならば離散的と扱うなどします。「男・女」のようにそもそも数値的な序列がないケースは完全に離散的です。

この場合には「分散分析」を用いることになります。

男の$Y$のデータと女の$Y$のデータを各々集計して、差異があると言えるのかを検定するという形式になります。 ただし、これは各々の性別における$Y$の分散を見ているので、$Y$が明らかに正規分布してない場合には信用ならんかもしれません。 そういった場合にはクラスカル・ウォリス検定などを検討します。

着目する $Y$ が離散的で、要素 $X$ が連続的な数値

マウスの生・死 $Y$ と薬の投与量 $X$ の関係を表したい場合などがこれに相当します。

これはよくご存知のロジスティック回帰が一般的に使えるでしょう。

みんな大好きクラス分類問題のようなものなので馴染みやすい存在ではあるかなと思います。

着目する $Y$ が離散的で、要素 $X$ も離散的

少し変則的ですが、例えば「WebサイトA」と「WebサイトB」にはそれぞれ広告が1つだけ貼られており、その広告が「クリックされた」か「クリックされなかったか」というケースを考えます。するとWebサイトが要素 $X$ でクリックされたかどうかが着目すべき $Y$ であります。

このような場合には、しばらく実験を行ってクロス集計表を作りカイ二乗検定するというのが基本スタンスでしょう。

今回は事例をわかりやすくするため $Y$ と $X$ を適当に選んでますが、もちろん本来は目的に応じて課題設定がされるべきなのはご承知しておいてください。

最後に

基本を抑えた上で、いろいろな手段を幅広く身につけておくと強いと思います。

www.hellocybernetics.tech

www.hellocybernetics.tech

www.hellocybernetics.tech

www.hellocybernetics.tech