(脱線)Analytics+の裏側〜どういう経緯で作ったのか?

By | 2015年10月29日

今週はAnalytics+一色になっています。

今はまさに明日(10月30日)開催のeラーニングアワードフォーラムの私の発表セッションの資料をせっせと書いているところです。Analytics+のちょっと突っ込んだ話をするので、ご興味がある方はぜひ事前申し込みの上ご参加ください。

 

昨日のAnalytics+の発表を受け、早速いくつかの反応がありました。

ITproさんには写真入りで詳しく紹介いただきましたし、同じ記事が日経電子版にもなっています。

ICT教育ニュースさんにもご紹介いただきました。

今日になってReseMomさんの記事でも取り上げていただいております。

記者会見のあとで、このように記事にしていただけるのはありがたいものです。

 

それ以上に驚いたのがブログの反応でして、昨日リリース直後にAnalytics+を紹介するブログ記事をアップしたのですが、そのページの「いいね」の数やアクセス数がとても多くて反響の多さを実感しました。そしてさらにFB上でも結構な反応をいただきました。

昨日、私のFBにデジタル・ナレッジのフォーマルな見解ではなく、一個人としての感想をアップしておきました。

このブロブでも、そのFBにアップした記事を一部加筆修正を加え掲載しておきます。

公式ではなく私人として・・・ デジタル・ナレッジとしてではなく、私個人の感慨のようなものです。
ある駆け出しデータ・サイエンティストが、どういう風にデータ分析に取り組んだか?ということでもあります。

そういう趣旨でご覧ください。


 

シルバーウィーク直前から始まった私のRの日々も、ここで小休止。ふぅ。

退学予兆検出で共同研究をしている早稲田大学の松居先生からは「あれはバカじゃないとできなかった」と評価(?)される(笑)

要は、すべてを投げ打ってでも、結果を出すまでがむしゃらにやる姿勢、そういうのをバカとおっしゃってるのでしょう。
そういう意味では私は、とんでもないバカでした。

Rをインストールして2〜3か月くらい。真剣に向き合って1か月ちょっと。

 

ことのきっかけは・・・

シルバーウィーク前に、うちの代表とラーニングアナリティクスの話をしていた時のこと。

世の中の動きはLAに向きつつあるから、うちもLAと向き合わないといけないねぇとか話していた時に、じゃあ実際どうする? どの事業部の誰にやってもらう? どのように進める? と相談してた時になかなかいいアイディアがなく、

「じゃあ僕やりますよ」
と言っちゃったことから始まりました。

 

作るもののイメージや方法についてはよくわからなかったものの、シルバーウィーク期間である程度方向性が出せそうな気がしていたのです。

「やるんだったらマシンパワーが必要なので、とにかくお高いのを調達しますよ。そして一ヶ月ぐらいは殆どコレにつきっきりになりますから、他のことはよろしくお願いしまーす」

そう宣言してスタートしました。

 

シルバーウィーク前に、とりあえず試験用のデータ一式をLMSから出してもらって、それを携えてシルバーウィークに突入しました。

シルバーウィーク初日に有楽町のビックカメラに行って「一番高いMacBookProくださーい」と言ってマシンを調達してきました。一番高いMacBookProはビックカメラ有楽町店では月に2、3台ぐらいしか売れないらしく、店員さんに職業を訊かれました。「ええ、ちょっと、解析を・・・」と濁しておきました。

それからシルバーウィーク期間中、昼も夜も家の中でも外でも、延々とRと向き合いました。

 

データマイニングとかデータサイエンティストとか、そういうのが何やってるのか全然わからない中から、まあ私はバカですから、無鉄砲に漕ぎ出したわけです。

しのごの言わない。やると言ったらやる。出来ない言い訳はしない。
それだけのことです。

 

実際にはこのプロジェクトが始まる前に、Rってどんな感じだろう? とインストールして幾つかいじってはいました。

