研究所の試験装置の温度・圧力・振動のセンサーの記録を Python で見て、異常な波形の候補を拾い、AI で試験の条件と照らした説明を付けて研究者に返す
試験が終わるたびに、データロガーが残した温度・圧力・振動の記録を Python で読み、異常な波形の候補を拾います。候補ごとに、AIが試験の条件表と試験中の作業の記録と照らし、「扉を開けた時刻と重なる」のような説明を付けて研究者に返します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Python
- 対象業界
- 医療/教育/製造
- 対象部門
- 品質管理/研究開発
- 対象業務
- 内容確認・チェック/集計・分析
- 主な課題
- データ分析に時間がかかる/属人化している/確認ミスが多い
- AIで行う処理
- 判定
- 主な効果
- 判断支援/属人化解消/工数削減
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- 個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 試験が終わったら、データロガーの CSV を共有フォルダから開く
- 波形の閲覧ソフトで、温度・圧力・振動のチャンネルを順に表示し、全区間を見通す
- 気になる箇所(急な跳ね、途切れ、ゆっくりした変化、振動の様子の変わり目)を見つけたら、時刻を控える
- 試験の条件表を開き、その時刻の設定(段階の切り替え、温度の設定)と照らす
- 試験の記録を開き、その時刻に作業がなかったかを探す
- 理由が分からなければ、装置の担当に「この時刻に何かありましたか」と聞く
- 所見を試験の管理表に書き、データを解析に回すか、確認を続けるかを決める
- 人試験担当が試験を終え、試験の管理表の状態を「終了」にする(これまでどおり、試験中の作業は記録に書き込む)
- 自動15分ごとに動く Python のプログラムが、状態が「終了」で未処理の試験を見つける
- 自動データロガーの CSV を読み、チャンネルごとに単位と記録の間隔を確かめ、条件表の段階ごとに区間を分ける
- 自動決まりの点検(センサーの途切れ・平らな値・条件の幅の外れ)を行う
- 自動区間を短い窓に分けて特徴の数値(平均・ばらつき・最大・設定との差・振動の周波数ごとの強さ)を計算し、過去の正常な試験から学んだ外れ値の検出にかける
- 自動候補となった窓を、続いているものどうし1つの出来事にまとめ、出来事ごとにグラフの画像を作る
- 自動出来事ごとに、グラフと特徴の数値と、その時刻の条件・装置の既知の挙動・試験の記録を Claude API に渡し、種類と説明を JSON で受け取る
- 自動試験ごとの点検の一覧(候補・種類・説明・グラフ)を作り、担当の研究者へ知らせる
- 人研究者が一覧を読み、グラフで確かめ、データを解析に回すか、確認を続けるかを決めて管理表に書く
- 【人/自動】 研究者が候補ごとに付けた判断(本当の異常か、説明のつくものか)を記録し、次の学習と既知の挙動の一覧に戻す
各工程の詳しい説明を読む
- 試験が終わったら、データロガーの CSV を共有フォルダから開く
- 波形の閲覧ソフトで、温度・圧力・振動のチャンネルを順に表示し、全区間を見通す
- 気になる箇所(急な跳ね、途切れ、ゆっくりした変化、振動の様子の変わり目)を見つけたら、時刻を控える
- 試験の条件表を開き、その時刻の設定(段階の切り替え、温度の設定)と照らす
- 試験の記録を開き、その時刻に作業がなかったかを探す
- 理由が分からなければ、装置の担当に「この時刻に何かありましたか」と聞く
- 所見を試験の管理表に書き、データを解析に回すか、確認を続けるかを決める
(a)見通しに時間がかかる。 1日回した試験の波形を拡大と縮小を繰り返して見るのは、1回で15分ほどかかります。月160回の試験を6名で見ると、それだけで研究者の時間の大きな部分を占めます。
(b)見る人で拾う箇所が違う。 ベテランの研究者は、振動の波形の「様子が変わった」ところを見逃しません。入って間もない研究者は、目立つ跳ねは拾えても、ゆっくりした変化や周波数の移り変わりは見落とします。 見落とした試験のデータが解析に回ると、後で結果のばらつきとして表に出ます。
(c)理由探しが属人化している。 「恒温槽の扉を開けると温度が2分ほど下がる」「油圧のポンプが切り替わる瞬間に圧力が一度落ちる」といった装置の癖は、長くいる人の頭の中にあります。 癖を知らない人は、そのたびに装置の担当に聞きに行きます。
(d)理由が分からないまま残る。 4番と5番で理由が見つからず、6番の返事も「特に何もしていない」だった波形は、所見に「原因不明」と書いたまま解析に回されがちです。
- 【人】 試験担当が試験を終え、試験の管理表の状態を「終了」にする(これまでどおり、試験中の作業は記録に書き込む)
- 【自動】 15分ごとに動く Python のプログラムが、状態が「終了」で未処理の試験を見つける
- 【自動】 データロガーの CSV を読み、チャンネルごとに単位と記録の間隔を確かめ、条件表の段階ごとに区間を分ける
- 【自動】 決まりの点検(センサーの途切れ・平らな値・条件の幅の外れ)を行う
- 【自動】 区間を短い窓に分けて特徴の数値(平均・ばらつき・最大・設定との差・振動の周波数ごとの強さ)を計算し、過去の正常な試験から学んだ外れ値の検出にかける
- 【自動】 候補となった窓を、続いているものどうし1つの出来事にまとめ、出来事ごとにグラフの画像を作る
- 【自動】 出来事ごとに、グラフと特徴の数値と、その時刻の条件・装置の既知の挙動・試験の記録を Claude API に渡し、種類と説明を JSON で受け取る
- 【自動】 試験ごとの点検の一覧(候補・種類・説明・グラフ)を作り、担当の研究者へ知らせる
- 【人】 研究者が一覧を読み、グラフで確かめ、データを解析に回すか、確認を続けるかを決めて管理表に書く
- 【人/自動】 研究者が候補ごとに付けた判断(本当の異常か、説明のつくものか)を記録し、次の学習と既知の挙動の一覧に戻す
5番目と7番目を分けていることが、この設計の要です。 候補を拾うのは数で、説明を付けるのは AI です。AIに全区間の波形を見せて「おかしいところを探して」とはしません。 画像から細かな値を読み取ることは、公式のページでも限界として挙げられているからです。
10番目が、この構成を育てる工程です。 研究者が「これは扉を開けただけ」と判断した候補が、装置の既知の挙動の一覧に入ると、次からは AI がその一覧を根拠に説明できるようになります。
02今回想定するシステム構成
データロガーの CSV(温度・圧力・振動) + 試験の条件表 + 試験の記録 │ ▼【トリガー】15分ごと(管理表の状態が「終了」で未処理の試験) Python のプログラム(社内のサーバー) ├──▶ 単位・間隔の確認、条件表の段階ごとの区間分け ├──▶ 決まりの点検(途切れ・平らな値・条件の幅の外れ) ├──▶ 窓ごとの特徴の計算(振動は Welch 法で周波数ごとの強さ) ├──▶ 外れ値の検出(scikit-learn の IsolationForest、試験の種類・装置ごとに学習) ├──▶ 候補を出来事にまとめ、グラフの画像を作る ▼ Claude API ── 出来事ごとに、画像・特徴・条件・既知の挙動・記録から種類と説明を判定 ▼ 試験ごとの点検の一覧(共有フォルダ)──▶ 担当の研究者へ知らせる ▼ 【人】研究者が判断し、管理表に書く ──▶ 判断を学習と既知の挙動の一覧へ戻す
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・SciPy・scikit-learn) | MATLAB |
| 処理エンジン | scikit-learn の IsolationForest | 統計の管理図の決まり、オートエンコーダー |
| 生成AI | Claude API(Messages API、画像の入力、構造化出力) | OpenAI API、Gemini API |
| データの取得元 | データロガーの CSV、試験の条件表、試験の記録 | - |
| 結果の出力先 | 共有フォルダの点検の一覧と、試験の管理表 | - |
新しく足すのは、Python のプログラムと、装置の既知の挙動の一覧だけです。 データロガーも試験装置も、記録の仕方は変えません。この構成は試験装置を操作しません。 点検は試験が終わった後に行い、試験を止めたり条件を変えたりする経路を持たせません。
外れ値の検出には、scikit-learn の IsolationForest を使います。 公式のページでは、特徴を1つ無作為に選び、その最大と最小の間で分ける値を無作為に選ぶことで観測を「孤立させる」手法で、分けるまでの道のりの長さを森全体でならしたものが正常さの尺度になるとされています。decision_function は負の値が外れ値、正の値が正常を表すとされています。
振動の特徴には、SciPy の welch を使います。 公式のページでは、Welch 法で信号を重なりのある区切りに分け、区切りごとのピリオドグラムを平均してパワースペクトル密度を見積もるとされています。周波数ごとの強さの並びにしておくと、共振の位置の移り変わりを数で比べられます。
03どうやって実装するのか
処理の起点を決める
15分ごとに、試験の管理表を見に行きます。 管理表で状態が「終了」になり、点検の済んでいない試験を見つけたら、その試験のデータを読みます。データロガーのファイルが書き終わったかどうかは、ファイルの更新の時刻が数分止まっていることで確かめます。 書き出しの途中のファイルを読むと、試験の後半が欠けたデータを「途切れ」として拾ってしまいます。
試験中には動かしません。 長い試験の途中で異常の候補を知らせる仕組みも作れますが、この構成では、試験が終わった後に1回だけ点検する形にします。試験中の監視は装置の側の警報の役目で、二重に知らせると試験担当が混乱します。
定時の実行は、社内のサーバーのジョブの管理の仕組みか、OS のタスクの予定で行います。 1回の実行で処理する試験は数件に限り、残りは次の15分の実行で続きから処理します。 処理の状態は管理表の「点検」の欄に書き、二重に処理しないようにします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| センサーの記録 | 時刻、温度(複数点)、圧力、振動の加速度(複数軸)、記録の間隔 | データロガーの CSV |
| 試験の条件表 | 試験の番号、試験の種類、装置、段階ごとの開始と終了の時刻、設定の温度と許す幅、圧力の段階、加振の周波数の範囲 | 試験の管理表 |
| 試験の記録 | 時刻と作業の内容(「14:05 扉を開け試料を確認」「22:30 油圧の油温の警告、ファンを確認」) | 試験の記録のファイル |
| 装置の既知の挙動 | 装置ごとに、起きる条件と、波形に出る形と、続く時間(「扉を開けると温度が下がり、数分で戻る」) | 既知の挙動の一覧 |
| 過去の正常な試験 | 試験の種類・装置ごとに、研究者が「問題なし」とした試験の特徴の数値 | 学習用の特徴の保管 |
質を決めるのは、試験の記録と既知の挙動の一覧です。 試験担当が扉を開けたことを書き込んでいなければ、AIは温度の下がりを扉で説明できません。記録の書き込みの決まりを「時刻を必ず書く」から始めてください。 時刻の無い書き込みは、照らす材料になりません。
既知の挙動の一覧は、最初はベテランの研究者と装置の担当に聞き取って作ります。 装置ごとに10行もあれば始められます。この一覧が、(c)の属人化をほどく元になります。
データの取得方法を決める
CSV は共有フォルダから読みます。 振動のチャンネルは大きいので、チャンネルごと・区間ごとに分けて読み、すべてを一度にメモリに載せない作りにします。
| 取るもの | どう取るか | 何に使うか |
|---|---|---|
| 温度・圧力 | CSV を読み、時刻を揃える | 窓ごとの平均・ばらつき・設定との差 |
| 振動 | チャンネルごとに区間で分けて読む | 窓ごとの実効値と、周波数ごとの強さ |
| 段階の時刻と設定 | 条件表の行 | 区間分けと、決まりの点検の幅 |
| 作業の記録 | 試験の記録の時刻と内容 | AIに渡す、出来事の前後の行 |
| 既知の挙動 | 一覧のうち、その装置の行 | AIに渡す説明の材料 |
振動の周波数ごとの強さは、welch で窓ごとに出します。 公式のページでは、サンプリングの周波数 fs の既定は1.0、区切りの長さ nperseg の既定は256、重なりの既定は区切りの半分、トレンドの除去の既定は 'constant' とされています。fs は必ずデータロガーの記録の間隔から入れます。 既定のままだと、周波数の軸が実際の値と合いません。
AIへ渡す前に整形する
- ファイルの確かめ … 書き終わりの確認、チャンネルの名前と単位、記録の間隔が条件表の装置と合っているかを見ます
- 時刻を揃える … データロガーの時刻と、試験の記録の時刻の基準をそろえます。装置ごとの時計のずれは、管理表に持たせた値で直します
- 区間を分ける … 条件表の段階の開始と終了の時刻で区間に分けます。段階の切り替えの前後数十秒は、切り替えの区間として別に扱います
- 決まりの点検 … 値が欠けている、同じ値が長く続く(センサーの外れ)、条件の許す幅を外れた、を数で見ます。ここで見つかったものは、AIに渡す前に種類が決まっています
- 窓ごとの特徴 … 温度と圧力は10秒、振動は1秒の窓で、平均・ばらつき・最大・設定との差・変化の速さ・実効値・周波数の帯ごとの強さ・強さが最大の周波数を出します
- 外れ値の検出 … 試験の種類・装置・段階ごとに学習した IsolationForest で、窓ごとの
decision_functionを出し、負の窓を候補にします - 出来事にまとめる … 続いている候補の窓を1つの出来事にし、開始と終了の時刻、関わるチャンネル、いちばん外れた特徴を付けます
- グラフを作る … 出来事ごとに、前後を含めた温度・圧力・振動の波形と、出来事の窓と正常な窓の周波数ごとの強さを並べた画像を1枚作ります
6番目は、学習のときに乱数の種を決めます。 公式のページでは、random_state を整数で渡すと結果が再現できるとされています。同じ試験を点検し直したときに候補が変わると、研究者が結果を信用できなくなります。 外れ値の割合の contamination は既定の 'auto' で始め、研究者の判断の記録がたまってから見直します。
8番目の画像は、長い辺を2,000画素以下にします。 公式のページでは、1回のリクエストの画像が20枚を超えると、1枚ごとの寸法の上限が厳しくなるとされ、どの画像も2,000画素を超えないようにするか、20枚以下に抑えることが案内されています。1回のリクエストでは1つの出来事の画像1枚だけを送るので、どちらの形でも収まります。
AIに処理させる
させるのは、1つの出来事について、次のどの種類に当たるかを判定し、根拠を示して説明を書くことです。
| 種類 | 当たるとき | 根拠にするもの |
|---|---|---|
test_condition | 段階の切り替え、設定の変更で説明がつく | 条件表のその時刻の行 |
known_behavior | 装置の既知の挙動で説明がつく | 既知の挙動の一覧の行 |
operator_action | 試験中の作業で説明がつく | 試験の記録のその前後の行 |
sensor_issue | 途切れ、平らな値、1つのチャンネルだけの跳ね | 特徴の数値(ほかのチャンネルが動いていない) |
unexplained | 上のどれでも説明がつかない | - |
unexplained を正しく出すことが、いちばん大事な役目です。 研究者が時間を使うべきなのは、説明のつかない出来事です。材料に無い理由を作って説明してしまうと、本当に見るべき出来事が「説明済み」の側に紛れます。
| させないこと | 理由 |
|---|---|
| 候補を足す・消す | 候補は数で決まっている。AIの判断で増減させない |
| 画像から細かな値を読む | 値は特徴の数値で渡す。グラフは形を見るためのもの |
| 試験の有効・無効を決める | 研究者が決めること |
| 試料が壊れた・劣化したと結論づける | 試料の状態は研究者が試料を見て判断する |
| 材料に無い装置の挙動を作る | 既知の挙動の一覧にある行だけを根拠にする |
2行目は、公式のページの限界の記述に沿っています。 画像の内容の判断について、低品質・回転した・200画素未満のとても小さな画像では誤りがありうること、位置の出力はおおよそであることが挙げられています。ピークの高さや時刻は、特徴の数値の表から読ませます。
指示内容を固定する
あなたは研究所の試験データの点検を補助する立場です。
試験のセンサーの記録から、プログラムが「異常の候補」として拾った出来事が1つあります。
画像(波形と周波数ごとの強さ)、特徴の数値、試験の条件、装置の既知の挙動、
試験の記録を見て、この出来事がどの種類に当たるかを判定してください。
【種類】
- test_condition .. 条件表の段階の切り替え・設定の変更で説明がつく
- known_behavior .. 装置の既知の挙動の一覧のいずれかの行で説明がつく
- operator_action . 試験の記録に書かれた作業で説明がつく
- sensor_issue .... センサーの不具合と考えられる(1チャンネルだけの跳ね、途切れ、平らな値)
- unexplained ..... 上のどれでも説明がつかない
迷ったときは unexplained を選んでください。
【厳守事項】
- 判定の根拠には、渡した材料の行だけを使ってください。
根拠にした行は evidence に、渡した文字列のまま写してください。
- 値(温度・圧力・周波数・時刻)は、画像から読み取らず、
特徴の数値の表に書かれた値だけを使ってください。
- 材料に無い装置の挙動や作業を、理由として作らないでください。
- 時刻が出来事の範囲と5分以上離れた記録を、根拠にしないでください。
- 試験を有効とするか無効とするかを書かないでください。
- 試料が壊れた・劣化した・亀裂が入ったと結論づけないでください。
試料の変化の可能性に触れるときは、unexplained とし、
check_points に研究者が確かめる点として書いてください。
- check_points には、研究者が次に確かめるとよい点を3つまで書いてください。
【出来事】{event}(開始・終了の時刻、関わるチャンネル、いちばん外れた特徴)
【特徴の数値】{features}(出来事の窓と、同じ段階の正常な窓の値)
【その時刻の試験の条件】{condition}
【装置の既知の挙動】{known_behaviors}
【出来事の前後30分の試験の記録】{log_lines}
「迷ったときは unexplained」を明記するのは、説明をつけたがる傾向を抑えるためです。 既知の挙動の一覧を渡すと、形が少し似ているだけの行を根拠に known_behavior としがちです。説明がつかないと書くことを、正しい答えとして先に示しておきます。
「5分以上離れた記録を根拠にしない」も同じ理由です。 試験の記録は前後30分を渡しているので、20分前の「扉を開けた」を、今の温度の下がりの理由にしてしまうことがあります。時刻の近さはプログラムの側でも検査します。
出力形式を固定する
Claude API の構造化出力で、次の形の JSON を受け取ります。 公式のページでは、output_config.format に type: "json_schema" を指定し、オブジェクトには additionalProperties: false を付けることとされています。
{
"test_no": "T-2026-1187",
"event_id": "E-03",
"category": "test_condition | known_behavior | operator_action | sensor_issue | unexplained",
"explanation": "",
"evidence": [
{ "source": "log | condition | known_behavior | features", "text": "14:05 扉を開け試料を確認" }
],
"check_points": [""],
"needs_review": ""
}
1つ目の理由は、evidence をプログラムで照合できることです。
| 検査 | 合わないとき |
|---|---|
evidence の text が渡した材料のどこかにそのまま含まれる | unexplained に置き換え、確認の印を付ける |
| 記録の行の時刻が出来事の範囲から5分以内 | unexplained に置き換える |
known_behavior の根拠がその装置の行 | unexplained に置き換える |
sensor_issue のとき、ほかのチャンネルの特徴が正常の範囲 | 確認の印を付ける |
| 説明の中に「破損」「亀裂」「無効」がない | 確認の印を付ける |
置き換える先を unexplained にしているのは、誤りの向きを決めておくためです。 検査で引っかかった説明は捨て、研究者が見る側に倒します。 見る件数は少し増えますが、見落としは増えません。
2つ目は、種類で一覧を並べ替えられることです。 研究者は unexplained と sensor_issue を先に見て、説明のついたものは画像を流し見ます。
3つ目は、種類の値を決めておけることです。 公式のページでは、列挙型の値は大文字小文字だけ違う形で返ることがあるとされているので、比べるときは大文字小文字を区別しません。 構造化出力は数値の最小値・最大値の制約に対応していないため、値の範囲は特徴の計算の側だけで扱い、AIには数値を返させません。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 共有フォルダ | Python のファイルの読み書き | CSV を読み、点検の一覧と画像を書く |
| 試験の管理表 | 表の読み書き | 終了した試験を見つけ、点検の状態を書く |
| Claude API | Messages API(画像を base64 で渡す) | 出来事ごとに種類と説明を受け取る |
| 研究者への知らせ | 社内のメールかチャット | 点検の一覧ができたことと、unexplained の数 |
画像は、1つの出来事につき1枚を base64 で渡します。 公式のページでは、画像は JPEG・PNG・GIF・WebP に対応し、1枚の寸法の上限は8,000×8,000画素、API に直接送る場合の1枚の大きさの上限は base64 で10MB とされています。波形のグラフは PNG で作り、長い辺を2,000画素以下にします。 画像は文章より前に置くほうがよいとされているので、画像、特徴の数値、条件、既知の挙動、記録の順に並べます。
1つの試験で出来事が多すぎるときは、AIに渡さずに止めます。 出来事が数十も出る試験は、センサーの外れや装置の不具合で全体がおかしいことが多く、1つずつ説明を付けても意味がありません。 上限(たとえば20件)を超えたら「試験全体の確認が要る」として研究者に知らせます。
人が確認する
研究者が、試験ごとの点検の一覧を読みます。
unexplainedを先に見る … グラフと特徴の数値を見て、試料を確かめるか、装置の担当に聞くかを決めますsensor_issueを見る … どのセンサーかを確かめ、そのチャンネルのデータを使えるかを決めます- 説明のついたものを流し見る … 根拠の行が本当にその出来事の説明になっているかを、グラフで確かめます
- データを解析に回すかを決める … 試験の管理表に、解析に回す・確認を続ける・やり直すを書きます
- 候補ごとの判断を記録する … 本当の異常か、説明のつくものか。説明のつくものが既知の挙動の一覧に無ければ、一覧に足す案を書きます
1試験9分を目安にします。 候補が数件で説明のついたものが多い試験は数分、unexplained のある試験は試料や装置を確かめるので十数分です。候補が一つも無い試験も、一覧の「候補なし」を確かめて記録します。
5番目は省かないでください。 判断の記録は、外れ値の検出の学習を見直す材料と、既知の挙動の一覧を育てる材料の両方になります。記録が無いと、半年たっても同じ扉の開け閉めを毎回見ることになります。
例外に対処する
| 起きること | 対応 |
|---|---|
| CSV の書き出しが途中 | 更新の時刻が止まるまで待ち、次の実行で読む |
| チャンネルの名前・単位・間隔が条件表と合わない | 点検をせず、研究者に「ファイルの確認が要る」と知らせる |
| 試験の記録が無い | 点検は行い、AIには記録なしと渡す。一覧に印を付ける |
| その試験の種類・装置の学習が無い | 外れ値の検出をせず、決まりの点検だけの一覧にする |
| 出来事が上限を超える | AIに渡さず、試験全体の確認が要ると知らせる |
| 時計のずれで記録と出来事が合わない | 管理表の時計のずれの値を見直す。AIの判定は使わない |
| API が応答しない | 候補とグラフだけの一覧を先に出し、説明は後から足す |
| 根拠の照合に通らない | unexplained に置き換え、確認の印を付ける |
4行目は、新しい試験の種類を始めたときに必ず起きます。 正常な試験の特徴がそろうまで、外れ値の検出は使えません。研究者が「問題なし」とした試験が10回ほどたまったところで学習し、 それまでは決まりの点検だけで回します。
記録を残す
- 実行の日時、試験の番号、読んだファイルと記録の間隔
- 決まりの点検の結果と、外れ値の検出の窓ごとの値(
decision_function) - 学習に使った試験の一覧と、学習の日、
random_stateの値 - 出来事ごとの画像、特徴の数値、AIに渡した材料、AIが返した JSON の全文
- 検査の結果と、
unexplainedに置き換えた理由 - 研究者の判断(候補ごと、試験ごと)と、既知の挙動の一覧に足した行
3つ目で学習の中身を残すのは、候補の出方が変わったときに理由を追うためです。 学習を作り直すと、同じ試験でも候補が変わります。どの学習で点検した結果かが残っていないと、過去の試験と比べられません。
保存の期間は、試験のデータそのものと同じにします。 点検の一覧は、そのデータを解析に回してよいと判断した根拠です。試験の報告書を後から見直すときに、点検の記録も一緒に見られるようにしておきます。
04実装レベルの3段階
最小構成では160回をさばけません。 グラフを手で作るので、確かめるための段階です。 半自動化で、1試験30分が15分ほどになります。 ①の見通しがなくなりますが、②の理由探しと④の問い合わせが残ります。本格構成で9分になり、この段階が本記事の想定です。 差が大きいのは、理由探しが、既知の挙動の一覧と試験の記録を照らす作業だからです。 段階を飛ばさないでください。 半自動化で1か月回すと、外れ値の検出が拾いすぎる試験の種類と、決まりの点検の幅が狭すぎる装置が分かります。そこを直してから AI の説明を足すほうが、研究者が一覧を信用するまでが早くなります。
05工数削減シミュレーション
導入後 160件 × 9分 ÷ 60 = 24 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 恒温槽・油圧の試験機・振動試験機などで、試料を長時間の条件にかける試験を毎月百回以上回し、試験のたびに研究者がセンサーの波形を目で見通している研究所・試験部門。データロガーの記録を CSV などで書き出せ、試験の条件表と試験中の記録(作業の書き込み)が試験ごとに残っている場合。Python で解析の仕組みを作れる技術者が社内にいる場合。
- 試験が月に数回で、研究者が全部の波形を見ても負担にならない場合。センサーの記録が装置の画面の中にしかなく、書き出せない場合。過去の試験の記録が少なく、正常な試験の波形がそろっていない場合。なお、試験の結果を有効とするか無効とするか、試料が壊れたかどうかの判断はこの構成の対象外です。
07最小構成で試す方法
- 過去の試験から20回を選ぶ(研究者が異常に気づいた試験、問題の無かった試験、原因不明のまま残った試験を混ぜる)
- 気になる箇所の時刻ごとに、その前後の波形のグラフを手で作る
- その時刻の条件表の行、試験の記録の前後の行、ベテランの研究者に聞き取った既知の挙動を書き出す
- 手元の Claude の画面に、第7章のプロンプトと、グラフ・材料を1つずつ貼る
- 出てきた種類と説明を、当時の研究者の所見と突き合わせる
原因不明のまま残った試験を必ず入れてください。 そこで unexplained を正しく返すか、材料に無い理由を作るかで、この構成の向き不向きが分かります。
| 出てきた内容 | 判断 |
|---|---|
| 当時の所見と同じ説明が付いた | Python で候補を拾う段階に進む |
| 材料に無い理由で説明した | 指示の書き方と根拠の照合で直る。構成は有効 |
| 既知の挙動で説明しすぎる | 一覧の書き方を細かくする(起きる条件と続く時間) |
| 原因不明の箇所に、もっともな候補の点検先を出した | それがこの構成の効き目です |
3行目が出ることは珍しくありません。 既知の挙動を「扉を開けると温度が下がる」とだけ書くと、どの温度の下がりも扉で説明します。「数分で戻る」「設定から3度以内」のように続く時間と大きさを書くと、 当てはまらない出来事を見分けられるようになります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 材料に無い理由で説明する | 根拠の文字列を照合し、通らなければ unexplained にする |
| 既知の挙動で何でも説明する | 一覧に続く時間と大きさを書く。「迷ったら unexplained」と指示する |
| 段階の切り替えのたびに候補が出る | 切り替えの前後を別の区間にする |
| 周波数の軸が実際と合わない | welch の fs に記録の間隔から出した値を入れる |
| 点検し直すと候補が変わる | random_state を固定し、学習の中身を記録する |
| 新しい試験の種類で拾いすぎる | 学習がそろうまで決まりの点検だけで回す |
| 試験の記録と出来事の時刻が合わない | 装置ごとの時計のずれを管理表に持たせる |
| 書き出しの途中のファイルを読む | 更新の時刻が止まるのを待つ |
| 画像から値を読んで説明する | 値は特徴の数値の表からだけ使うよう指示し、画像は形のために使う |
| 出来事が多すぎる試験に説明を付ける | 上限を超えたら試験全体の確認に回す |
| 研究者の判断が記録されない | 判断の欄を一覧に置き、空のまま管理表を更新できないようにする |
上の2行が、この構成の失敗のほとんどです。 どちらも「見るべき出来事が、説明済みの側に紛れる」失敗で、研究者は説明の付いた出来事をていねいには見ないので、紛れたものはそのまま見落とされます。 誤りを unexplained の側に倒す作りを、最初から入れてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 開発中の部品・材料の試験の条件と結果、試験装置の特性、試験担当の作業の記録です。公開前の技術情報にあたります。
- 外部へ渡す範囲を、1つの出来事の説明に必要なものまでに限る … 渡すのは出来事の前後のグラフ1枚、特徴の数値、その時刻の条件の行、装置の既知の挙動、前後30分の記録だけです。試験の生の記録全体、試料の材料の組成、図面は渡しません
- 試験の番号や試料の名前を符号にする … 開発の名称が分かる番号は、その月だけの符号に置き換えて渡します
- 社内の決まりを先に確かめる … 開発中の技術情報を外部の API に渡してよいかは、知的財産と情報の管理の部署と先に決めてください。 渡せない試験の種類は、半自動化(説明は研究者が付ける)にとどめます
- 試験の判断を代替しない … データを解析に回すか、試験をやり直すか、試料が壊れたかは研究者が決めます。AIの出力にその欄を作りません
- 試験装置を操作しない … 点検は終了後に行い、装置の設定や運転に触れる経路を持たせません
- API キーをプログラムに直接書かない … サーバーの秘密の情報の保管の仕組みに置き、プログラムの置き場所に入れません
誤りが起きた場合のリスクは、本当の異常を「説明済み」として見落とすことと、開発中の技術情報が外部へ出すぎることの2つです。前者は根拠の照合と unexplained への置き換えで、後者は渡す範囲と符号で防ぎます。
10まず何から始めるか
1週目:試験の記録と既知の挙動を整える
試験の記録の書き込みに時刻を必ず入れる決まりを作ります。ベテランの研究者と装置の担当に聞き取り、装置ごとに10行ほどの既知の挙動の一覧を作ります。起きる条件、波形の形、続く時間、大きさを書きます。
2週目:20回で試す
過去の試験から20回を選び、手でグラフと材料を作って、手元の Claude の画面で判定させます。原因不明だった試験で、材料に無い理由を作っていないかを最優先で見ます。
3週目:決まりの点検と特徴の計算を作る
Python で CSV を区間に分けて読み、決まりの点検と窓ごとの特徴の計算を作ります。この時点では外れ値の検出も AI も使わず、 決まりの点検の結果を研究者と確かめます。
4週目:外れ値の検出を足す
研究者が「問題なし」とした試験の特徴で、試験の種類・装置ごとに IsolationForest を学習し、候補とグラフの一覧を作ります。半自動化の段階として、説明は研究者が付けます。
2か月目: 出来事ごとに API で説明を付け、根拠の照合と unexplained への置き換えを足します。3か月目以降: 研究者の判断の記録で学習と既知の挙動の一覧を見直し、1試験あたりの確認時間を測ります。研究者が波形を最初から見通さずに、点検の一覧から判断できるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
IsolationForest が特徴と分ける値を無作為に選んで観測を孤立させ、道のりの長さの平均を正常さの尺度にすること。decision_function の負が外れ値・正が正常であること。contamination の既定が 'auto'、random_state を整数にすると再現できること(scikit-learn 1.9.1) | scikit-learn: IsolationForest | 2026-10-15 |
welch が重なりのある区切りのピリオドグラムを平均してパワースペクトル密度を見積もること。fs の既定が1.0、nperseg の既定が256、重なりの既定が区切りの半分、トレンドの除去の既定が 'constant' であること(SciPy 1.18.0) | SciPy: scipy.signal.welch | 2026-10-15 |
| 画像を base64・URL・Files API で渡せること。対応形式が JPEG・PNG・GIF・WebP、1枚の寸法の上限が8,000×8,000画素、API に直接送る場合の1枚の上限が base64 で10MB であること。20枚を超えると寸法の上限が厳しくなり、2,000画素以下か20枚以下が案内されていること。画像を文章より前に置くとよいこと。28×28画素のまとまりで数えること。低品質・小さな画像での誤りや位置の出力がおおよそであることが限界とされていること | Claude: Vision | 2026-10-15 |
構造化出力を output_config.format の json_schema で指定し、additionalProperties: false が必要なこと。数値の最小値・最大値の制約に対応しないこと。列挙型の値が大文字小文字だけ違って返りうること | Claude: Structured outputs | 2026-10-15 |
開発中の技術情報を外部の API に渡してよいかは、社内の知的財産と情報の管理の部署に確かめてください。 本記事は、試験の後の波形の点検に絞って、公式のページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1665)についてのご相談はこちらから。
