2015年9月8日火曜日

とある休日に居酒屋でビールとExcelと重回帰分析と

データアナリティクスグループの左近です。

先日、大学生の頃アルバイトで一緒だったメンバー3人(僕・先輩・後輩)で飲みに行ったときの話。



居酒屋に入って1時間ぐらいしたところで、後輩の1人がいそいそと帰り支度を始めた。


「え、何もう帰っちゃうの?」
「帰って課題やんなきゃいけないんですよ。明日中にレポート提出しなきゃいけなくて・・・。」
「明日って日曜日じゃん。」
「そうなんですけど・・・。」


労働法的にどうなのかはさておき、さすが大手企業。
休みの日でもしっかり勉強する(させられている?)姿勢は素晴らしいこと。
それに比べて、何とまぁ自堕落な休日の使い方をしていることか。反省しろ、俺。


「レポートの課題って?」
「統計分析です。」
「ほう。」


たまたま同じアルバイト先で、大学の学年も専攻も全く異なる3人だったが、
何故か全員、IT屋(システム屋)になったという偶然。(会社は全員別)
そんなギョーカイで「統計の課題」なんてキーワードが出てくるものなら、
当然食いついてしまう。


「課題の中身は?」
「APとDBのデータ使って、統計学的に何か分析しろ、みたいな・・・。」
「すごいざっくりしてるな。」
「統計だったら何でもいいらしいです。」
「APとDBのデータって・・・アプリケーションサーバのログとDBサーバのログとか?」
「あ、そうです。ログです。」


「で、そのデータ使ってどんな分析しようとしてんの?」


重回帰分析です。」




じゅーかいきぶんせき。


違う。
僕が聞きたかったことはそういうことではない。




「重回帰で何を分析するの?」
「え? だから、APとDBのデータを分析します。」



違う!



「・・・重回帰分析とか詳しい?」
「正直、全然良くわかんないです。」



これはひょっとしてブログのネタになるんじゃないか?
そう思った瞬間、100dBぐらいの声で叫んだ。



「すいません、生ビール3つ!!!!」


「いや、だから帰って課題やんなきゃダメなんですってば!」
「まぁ待て、座れ。そしてPCを開け。」
「え」
「3人がかりで今からその課題やるぞ!」
「よし来た。」
「えー・・・?」



「ちなみに左近は統計詳しいの?」
「ぜんぜん。完全に勢い任せ。」


こうして3人寄らば文殊の知恵ということで、課題への挑戦が始まった。



「そもそも、APログとDBログって何のアプリケーションの話?」
「うちの会社のツール・・・簡単に言っちゃえば情報検索ツールみたいな感じなんですけど、
 条件決めて検索ボタンを押すと、その結果が返ってくるってやつです。」
「うん。」


「もう一つ別の会社のツールがあって、これがさっきのうちの会社のツールと
 同じようなやつなんです。
 で、どっちも20~30ユーザの同時接続に対応ってなってるんですけど、
 別会社のツールだと60ユーザで突いてもちゃんと結果が帰ってくるのに対して、
 うちのツールは20人で突くと、"ダメ"なんです。」
「"ダメ"って何?」
「処理落ち?」
「んー・・・フリーズ? いや、ずーっと待つと結果は出るんですけど・・・。」
「処理が遅いってこと?」
「あ、そうです。で、『うちのツールの何が悪いんだ?』ってことに対して統計分析をしてこい、
 っていうのが課題なんですけど・・・。」


「それでログ使って何しようとしたの?」
「え・・・重回帰分析。」
「おい、どんだけ重回帰好きなんだよ。」


「うん、重回帰はいったん忘れよう。
 何て言うか・・・、その分析でどんな結果を得たいの?」
「『何が原因でダメになるか』とかですかね。」
「え、それって【ユーザ数】が原因じゃないの?」
「【ユーザ数】もそうだと思うんですけど、【CPU】とか、【メモリ】とか【ネットワーク】とかも
 影響してると思うんですよね。」
「それ、あんまりログ関係ないじゃん。」
「確かに。」
「逆にログって何書いてあんの?」
「これなんですけど・・・」


画面に映ったログデータを覗き込む3人。


「何つーか・・・まぁログだわな。」
「検索を投げた時間と結果が出た時間が分かるね。差引すれば【処理時間】か。」
「あとは、【検索件数】ぐらいですかね・・・。」
「ちょっと待て、それ結構使える数値なんじゃないか?」

「だんだん見えてきたね。」

「うん。」

「最初に出た"ダメ"ってのは、"処理が遅い"ってことなんだよね?
 言い換えれば、処理時間が長い、ということ。」
「そうです。」
「で、その原因、というか何が影響しているのかが知りたい。」
「そうです。」

「これ、重回帰分析でイケるんじゃないか?」

重回帰分析!」


なぜ、この後輩は重回帰分析という言葉が出るたびに目を輝かせるのか。


「まず、単回帰分析は分かる?」

「なんとなく。」
「まぁ、『身長(cm)-110=理想体重(kg)』みたいな例のアレよ。
 身長172cmだったら、理想体重62kg、みたいな。」