モンテカルロ法で円周率Piを求めてみたり、弊社の社員情報を読み込んで色々な尺度から分析してみて、それを社内で発表してみたり、2か月ほど前に軽量なお試しをしていたのでなんとなくRがどういう感じなのかはわかってはいました。

ベクトルやデータ・フレームをはじめとした分析に適した変数、行列ごと一気に処理できちゃう便利さ、CRANという強力なライブラリ群・・・ なるほど、確かにRはデータ分析に適しているなという感じはしていました。

とは言っても実際のデータマイニングやラーニングアナリティクスで試したことはないので、ちんぷんかんぷんだったわけです。

バカじゃなくて賢い人だと「まず基礎調査をして、工数出します」とか言いますよね。でも私はバカなので「はいはい、やりまーす」と言っちゃうわけです。

それがそもそものきっかけです。

 

とはいえ、そもそも、ラーニングアナリティクスってなんだ??
というのがずーっとわからないでいました。

実際にLMSのデータと向き合って、文字通り四六時中格闘していると、なんとなく「ああ、こういうのがラーニングアナリティクスなんじゃないか?」という自分なりの解釈が生じてきました。

 

僕の整理は3レイヤー。

一番下のレイヤーは可視化。
教育ビッグデータを様々な角度から整理して可視化してあげること。
GoogleがGoogle Analyticsでやっていることに近いです。

その上のレイヤーが学習傾向分析。
可視化をもう少し高度にしたもの。学習上の問題や傾向や因果関係を指し示すもの。データマイニングの世界でいう「オムツとビールの関係」に近いです。
(あるイギリスのスーパーで売り上げをマイニングすると、オムツとビールを同時購入する人が多いことが分かった。これはかさばるオムツを買うのを奥さんがご主人に頼むからで、ご主人はスーパーでオムツを買うついでに自分の欲しいビールを買う傾向にあるらしい。ビール売り場のそばにオムツを置くと売り上げが伸びた)

そして最上部が、分析そのものではなく分析結果を利用したアクション。
アダプティブやリコメンドなどが代表ですが、分析で得られたアルゴリズムをもとに自動的に機能し、学習者の学習を促進したりより勉強しやすい環境を提供するようなもの。

人々の口からLearning Analyticsが語られるとき、この3つの要素があるように思いました。

 

東京駅の喫茶店で、このアイディアを松居さんに話すと、ご理解いただき、さらに具体的な進め方や世の中の先行事例について教えていただきました。ここでようやく、なるほど! と腑に落ちました。そうやって進めればいいんだ、とはじめて繋がったのです。

 

私はまず、下の2つのレイヤーを進めることにしました。

LMSのデータを読み込み、これを使い勝手のいいように加工し、そのデータから得られそうな可視化を考え、それを一つ一つ実装していきました。

約一ヶ月に渡り、文字通り昼も夜も、朝から晩までRと向き合い、かたっぱしから処理を進めていきました。

この一ヶ月で私が書いたRのスクリプトは2万行を超えました。

その一ヶ月前まで、Rなんて一言も知らない中で、タコな処理が多いとはいえ、まあよくもまあこんなに書いたものだと、振り返ってみると我ながら呆れてしまいます。

 

私のバックグラウンドをお話ししておきますと、私はもともとプログラミングは苦手ではありません。そもそも小学生の頃からずーっとプログラミングをやっていますし、大学が情報学科というところなのでプログラミングはもともと専門領域です。そもそも会社設立当時は私も(うちの代表も)プログラマでして、当時はMacromedia DirectorというオーサリングソフトでLINGOという言語を延々と書いてました。

数学や数値解析もそんなに苦手な方ではなく、大学ではMathematicaという技術計算システムが大好きでいじり倒してましたし、一夏エレベーター取り付け工事で稼いだ10万円をExcelの購入に充てたほどです。(当時Excelは高かった・・・)

そういうわけなので、Rという結構独特な環境にも、案外すっと入れたのかもしれません。

 

ちなみに、設計図などはゼロ。企画書もない。ひらめいたらその場で実装するというスタイルで進めました。お風呂に入っていてもご飯を食べていても、パッと閃くとそのまますぐにMacBookProを開き実装する、そんな感じでした。

 

