利益:
- pandas を使用してテレメトリ、テスト、本番データをロードしてクリーンアップする反復可能な分析ワークフローを確立する機能
- 人工知能からコード、属性、視覚化の支援を受けながら、出力を 1 行ずつ理解して検証する能力
- ユニットの一貫性、データ漏洩、再現性について分析結果を監査する機能
これまでのユニットでは、人工知能を「アドバイザー」のように使用していました。この単元ではさらに一歩進んで、Python を使用して自動車データを自らの手で分析するワークフローを構築します。目標は、ソフトウェア開発者になることではありません。 AIによるコード支援を受けながら、そのコードを一行一行理解して検証できるエンジニアを作ることです。なぜなら、AI が生成するテキストと同様に、AI が生成するコードにも欠陥がある可能性があるからです。ボリュームが混乱したり、データが漏洩したり、間違った列が中央に配置されたりする可能性があります。コードを理解せずに実行することは、署名のないレポートを公開するようなものです。
パイソン、なぜ?データ分析の事実上の標準であるため、pandas (表形式データ)、numpy (数値処理)、matplotlib (プロット)、および scikit-learn (機械学習) ライブラリを使用して、テレメトリ、テスト、本番データを簡単に処理できます。
再現可能な分析を実現するための 6 つのステップ
堅実な分析は常に同じフレームワークに従います。
- ロード: ファイルからデータを読み取ります。
- 検査: ディメンション、列、データ型、欠損値。
- クリーン: 欠落/異常値、単位、タイムスタンプの修正。
- 特徴の抽出: 意味のある変数を導き出します。
- 分析/モデル: 統計、視覚化、またはモデル。
- 検証と報告: 結果の提供、容量/漏れのチェック、記録。
ヒント: AI にコードを要求するときは、「各ステップで実行していることをコメントアウトし、仮定を書いてください」と言います。したがって、コードを読みながら検証できます。
ステップバイステップの例: テレメトリ分析
次のコードは、CAN/テレメトリ レコードをロードし、基本的なチェックを行います。 (注: コードを実行する前に必ずコードを理解してください。列名はデータによって異なります。)
import pandas as pd# 1) ロード: セミドット CSV、最初の列 timestampdf = pd.read_csv("telemetry.csv", parse_dates=["time"])# 2) Checkprint(df.shape) # 行数、列数print(df.dtypes) # 各列のタイプ (数値またはテキスト)print(df.isna().sum()) # 欠損値ごとの数columnprint(df.describe()) # 要約統計量: 最小、最大、平均
description() の出力は、検証する最初の機会です。エンジン速度の最大値が 45,000 rpm (通常の乗用エンジンは約 7,000 rpm) の場合、ユニットまたはセンサーに障害があります。
監査ステップで最も頻繁に使用される pandas コマンドとその動作:
コマンド
どういうことですか
それは何を裏付けるのでしょうか?
DF.シェイプ
行数/列数
予想通りのサイズでしょうか?
df.dtypes
列の種類
数値列がテキストになってしまったのでしょうか?
df.isna().sum()
欠損値の数
どれくらいのスペースがありますか?
df.describe()
最小/最大/平均
それは物理的に合理的ですか?
df.duplicated().sum()
重複した行
二重登録はありますか?
# 3) クリア: 物理的に不可能な値をマークします。
注意: 外れ値をすぐに削除しないでください。まず、なぜ外れ値なのかを理解してください。それは実際の出来事 (突然の加熱) ですか、それともセンサーの故障ですか?やみくもに削除すると、本当の欠点が隠れてしまう可能性があります。
# 4) 特徴量の抽出: 温度上昇率 (derivative)df = df.sort_values("time")df["sic_increase_speed"] = df["motor_sic"].diff() / df["time"].diff().dt.total_seconds()# 5) 単純な視覚化import matplotlib.pyplot as pltplt.plot(df["time"], df["motor_sic"])plt.xlabel("時間"); plt.ylabel("エンジン温度(℃)")plt.title("エンジン温度コース")plt.show()
Python でのデータ漏洩の防止
予測モデルを構築する際の最も危険な間違いはデータ漏洩 (ユニット 5) です。つまり、予測時に知ることができない情報をモデルが認識した場合です。これを時系列で回避するための黄金律は、過去でトレーニングし、未来でテストすることです。ランダムなシャッフルは行わないでください。
from sklearn.model_selection import train_test_split# FALSE: 時系列をランダムに分割すると将来がリーク# df[df["time"] > Threshold] # 過去 20% の将来
注意: train_test_split はデフォルトでデータをシャッフルします (shuffle=True)。時系列で見ると、これは未来と教育を混同し、誤った高いスコアを生み出します。 AI が生成するコードでこれを行った場合は、必ず修正してください。
ユニットの一貫性: サイレントキラー
自動車業界で最も起こりやすい誤差は単位誤差です。km/h から m/s、Nm から lb-ft、bar から kPa、°C から K です。分析での各列の単位を辞書に保管し、変換を書き留めることで、命を救います。
# 単位を明示的に文書化 = {"speed": "km/h", "motor_sic": "C", "pressure": "bar"}# 必要に応じて明示的に変換 (km/h -> m/s)df["speed_ms"] = df["speed"] / 3.6
ミニケーススタディ
ケース 1 - description() でエラーが発生しました。アナリストは AI からのコードを実行し、範囲を推定します。結果は異常に高いです。 description() の出力を見ると、バッテリー容量が Wh で入力されている行と、kWh で入力されている行があることがわかります (1000 倍の違い)。ユニットを均一なタイプにすると結果が向上します。結論: 単純な要約統計により、間違った予測が防止されました。
ケース 2 - 混乱の罠。インターンのブレーキ摩耗モデルは、テストセット上で 98% の精度でした。コードを調べると、train_test_split(shuffle=True) と時系列が混在していることがわかります。これは、将来のポイントがトレーニングに漏れることを意味します。時間で割ると精度は80%まで下がりますが、現実的な精度になりました。結論: AI コードが機能したからといって、それは正しくありませんでした。人間が漏れをキャッチしました。
ケース 3 - 外れ値を理解する。耐久性記録では、AI コードが異常値のひずみ値を自動的に削除します。エンジニアは削除されたポイントを調べます。これらは、まさにテストが関心を持っていたクラック開始の瞬間でした。削除は削除され、違反は個別にレビューされます。結果: 「クリーニング」では、実際の信号を削除できます。あらゆる段階で質問します。
プロンプトテンプレート
テンプレート 1 - リクエスト コード (説明付き):
役割: あなたは Python データ アナリストのメンターです。タスク: テレメトリ CSV をロードしてチェックするコードを作成します。コンテキスト: 列: 時間、速度 (km/h)、engine_sic(C)、回転数 (rpm)。制約: 各行をコメント化します。どのチェックが行われたのか、そしてその理由を説明します。物理的に不可能な値のチェックを追加します。何も削除せずに何も削除しません。出力: コメント化されたコード + どの出力とその理由を確認する必要があります。
テンプレート 2 - 漏れ検査:
役割: あなたは機械学習のコードレビュー担当者です。タスク: 次のトレーニング/テスト分割コードにデータ漏洩がないか確認します。コンテキスト: これは時系列です (車両テレメトリ)。制約: ランダムなシャッフルがある場合は警告します。時間による分割を提案し、正当化します。出力: 調査結果 + 修正されたコード + 説明。
テンプレート 3 - ユニットの検証:
役割: あなたはデータ品質監査人です。タスク: DataFrame 内の単位の不一致を探すチェックを提案します。コンテキスト: 容量は一部の行では kWh であり、他の行では Wh である可能性があります。出力: コードをチェックし、疑わしいパターンを見つける方法を確認します。
テンプレート 4 - 視覚化 + コメント:
役割: あなたはデータ視覚化の専門家です。タスク: エンジン温度の推移と上昇率をプロットするコードを作成します。制約: 軸に単位のラベルを付けます。異常を視覚的にマークします。グラフを解釈するときに決定的な欠陥があると主張しないでください。出力: コード + グラフ内で何を探すか。
弱いプロンプト / 強いプロンプト
弱いプロンプト:
このデータを使用してモデルを構築します。
どのターゲット、どのコンパートメント、どの検証が行われるかは明らかではありません。 AI は、スクランブルされたリーキーなユニットブラインド コードを出力できます。
強力なプロンプト:
役割: あなたは Python ML メンターです。タスク: ブレーキ パッドの摩耗を予測し、検証の落とし穴を示すための初期ワークフローを作成します。コンテキスト: 時系列テレメトリ。ターゲット: 残りのパッドの厚さ。制約: 時系列を時間で分割します (シャッフルなし)。データ漏洩のリスクがある属性にフラグを立てます。ドキュメント単位;各ステップを解釈する;結果を現場に出す前にどのようなチェックが必要かを書き留めます。出力: コメント化されたコード + 検証チェックリスト。
よくある間違い
- コードを理解せずに実行する。 AI コードにも欠陥がある可能性があります。一行ずつ読んでください。
- ミキシング時系列。 shuffle=True は未来を漏らし、偽のスコアを生成します。
- 異常値を盲目的に削除します。実際の信号 (障害の発生) をクリアできます。
- ユニットを文書化していない。 km/h 対 m/s、Wh 対 kWh などの誤差は静かに増加します。
- description()/check ステップをスキップします。ほとんどのエラーは、最初の要約統計に表示されます。
要約すると
- Python (pandas、numpy、matplotlib、scikit-learn) は、自動車データ分析の事実上の標準です。
- 反復可能な分析: 読み込み、検査、クリーンアップ、特徴付け、分析、検証、レポート。
- AI が生成するコードを 1 行ずつ理解し、検証することが不可欠です。効果があるからといって、それが正しいとは限りません。
- 時系列で過去と未来の区別を維持します。ランダムなシャッフルによりデータ漏洩が発生します。
- 単位の一貫性と外れ値の解釈は、地味ではありますが検証の重要なポイントです。
アプリケーションタスク
小規模なデータ セット (実際のテレメトリまたは合成テレメトリ) を取得します。 (1) 6 ステップのフレームワークに従って、テンプレート 1 を使用してローディングおよび制御コードを生成し、各行を理解していることを確認します。 (2) description() 出力内で疑わしい値を少なくとも 1 つ見つけて、その理由を調査します。 (3) 予測タスクで、トレーニング/テスト分割の時間を計測し、テンプレート 2 で漏洩のリスクを確認します。 (4) 辞書で使用する各列の単位を文書化します。
チェックリスト
- [ ] 6 段階のフレームワークを使用して分析を設定しました。
- [ ] AI が生成したコードを 1 行ずつ読んで理解しました。
- [ ] 疑わしい値をdescribe()/auditで探しました。
- [ ] 時系列を時間ごとに分割しました (シャッフルなし)。
- [ ] データ漏洩の危険性がある属性にマークを付けました。
- [ ] 各列の単位を文書化し、変換を明示的に書きました。