第159回: 「統計の実務」19 回帰分析《その5:統計の嘘 後編》
◀前の記事へ 次の記事へ▶
≡ はじめに
前回は、「回帰分析《その4:統計の嘘 前編》」について書きました。
内容は、「回帰分析中に起こりがちな嘘について、その発生原因と課題について」でした。
まず、発生原因として、「不正のトライアングル」の話を書きました。それは以下の内容です。
不正は、「動機」「機会」「正当化」の3つの条件がそろった時に発生しやすい不正のトライアングルは、「不正」というほどでもないちょっとした「人に言えない、後ろめたい行為」にも当てはまります。
ただし、幸いなことに、上の定義にあるように「3つの条件がそろった時」に発生しやすいという性質があります。つまり「掛け算」です。
たとえ、「動機の強さ(プレッシャーを含む)」が10段階中10で、「正当化」も9だったとしても、「機会」が0(ゼロ)なら10×0×9=0ですので、不正は起こりません。
「機会」をゼロにすることは、仕組みやシステム化の工夫でなんとかできることが多いものです。例えば、「領収書の原本を郵送する」という経費精算のルールについて、「スキャンしてPDFでメールすればいいじゃん」と思いますが、「領収書の原本が手元にあることで、2重に経費として控除してしまう不正の機会を減らしている」ものです。
領収書の電子化も進んでいますが、自書のサインが必要だったり、古い領収書については電子申請できなかったりするのも機会を減らす施策なのだと思います。
さて、今回は、「統計の嘘 後編」として、回帰分析の時に発生しがちなことへの対応について書きたいと思います。
≡ 回帰式の傾きが変
一番多い悩みは「回帰式の傾き」なのではないかと思います。
例えば、横軸にテスト項目数、縦軸に検出バグ数をプロットしたとしましょう。

普通は、上のようなグラフ(線は回帰分析によって求めた回帰直線)を想像すると思います。直感にも合います。
ところが、回帰分析で計算した結果、

といった、右肩下がりの回帰直線が描かれる場合があります。
そんなとき、まずは、「“テストをすればするほど、バグが見つからなくなる”だとー! 元データがおかしいんじゃない!?」と思いがちです.
おそらくグラフにある右下の点(プロット)は、テスト対象物の品質が良くてバグが少なかったと思われます。
逆に、左上のプロットは、テスト対象物の品質が悪すぎて、ちょっとテストするだけでバグが見つかる状況だったのでしょう。
データがたくさん(数十個)蓄積されれば、このような異常値(統計では「外れ値」といいます)も(数が少ないので)その影響がかき消され、想定(理論?)通りに右肩上がりになっていきます。しかし、職場で初めてデータ解析をするときなどに起こりがちです。
起こりがちな理由には3つあります。
1つ目はデータ数が少ないこと、2つ目は初めからデータ提供に協力的なチームは、優秀な右下のチームか、出せと言われたから出したよといういい加減な左上のチームが多いから、3つ目の理由は、ソフトウェア開発で取る指標は人の活動結果であり、プロセスが安定していないと統計的なばらつきが大きいからです。
このようなときに、データ解析者がすることは、相関係数を求めることです。そして、相関係数(の絶対値)が0.2以下なら「相関がないので回帰式は求められない」という結果とすることです。相関係数と相関の目安については以前も示した下表を参照してください。

ただ、この作戦はたいてい上手くいきません。「なんとかならないの?」と言われるからです。
そんな時には、嘘をつくしかありません。
でも、嘘にもつきかたがあると思っています。
どのように嘘をつくかというと、グラフをおおざっぱに9つに分割します。こんな感じです。

さて、右肩下がりのこのグラフを右肩上がりのグラフに変えるときに邪魔なデータはどの領域でしょうか?
①と⑨ですね。そのデータを削除しましょう。
逆に右肩下がりにしたいのなら③と⑦のデータが邪魔ですのでこれを削除です。
ああ、こういうことをしてはいけないと、どの本にも書いてあります。私も、前に「安易に外れ値を削除してはいけない」と書いた気がします。
だから、出来れば「相関関係がおかしいので回帰式は求められません」と主張してください。
それができない時に、上の方法を行うのですが、この時に守ってほしいことが3つあります。
データを増やさない
消してよいと考えた理由を書く
消す前のグラフに消す領域を明示する
です。
1の、「データの追加」は絶対にしてはいけません。追加したデータは全くの捏造だからです。
2は今回であれば、「領域①については、テスト対象の品質が極度に悪く、領域⑨についてはテスト対象に品質が極度に良いと考えた」という「データを削除した見解を書いて知らせる」ことをしてください。こうすることで、「バグ検出数という目的変数に対して、テスト項目数という説明変数だけでは足りない」ことが分かります。
3は何を削ったのかを明らかにすることです。
2をしておくと、次回は、「テスト対象の(テスト前の)品質」という説明変数を取得して、それを加えた重回帰分析をするという対策に結びつきます。(今回それをしないのは、データが無くて出来ないからです。)
このようして次回の改善につなげていきます。
≡ 対数軸変換
「対数軸変換」はよく使われます。
でも、「なんか回帰式とデータが合わないから適当に軸を変換してみる」人が多いように思います。それでもしないよりはしたほうがよいのですが、もう少し考えてみます。
■ 指数と対数
指数はこんなグラフです。ギュイーンと上がっていくやつです。