そうやって作り進めていくと、ある程度パッケージを意識するようになりました。そのためには根本を作り変えなきゃいけない部分があり、「あー、最初っからそうしておけばよかった!」と思いながらも1日半を犠牲にして作り変えました。

プログラミングにはよくある話ですが、とりあえず作るのと、今後の拡張性を考えて作るのとでは、ちょっと気の使い方が違うんですよね。まあここはしょうがなかったと今でも思います。
(とはいえ、今見直すと、まだまだ、「うわー 作り直したい!」という処理もあります)

 

もう一つテクニック的な話をすると、Rはfor文でぐるぐる回して処理するのは原則ご法度なのです。行列のままうまいこと処理しなさいというのが原則です。しかし他の言語に慣れている者としては、for文を回してしまいがちですし、そうすると処理時間がものすごくかかります。

試すとわかりますが、for文でビッグデータに当たると大変なことになります。ものすごく時間がかかります。例えばあるfor文で作った処理をかけると1時間ぐらいかかってましたが、うまいこと処理してあげると10秒以内に収まりました。

そしてメモリや処理速度を稼ぐだけでなく、より「エレガント」に「わかりやすく」、「後々数学的な意味を加えやすく」するにはそうするべきだとも思います。Rはうまいこと書くと数式そのもののコンテクストに近づけて書くことができるような感じがします。

Rにはapply系関数というのがあり、これらをうまいこと使うと処理できることが多いですし、data.tableという拡張の型を使うと結構いろんなことができます。

これに慣れるまでが結構大変でした。実は今なおこの辺は苦手で、やはりfor文に頼ってしまうこともあります。

 

そうしてある程度目鼻立ちが立ったところで、弊社のデザイナーにデザインをつけてもらいました。どうせなら今風にということでtwitterのBootStrapを使ってデザインを組みました。おかげさまでそれっぽい感じになってきました。この辺りはデザイナーのスキルの賜物です。

 

さて、これはこれで見えてきたぞ、というときに、もう一つの別動プロジェクト、この春から別件で動いていた早稲田大学との共同プロジェクトも山場を迎えようとしてました。

退学予兆検出プロジェクト。

八洲学園大学さんをはじめとする大学さんのeラーニングシステムの学習履歴・行動履歴から、退学者の予兆を検出できないか。そういうことを探るプロジェクトです。

私はこのプロジェクトの発起人ではありましたが、この時点ではデータの中身をまじまじと見たことはなかったのです。

ところが結果がどうも思わしくないぞということで、当初の進め方を一旦おいといて改めて進め方を検討して進め方を再定義しました。「姿勢」という点に着目して行動分析をしたらどうか? というアイディアをもとに、もう一度データに向き合ってみようということになりました。

時間がない中この観点でデータを整理して処理が行えるのは、えーと、多分、僕しかいないなと思い、ここでも「はーい、僕やりまーす」と手を上げてしまったわけです。

一応私もCOOという役職なので、決してそうする必要があるわけではないのですが・・・

「代打、オレ」

状態です。

バカですねぇ。相変わらず。

 

それから、再びデータとの向き合いが始まりました。
全データをかき集めて(これも結構大変でした。新人のディレクタに頑張ってもらいました)、それをRに取り込んで、バラバラのデータをきっちり整理し、綺麗に構造化しました。

これ、言うのは簡単ですけど、やると結構大変でして、私は「自分で自分を褒めてやりたい」というぐらいの常人ではやらないようなトリッキーなテクニックを使って、無理やり力技と経験則でまとめました。

例えて言うなら「愛と勇気」

データアナリティクスの世界では「労力の90%以上はデータ整理(データこねくり回し)に費やされる」とか言われているようで、当初「うっそだー」と思っていましたが、やってみると実にその通りでした(苦笑) というか、90%じゃないですね。もっとデータこねくり回しの比率は高いです。