「最近、110引かれると厳しくなってきたな。」
「そうだな。」
「で、それは置いといて、単回帰分析ってのはこんな形の式になる。」













「さっきのやつだと、Xが身長、Yが体重で、a=1、b=-110だね。」
「このときのXが説明変数、Yが目的変数なんて言い方をする。」
「予想したい対象が【目的変数】で、その目的変数を変動させる要素が【説明変数】な。
 さっきの例だと身長を元に体重を予測する、的なことをする式になる。」










「目的変数と説明変数は何となく聞いたことがあります。」


「重回帰分析っつーと、この目的変数が2個以上あるものになる。

 もう一回振り返るけど、今課題になってるシステムの分析は何を知りたいんだっけ?」
「何が原因で処理が遅くなるか。」
「そう。で、関係ありそうな要素は?」
「ユーザ数、検索件数、CPU、メモリ、ネットワークあたり。」

「重回帰分析の形に落とし込むと、【目的変数】が処理時間で、

 【説明変数】がユーザ数、検索件数、CPU、メモリ、ネットワークになる。」








「はい。」

「・・・で?」
「続きはExcelで。」
「おー!」


「とりあえずお試しということで項目を絞って、ユーザ数と検索件数によって、

 処理時間がどう変わったかのサンプルデータをつくる。」
「処理時間かかりすぎじゃないですか・・・?」
「ミリ秒のイメージ。」
「なるほど。」
















「それで、この『データ分析』ってとこをクリック。」

「なんだこれ!? こんなんあったか!?」
「アドイン設定してあげると表示されるようになる。」
「そうだったのか!」
「それで、回帰分析をクリック。」 
















「y、つまり目的変数は処理時間(赤い枠内)、xがユーザ数と検索件数(青い枠内)。

 それぞれラベルを含んでいるから、ラベルのとこにもチェックを入れる。」





 「で、出力先を選んで出力すると・・・」






「おー!」
「すげー!」

「ざっくりと先に結論を言うけど、【係数】てとこを見ると

 切片が-2803.25、ユーザ数が356.3177、検索件数が10.8231ってなってるじゃん?」
「うん。」
「これをさっきの式に当てはめてあげると、



 って式になる。」
「ほう!」

「今このサンプルデータだと、ユーザ数と検索件数で大体1桁違うじゃん?」
「うん。」
「この桁を揃えてあげると、より『どっちが強い影響を与えているか?』がわかりやすくなる。
 例えば検索件数に1/10を掛けて(桁を1つ減らす)、その分係数を10倍する。


 





 そうすると、ユーザ数と検索件数*1/10の値は同じようなレンジの値になって、
 それぞれの係数が【356.3111】と【108.231】になる。
 これらの係数を比較すると、この場合、検索件数よりもユーザ数の増加の方が
 処理時間に強く影響を及ぼすってことがわかる。」
「なるほど。サンプルデータの値というか桁数を揃えてあげるのね。」


「いま、ここで試したサンプルは本当に適当に作った値だからアレだけど、
 本来はもっと多くの項目、さっき削ったCPUとかメモリとかも、
 分析対象にしてあげると、もっと『それっぽいデータ』が出る。
 で、さっきExcelで出力された結果の中で、【t値】とか【p値】とかを見て、
 『本当にこの項目は影響を与えているか?』の確からしさを判定する必要がある。」

《アバウトな補足》
t値・・・
 絶対値が2以上(t>2またはt<-2)ならば、その説明変数は有意。
p値・・・
 『たまたまこの値を示した確率』を表す。
 p値が0.05(5%)であるならば、たまたまこの値を示した確率が5%。
 逆に言えば、95%は偶然ではなくこの値を示した、ということ。
 

「これぐらいの内容なら、課題のレポート書けそうです!」
「お、良かったな! じゃあビール追加するよ!? おねーさーん!!」
「え、課題やらなきゃ・・・」


めでたしめでたし(雑)。


~おしまい~



と、多少、脚色やら補足は加えていますが、おおよそノンフィクションです。

よく、「回帰分析はExcelで十分」みたいなコラムがありますが、
今回たまたま同じような状況に遭遇したので、まとめも兼ねて書いてみました。

「○○と△△と□□のデータがあるんだけど、これらを使って分析したい」
みたいな声を良く耳にしますが、「それを使って何を求めるか」という
アウトプットの設定が抜け落ちていることが多いように感じます。

今回のケースもかなり似たようなところがあり、
目的変数(式でいうところのy)を設定するところで
上記のやり取り以上に右往左往していました。

ご覧の通り、サンプルとして与えたデータ及び説明がかなり雑なので、
「もっと実践的な分析を行いたい!」とお考えの方には
全く参考にならないかもしれませんが、
とりあえず、手元にある適当なデータで遊んでみたいという方には
かなりハードルが低い内容かと思います。(特に非IT部門の方には)

データセットもネットで探せば色々転がっているので、
いろいろ遊んでみると楽しくなってくるかもしれません。


0 件のコメント:

コメントを投稿