上のままでは回帰直線に乗らないことは見ればわかります。
そこで、この場合なら縦軸について、対数を取ります。

縦軸について、1の次が10、10の次が100になっている点に注意してください。
このように、軸を対数に変えると直線近似がしやすくなることがあります。
「logの底は10ですか? それともe(ネイピア数=自然対数の底)ですか?」という質問を受けることがあります。
どちらでも構いません。対数の復習をするとわかります。
下のグラフは同じデータについて縦軸をネイピア数(2.718)を底とした対数軸にしたものです。こちらも直線になっています。

■ 対数軸にすると良い変数
そもそも、対数は掛け算を足し算にするためのものでした。(計算尺を思い出してください、、、と言っても若者は触ったことすらないかもしれません。スマホアプリでもいいから触ってみてください。楽しいですよ?)
思い出しましょう。
10²×10³=100×1,000=100,000=10⁵
だったことを。
10²×10³=10(² + ³)=10⁵
と、掛け算が足し算に変わっています!
グラフが直線(線形)になるというのは、足し算だからで、指数関数の曲線になるのは掛け算だからです。
だから、logをとってやれば、直線に乗るというわけです。
つまり、結果に対して掛け算で効いてくる変数について対数軸変換をしてやればよいということになります。
以下は、「平成21年秋期 ITサービスマネージャ」に出た問題です。
【問題】 ソフトウェアの開発規模と開発工数の関係を表すグラフはどれか。

正解は「エ」です。
開発規模が大きくなると、開発工数はギュイーンと多くかかります。
これは、「開発規模は、開発という結果に対して掛け算で効いてくる」ということを意味しています。
これが、開発規模と関数の数だったら足し算の関係です。
1つの関数を20行って決めたら、5個関数があれば、20+20+20+20+20=100と足し算で行数が増えていきます。グラフにしたら直線です。
ところが、開発規模が増えて、関数が増えると関数と関数との間の関係の数は適切な設計をしなければ総組合せですから、掛け算で増えていきます。
だから開発規模という変数があったら対数軸にした方がよいというわけです。
結果に対して掛け算で効いてくるもの、例えば、「規模」、「工数」などが変数に選ばれた時には対数軸(縦軸と横軸の両方を対数軸)にしましょう。
ところで、対数軸にして、すぐに問題となることがあります。それは、データが0の場合です(マイナスもそうなのですが、元データがマイナスのケースは少ないので)。
0の対数は定義できません。底が10の場合、10をX乗した結果の値が0になる数値がlog(0)ですが、そんな数はありません。
ではどうするかというと、「すごく小さな値を0の代用とする」方法を推奨している人もいます。
でも、私の経験では、「それでは、小さい方に振れすぎることが多い」です。0よりも最小値を入れる方がよいです。実際には試行錯誤します。
最小値を入れるほかに、データ0について削除するほうがうまくいく場合もあります。特殊なケースでのみデータ0となる場合があり、その時は残りのデータとは分けて分析したほうが良いからです。
≡ おわりに
今回は、回帰分析の5回目として「統計の嘘 後編」の話をしました。嘘をつく時には次につながる嘘をつこう(また、ついた嘘を隠すのはやめよう)という話と、対数軸変換の話でした。
対数軸変換の方も、「本当に掛け算となるメカニズムは自明かな?」と検討してくださいね。なんとなくではだめですよー。
なんとなくで思い出しましたが重回帰分析では説明変数を増やすとR²は大きくなっていきます。よりモデルが正しくなったと調子に乗って説明変数を増やしすぎないようにしてください。(笑)
次回は、「クロス集計とカイ二乗検定」について書く予定です。数値以外のデータの解析方法となります。「こっちと、そっち、どっちがいいの?」といった解析ができるようになります。
残りは「クロス集計とカイ二乗検定」→「管理図とEVM」→「確率分布」となります。
