nend・nex8のエンジニア・技術ブログ2018-09-28文系学生がデータサイエンティストを体験した結果はじめまして。9月3日から9月7日まで5日間のインターンをしていたはなわです。大学では経済学を学んでおり、プログラミング、統計、機械学習については基本的に独学です。この度は株式会社ファンコミュニケーションズでデータサイエンティストを体験するというインターンに参加したので、それについて振り返ろうと思います。今回のテーマは広告をクリックしてくれる割合を予測するというものでした。ここでいう広告とは、スマホアプリとかで遊んでいると下であったり、上であったり、時間制限つきで全画面に表示されるようなアレです。ところで、スマホアプリの広告をミスクリック以外でクリックする人なんているんですかね?という問題提起をしようと思いましたが、私自身、3日程前に気になった広告をクリックしてました。長い時間スマホを使い、その中で広告をクリックしたことが何回あったでしょうか。私の場合は1年で10回クリックするかどうか程度ではないかと思います。このようにごく稀にクリックする広告であるからこそ、今回のデータ分析は非常に大変なものでした。この分野だからこそなのですが、データの分布に偏りがあるとそのデータの分布自体を修正しなければならないとは思ってもいませんでした。今までに触ったことのない膨大なデータを分析するため、データを読み込むだけでとても長い時間を費やしました。私が触ったデータはビッグデータではないのかもしれませんが、これ以上のデータを扱うとは社員さんたちおそるべしです。5日間で実施したことそれでは、実際にどのようなことをやっていたかということを書いていこうと思います。データ加工5日間のインターンということですが、インターンの課題説明やあいにくの台風の影響などで実作業としては4日程度になります。データサイエンティストは「業務の80%をデータクレンジングに費やす」という言葉がある通り、実作業の4日間のうち、ほとんどの時間がデータを加工する時間でした。そもそものデータ加工のプログラムを書く段階でエラーが幾度となく発生したりで、本当にインターン期間の80%をデータ加工に使用していたのではないかと思います。これほどまでにデータ加工に真剣に立ち向かったのは、初めてでした。それでは、今回学んだデータ加工の手法を具体的に挙げていきます。1.そのままデータを持ってくる。簡単なデータ加工です。(これはデータの加工といっていいのでしょうか?)しかし、これでもそのデータが使えれば問題なしです。2.データを数字で分類。月曜日を0、火曜日を1、......、土曜日を5、日曜日を6とするようにデータではなく数字で分類する手法です。Encodingと言うようです。この状態だと数字の大きさに意味のないデータの場合、不都合が生じてしまいます。3.ダミー変数への加工による分類。これも同様に曜日を例にあげると月曜だけ1を他の曜日は0とするように、1つの項目だけ1とし他は全て0と分類する手法です。Encodingと言うようです。この手法にも問題があり、種類が1万あった場合、1個の1と9999個の0を入れるなどと、ただでも大きなデータがさらに大きくなってしまいます。Encordingによる特徴量の変換。これも比較的シンプルな手法で、データに含まれるカテゴリ変数の出現回数を数える手法です。この手法を使用したのが初めてだったため、どう利用していいかわかりませんでしたが、メンターさんのサポートによりちゃんと理解することができました。手法によって、どのときに使うのがベストなのかも今回学べたのではないかと思います。今回学んだのは、この4つの手法ですが、もちろんこれ以上に様々な手法がありますので、今後も学習を続けたいと思います。(余談ですが、今まで一番英文を読んでいたのは大学受験期に英語を集中的に学習していたときだと思うのですが、その時と等しいかそれ以上の英文を読んだような気がします。英語を読む力、体力も必要だと思いました。)プログラミング8割をデータ加工に費やし、残りの2割は機械学習を利用したモデル作成及び、精度検証のためのプログラミングをしました。過去に学んだ際には、書かれているコードを写経しただけで、実際にどのような処理が行われているのかについては一切考えていませんでした。(正確には、考えた瞬間に頭がショートして何も考えられなくなりました。)今回は、統計について学習を行なっていたこと、予めデータ分析入門のテキストが渡されていたこと、そして都度メンターさんが教えてくれたこともあり、以前よりは理解できるようになり、手法という観点からも考えられるようになったと思います。0か1かを判別するということが基本であったため、期間中はロジスティック回帰を用いた分析をしていましたが、この記事を書きながら、最後に一つ、別の手法を使って機械学習の処理しています。entropyを用いた検証を行いました。計算する関数のプログラミングを行ったのですが、意味を理解していないとコードを書くこともできないと実感しました。今回のデータには0と1で偏りが存在したので、バランスを修正したデータを検証に使いました。これを書いているまさに今、先ほどの機械学習の処理が出たわけですが、期間中ずっと使っていたモデルよりもはるかにいい精度が出ました。色々な機械学習の手法を学ぶことでより精度が出せる訳ですね。社内の様子インターンの内容はもちろん大切ですが、インターンの目的のもう一つには社内の様子を見るということもあります。そこで私なりの社内の様子についての感想を一つ。すごく作業がしやすいこのように思う理由としては四つ。1.社内の雰囲気がいい。静かすぎないという点とかは個人的によかったですね。怒号が飛んでいるとか、社員さんたちが私語をしているというわけではなく、互いに相談しながら、笑いながら作業をしていたというのは外からきた私にとってはかなり居心地がよかったです。』2.質問を気軽にできる。私のデスクの隣が今回指導をしてくれたメンターさんのデスクだったので、すぐに質問をすることができました。必要そうな資料を教えてくださったり、こちらから質問しなくても定期的に確認をしてくれたのはすごくありがたかったです。そのメンターさんがデスクにいない場合であっても、Slackで質問をすると他の社員さんが答えてくれたりと私たちをサポートするという点では完璧であったとさえ思います。』3.デスクの高さが変えられる。私はこのタイプのデスクを初めて使いましたがすごいですね。高さが変えられるということは姿勢を調整できるということでもあり、このようなずっとパソコンに向かって作業をしていると同じ姿勢で疲れてしまうということがあります。家でも使いたいと思うほどに素晴らしかったですね。私は可動範囲の最低まで下げて作業をしていました。この方が背筋が伸びて肘もつけられ、姿勢という観点からの疲れはなかったように思います。』4.ノートPCの他にディスプレイが一枚使える。パソコンを使うときにモニターが一つの人には想像できないことかもしれませんが、マルチモニターの人には理解していただけると思います。モニターが二つあるということは非常に作業しやすいです。作業はメインモニターに、資料などすぐには使わないものをサブモニターに映すことで作業に集中できます。全て一つのモニターで行おうとすると画面が散らかって、気が散ってしまう私にはとてもよかったです。ちなみに、私のサブモニターは常に六つ以上のウィンドウが開かれていました。』しつこいですか?すみませんでした。初日は説明していることの半分程度の意味がわからず、このまま一週間大丈夫か?と胃が痛くなりかけましたが、わからないことにぶつかった際には詳しく説明をしてくださったため、徐々に意味もわかり、最終的には大方理解できたのではないかと思います。