30秒でいうと: 電池寿命の公開データを使い、未知の実験バッチに対するモデルの比較を試みました。しかし、短寿命のセルが一つのバッチに集中し、見落とし率を含む比較が成立しませんでした。数値を出すために分割を変えるのではなく、「この問いは、このデータでは判定できない」と記録し、その経験を次のデータ選びに生かしました。
予測モデルを比較する前に、確かめたいこと
機械学習では、特徴量を増やしたりモデルを変えたりして、交差検証(CV)のスコアを比べます。ただし、データをどう分割するかによっては、そもそも知りたいことを評価できない場合があります。
私も、Seversonらの2019年論文で公開された電池寿命データを検討した際、この問題に行き当たりました。元論文の予測性能を再評価する話ではなく、評価できない問いを、評価できたことにしなかったという、私自身の検討の記録です。
124セルのデータで起きたこと
使ったのは、124個の電池セルについて寿命などが記録された公開データです。
124個のセルは、3つの「バッチ」に分かれています。ここでいうバッチは、複数の電池をまとめて充放電試験した実験上のグループです。製造ロットとは異なり、試験条件にもバッチ間で一部違いがあります。今回扱ったセル数は、第1バッチが41個、第2バッチが43個、第3バッチが40個でした。
知りたかったのは、別のバッチに対しても短寿命セルの見落としを含む評価ができるか、ということです。ここでは短寿命のセルを「陽性例」、そうでないセルを「陰性例」と呼びます。実際に短寿命だったセルのうち見落とした割合が「見落とし率」(False Negative Rate、FNR)です。
モデル比較に入る前のデータ監査で、124セルの寿命分布から短寿命の基準を算出し、固定しました。主な基準は下位約20%に当たる487サイクル。さらに、下位約10%(462サイクル)と30%(519サイクル)でも同じ問題が起きるか確認する設計としました。これらは実験用の基準で、製造現場の合否規格ではありません。
該当するセルは20%基準で26個、10%基準で13個、30%基準で38個。そのすべてが第2バッチのセルでした。30%基準では、第2バッチ43個中38個が該当し、第1・第3バッチには1個もありませんでした。
この偏りはデータ監査の時点で分かっていました。それでも、事前に決めた評価方法を結果に合わせて変更することはせず、予定どおり実行して、判定不能になる条件も記録しました。
使った方法の一つがLeave-One-Batch-Out(LOBO)です。1つのバッチを丸ごと評価側に回し、残りのバッチで学習します。下の表はモデルのスコアではなく、各分割で短寿命例がどちらに残るかを示しています。
| 評価側に回すバッチ | 評価側の短寿命セル | 学習側の短寿命セル | 起きること |
|---|---|---|---|
| 第1バッチ | 0件 | あり(第2バッチ) | 見落とし率を評価できない |
| 第2バッチ | あり | 0件 | 短寿命例から学習できない |
| 第3バッチ | 0件 | あり(第2バッチ) | 見落とし率を評価できない |
実験では入力情報を4種類用意し、分類器には共通してロジスティック回帰を使いました。第1・第3バッチを評価側にした場合は予測結果まで得られましたが、評価側に短寿命セルがなく、見落とし率(FNR)は分母が0になるため算出できませんでした。一方、第2バッチを評価側にすると学習側に短寿命セルがなく、モデルを学習できないため「学習不能」と記録しました。
つまり、未知バッチでの短寿命セルの見落としを含む比較は、このデータでは判定不能でした。
ランダム分割の結果を使えばよいのか
セルをランダムに学習側と評価側へ振り分ける方法も、LOBOと並べて最初から計画していました。プログラムではランダム分割20回を先に、LOBOの3通りをその後に処理しています。
比較したのは、短寿命セルの見落としと、問題のないセルの過剰除外を重み付けした「判断損失」です。主な短寿命基準(下位約20%)について、4種類の入力情報のうち2つを例に挙げます。見落としを10倍重く扱う条件では、ランダム分割20回の判断損失の中央値は、バッチ・試験条件だけを使う場合が0.154、放電曲線の位置やばらつきを要約した情報を使う場合が0.346でした。
損失は小さいほどよいため、バッチ・試験条件だけの情報が4種類の中でも最も良く見えました。
ただし、ランダム分割では同じバッチのセルが学習側と評価側の両方に混ざります。短寿命セルが第2バッチに集中しているため、モデルがバッチ固有の違いを手掛かりにしても、スコアが良く見える可能性があります。今回知りたかったのは、今まで見ていないバッチでも判断できるかということです。
「数字が出ること」と「その数字が知りたいことに答えていること」は、別です。
では、私はその後どうしたか
このデータで当初の比較を続けることはやめ、結果を「今回の条件では判定不能」として記録しました。
第2バッチの中だけで比べる、各バッチ内で相対的に短寿命のセルを探す、寿命を連続値で扱う、といった補助解析案も検討しました。しかし、それらはどれも元の問いとは異なる問いです。結果を見た後で条件を変え、当初の比較が成功したことにはしませんでした。
その後は、材料・製造・品質に関する別の公開データや事例を調べました。次の候補を選ぶ段階から、何を判断したいのか、その判断をデータで確かめられるかを確認するようにしました。
別のデータで同じ比較に成功した、という話ではありません。評価できなかった経験を、次にデータや事例を選ぶときの点検方法へ生かした、というのが実際の続きです。
次のデータを選ぶときに確認する5項目
今回の経験と、その後の事例探しで必要になった点を合わせて、モデルの性能比較に入る前に確認することを整理しました。
- 何を判断したいのか。 例えば「短寿命の見落としを減らしたい」のか、「平均的な寿命を予測したい」のか。判断と評価指標は合っているか。
- 何を未知の対象と考えるのか。 新しい個体、バッチ、ロット、設備、将来の時期など、どこまで一般化したいのか。
- その単位で学習側と評価側を分けられるか。 同じ個体やグループ由来の情報が、両側にまたがっていないか。
- 分割後にも、評価に必要な事例が残るか。 学習側・評価側それぞれの陽性例と陰性例を数えたか。特に、見落とし率を評価する側に陽性例があるか。
- 測定した情報と、その後の結果を同じ対象に結び付けられるか。 どの測定値がどのセルや製品の寿命・不良に対応するかを、個体IDなどで追えるか。
例えば「別ロットでも不良を見落とさないか」を確かめたいなら、ロット単位で分割できるか、不良品が評価側に残るか、測定情報と不良結果が結び付くかを、モデルを作る前に確かめます。
満たせない項目があれば、モデルの優劣を結論づける前に立ち止まる。必要に応じて診断のための評価は続けても、判定不能なものを無理に比較しません。データや事例を追加するのか、別の問いとして研究するのかも区別します。確認項目を満たしても、それだけで十分な精度や一般化性能が保証されるわけではありません。
今回、何を結論にしないか
今回の結果は、元の電池研究の予測性能を否定するものではありません。また、この結果だけで実製造に役立つ手法が何かを示せるわけでもありません。
言えるのは、この124セルのデータ構造と、あらかじめ決めた短寿命基準・バッチをまたぐ評価方法の組合せでは、目指した比較を判定できなかったということです。
おわりに ― なぜ、この話を記録したのか
分割の仕方やクラス分布を確かめることは、データサイエンスではすでによく知られた基本です。この記事も、新しい評価手法を提案するものではありません。
それでも書いたのは、実際のデータを前にして、「判定不能」という結果をどう扱い、次へどう進んだかまで残しておきたかったからです。評価条件を変えて別のスコアを出すことより、最初に立てた問いを守り、その問いに答えられなかった理由を明確にすることを選びました。
モデルを作る前に、まず、そのデータで本当に知りたいことを確かめられるか。今回の経験から、次の検討へ持ち越したのはこの問いです。
データ出典:Severson et al., Nature Energy (2019)、公開データ。本稿のバッチ別短寿命例の配置、判定不能という結論、その後の研究上の判断は私自身の検討に基づきます。元論文が同じ評価を行った、あるいは元論文の結果が誤っているという意味ではありません。