NTTデータCCSでデータ分析案件を担当している tomofuji です。本テックブログでのデビューです、よろしくお願いします。
はじめに
本投稿では、データ分析で発生した「再現できない問題」の実例と、その対策として有効だった「作業ログの記録」について紹介します。気軽に書かせていただいているので、お気軽に読んでいただければと思います。
データ分析で得られるもの
いろいろな場面で実施されるデータ分析、その目的や対象はありきたりなものから特殊なものまで幅広く存在しています。
幾多もあるデータの群から傾向や規則性を見つけることができた瞬間は、宝くじにでも当たったかのような喜びを感じることでしょう。その成果は歴史に名を残すもの、あるいは莫大な利益を生む源となるか、はたまた識者から見れば当たり前の事実であるのか、データ分析から得られるものの価値は多種多様です。
データ分析によって得られる成果とは、単に分析結果そのものだけでなく、その過程で経験する失敗や試行錯誤から得られる学びも含まれるのではないかと思います。これがダメなら次はあれを試してみよう、ここまで到達できるなら次はより高みに行けるはずだと、その可能性を信じ突き進んできた努力もまた成果ではないでしょうか。
私は学生時代に筆記用具をシャープペンシルからボールペンに替えました。理由は、計算ミスを消さないためです。どこで間違えたのかを遡ることで、自分の特性を理解する助けになったと思っています。ま、消しゴムを使わなければ同じなんですが、少なくとも手にかかる負担は軽減されたように感じています。(当時は)
得られた成果の活用
せっかく得られたデータ分析の成果(ここでは何かしらのアウトプットができるもの)は活用しないと意味がありません。分析したデータ構造と同じで異なるデータセットに対して適用したり、全く異なる分野に適応してみたりと可能性は広がります。
そのためにはまず、得られた成果がどんな特徴や特性があるのかを明確にしておく必要があります。
- 入力:どのようにデータを適用すればよいか
- 使用する変数の数
- 各変数の取りうる範囲や平均値など
- 実行:どのように実行するのか
- アプリケーションの使用
- プログラムを作成
- 出力:どのような出力が得られるか
- 計算結果
- 手順やプロセス
- 過程:どうやってその成果にたどり着いたか
- データ加工・編集
- 統計処理
- 機械学習
これらを踏まえて、いざ新たなデータへチャレンジ!と行きたいところですが、念のため得られた成果が同様に再現できるかを確認しておきましょう。
なぜ、成果を再現できるか確認するのでしょうか?
学術論文などでは、第三者による再現実験によって結果が再現できなければ内容が適切でないとされ認められません。こんな細胞がありますと発表したけど、現象が再現されず論文や発表が取り消されるということもありましたね。ノーベル賞受賞クラスになれば、再現実験ができるようになるまで技術が発展しないと確認できないため受賞までに何十年もかかったりします。ちょっとしたデータ分析ですら再現できないこともしばしば(この場合はやらかしてる可能性が高いですが・・・)。
いったい何が起きた!?
何のことはない、一度やったことをもう一度繰り返し実行して、同じ結果が得られればよいだけの話です。
と思いきや、同じ成果が得られませんぞっ!
実際にこのような状況になると、かなり焦ります
いつ、どこで、何をやらかしたのか・・・
終電間際では余計に焦ります
無理せず諦めて、寝てからもう一度見直してみると簡単に解決できたりすることもありますね
こういう時は深呼吸して、心を落ち着かせ、初めから順を追って振り返ってみるのです。
例えば、次のように手順を確認していきます。
- 基のデータを用意・・・よしっ!
- 第1弾のデータ加工・・・よしっ!
- 第2弾のデータ加工・・・あれっ!?
この例の場合、第2弾のデータ加工で間違いがあったみたいです。
何が起きたかというと、第1弾のデータ加工結果に対して第2弾のデータ加工を実施すべきところ、基のデータに第2弾のデータ加工を実施していたようです。いわゆる「先祖返り」というやつです。「第1弾加工データ」のつもりが、その先祖である「基データ」に入れ替わっていました。
以下にサンプルデータを示します。
第1弾は基データの最大値が1、最小値が0となるように正規化しています。
第2弾は第1弾の各データとデータの平均値の差(偏差)を求めています。
第2弾(誤)は基データの各データとデータの平均値の差(偏差)を求めています。
第2弾と第2弾(誤)は異なる値となっています。ただし、ほぼ比例関係となっているため、分析結果としては一見それらしく見えてしまう点に注意が必要です。
| 基データ | 第1弾 | 第2弾 | 第2弾(誤) |
|---|---|---|---|
| 183 | 0.176 | -0.132 | -57.8 |
| 544 | 1.000 | 0.692 | 303.2 |
| 265 | 0.363 | 0.055 | 24.2 |
| 415 | 0.705 | 0.398 | 174.2 |
| 106 | 0.000 | -0.308 | -134.8 |
| 188 | 0.187 | -0.121 | -52.8 |
| 211 | 0.240 | -0.068 | -29.8 |
| 126 | 0.046 | -0.262 | -114.8 |
| 232 | 0.288 | -0.020 | -8.8 |
| 138 | 0.073 | -0.235 | -102.8 |
転ばぬ先の杖
こんなことはもう二度とごめん被りたいところです。
それでは、どうすればよいのでしょうか。
ズバリ、地道に作業手順を記録(作業ログを残す)していくことが手っ取り早い解決方法です。
しかし、実際にデータ分析作業を進めていくと、次こうすれば上手くいくんじゃないかなどの誘惑に勝てず、手順を記録する前に次の手順に進んでしまうものです。初めのうちはキチンと記録を取っていても、作業に慣れてくると考えるより先に手が動いてしまう・・・なんてことも。(私だけ?)
そんなものぐさな人には、作業を記録する機能があるソフトウェアの利用をおすすめします。
Microsoft Excel のマクロ記録機能などが有名ですね。ただし作業と直接関係ないものまで記録されてしまうので、ご使用になる際にはご注意ください。
何はともあれ、手順を明示的に残せる方法を選ぶことが重要です。私の場合はプログラミングが最も扱いやすいため、分析作業はできるだけコードとして残すようにしています。プログラミング経験のない人は、この機会に是非チャレンジしてみてはいかがでしょう。IT屋である私は、まずプログラミングで解決することを考えます。何やって、次何やってと段取りを言葉(日本語や英語など)で書くのとプログラミング言語で書くのは、大差ないと思っています。英語が苦手な私でも、プログラミング言語のおかげで、共通の自然言語を持たない相手とも技術的な意図を共有できると感じています。
プログラミングにアレルギーのある方へ
運動会やコンサートなどで配られる「プログラム」、あえて日本語にすると「式次第(?)」。これやって、次これやって・・・それをコンピュータ上でやっているだけなので、何も恐れることはありません。昔に比べると安全対策が進み、プログラムのミスでコンピュータ全体が停止してしまう場面も少なくなりました。
おわりに
データ分析に限らず手順を記録しておくことは大事なことです。きちんと記録されていないと引継ぎのとき、大変なことになる予感しかしないですよね。
そして結果を再現させることの重要性も少しは伝わったでしょうか。今取り扱っているデータはどの段階なのかを理解した上で進めていければ、迷子にならずに目的地へ到着できると思います。
このような苦い経験をされた方、きっと私だけではないと信じたい・・・(求ム同士)
再現性の重要性を思い知ったわけですが、巷を賑わせている生成AIでは同じ指示でも異なる結果を返すことがあり、再現性は保証されていません。ツールやモデルといったものはその特性を理解したうえで、適切な用途で適用するように気を付けていきましょう!