データこねくり回し、これが実に大変かつ重要だということを身にしみて感じた次第です。

この「データこねくり回し」をやるのに、昼も夜も、平日も休日もなかったことは、まあ言うまでもありません。

 

そうしてまとめたデータに対して私なりの評価関数を10パターン作って、全23種類の元データに対してかけて230通りの組み合わせパターンを作りました。そしてそこから相関を探ったり有効性を検討する評価のフェーズに入りました。

この評価には、冒頭にご紹介した早稲田大学の松居先生に多大なるご協力をいただきました。さすが長年この分野で研究されているだけのことはあり、とてもエレガントにうまいこと結果を導き出してもらいました。

なんでしょう、プリミティブに物を出すまでが「データこねくり回し」であって、その先の「加工」や「評価」はまたずいぶん違うスキルや能力が問われる気がします。

後者は絵の鑑賞にも似ているように思いました。作品を集めて綺麗に並べるまでは「データこねくり回し」で、それら作品をどう評価し陳列の位置や順番を並び替えたり鑑賞の文章を書いたりするのは「キュレーション」というのでしょうか。そういう関係に似ているように思いました。

私が「こねくり回し」で松居さんが「キュレータ」、そういう役割分担だったように思います。

 

松居さんは僕の大学の研究室、早稲田大学理工学部の寺田文行研究室の先輩で、卒論を指導いただいた間柄で、奥様も私の先輩で共同研究者という、まあ昔からの浅からぬ縁の方です。

あれから20年以上経ちますが、再びこういう形で教えを請うようになるとは思ってもいませんでした。

まだまだ教わること、学ぶことが多いなぁとしみじみ思っております。寺田研の最後の卒業生であり、最もデキの悪い学生の一人(やれやれ)ですが、デキの悪い後輩ほど手間がかかるというわけで、どうぞ引き続き宜しくお願いします(笑)

 

以上のような顛末で、今回ようやくLearning Analyticsの新サービス”Analytics+”をリリースする運びとなりました。

私のFBをご覧の方は、私のRの日々を垣間見ていたと思いますが、実際にはこういうことを日夜延々やっていたのです。
この一ヶ月、平均睡眠時間は大体3〜4時間ぐらい。すべてをRに打ち込んできたと言っても決して言い過ぎではありません。
振り返るとこの一ヶ月、全くテレビを見ていません。

日常生活の多くを犠牲にしてきましたし、家族の理解はともかく、協力なしにはできなかったでしょう。

深夜、家に帰ってきてもMacBookPro開いて遅く(早く?)までRに取り組んでおりました。

休日たとえ外出しても、私はMacBookPro開いて、ずーっとパカパカやったり一点を睨んだりしていました。

妻や子供達には呆れられたりしながらも、文句は言われず、ただただ好きなようにやらせてもらいました。

Analytics+の裏にはそういう家族の協力もありました。感謝。

 

とりあえずのローンチはしましたが、ここからどう育て上げていくかが次の大きな課題です。

より有意なデータが出せたり、利用者のニーズにあったサービスに育て上げるにはまだまだ改良していかねばなりません。

社内外への啓蒙活動も必要でしょう。

その次のステップについても、いろいろアイディアがあるのでそれを進めていきます。

どうぞ引き続き宜しくお願いします。

 

最後に、今回のプロジェクトをやっていて、ずっと頭にあった言葉があります。

アラン・ケイのあまりにも有名な言葉:
“The best way to predict the future is to invent it.”
「未来を予測する最善の方法は、それを発明することだ」

そう、未来は誰かが何かやってくれるのを待つのではなく、自ら手を動かして作り上げるものなんだ。

そういう信念みたいなものがありました。

 

以上のような経緯で、Learning Analyticsというまだ先行事例の少ない領域のサービスを、極めて短期間のうちに、周りの協力をもらいながらも、ほぼ1人で作り上げてスタートした次第です。

 

これからこのLearning Analyticsの領域が広まり、より利便性の高い効果的な教育が進化することを心より願っております。

“The best way to predict the future is to invent it.”