工具が折れる前に、AIが教えてくれる ― 主軸電流だけで切削工具の摩耗・寿命を予測する仕組みとPythonコード

深堀

※当サイトの記事には、アフィリエイト広告(PR)を含みます。

工具が折れると、止まるのは1本の刃だけではない。ワークも、段取りも、その日の生産計画もまとめて止まる。だから多くの現場は「まだ使えそうだが、念のため交換する」を選ぶ。安全側に倒すこの判断は正しい。ただ、その分だけ工具コストは膨らんでいる。

では、交換のタイミングを「勘」ではなく「数字」で決められたらどうなるか。しかも、新しいセンサーを後付けせず、工作機械がもともと持っている主軸電流だけで。この記事では、その考え方を実際に動くPythonコードで追いかける。読み終えたら、自分のPCにコピペして同じ結果を再現できる構成にした。

工具交換を勘から数字へ変える図
【図解】工具交換の判断を「勘」から「数字」へ。主軸電流のグラフが手がかりになる

1. 「勘での工具交換」はなぜ損なのか

工具交換のタイミングは、突き詰めると2種類の失敗のあいだにある。早すぎる交換と、遅すぎる交換だ。

早すぎる交換は、まだ十分に切れる刃を捨てる。1本あたりの工具コストがそのまま無駄になる。月に何百本も回す現場なら、積み上がる金額は無視できない。

遅すぎる交換は、もっと厄介だ。摩耗が進んだ刃は、寸法が狂う・面がびびる・最悪は折れる。折損が起きると、不良ワークの廃棄、機械の予定外停止、再段取りの時間、そして「いつ起きるか読めない」というストレスまで付いてくる。1回の突発停止のダメージは、工具1本の値段では収まらない。

下の表は、2つの失敗が何にコストを乗せるかを並べたものだ。金額は現場ごとに違うので、ここでは「どこに損が出るか」の構造だけを見てほしい。

判断 主に損するもの 性質
早すぎる交換 工具コスト(まだ使える刃を廃棄) 毎回じわじわ・読める損
遅すぎる交換 不良品・突発停止・再段取り・折損 たまに一気に・読めない損
勘での交換 上の両方を行ったり来たり 人によってばらつく

「勘」が悪いわけではない。ベテランの勘は、音や切り粉の色、加工音の変化を総合した立派な判断だ。問題は、その勘がその人にしか引き継げないこと。担当が変われば判断もぶれる。だからこそ、勘を「数字」に翻訳しておく価値がある。数字なら共有できるし、後から検証もできる。

補足
切削工具の「摩耗」とは、刃先が削れて丸くなったり欠けたりして、切れ味が落ちていく現象のこと。代表的な指標に「逃げ面摩耗(VB)」があり、刃の逃げ面がどれだけ削れたかをミリ単位で測る。多くの現場では、このVBが一定値を超えたら交換、という基準を持っている。摩耗は最初ゆっくり進み、寿命の終わりが近づくと急に加速するのが特徴で、この「最後の急加速」を読み切れるかどうかが、予知のキモになる。

2. なぜ主軸電流で摩耗が分かるのか

ここが、この記事のいちばん面白いところだ。摩耗の進み具合は、わざわざ高価なセンサーを足さなくても、工作機械がすでに持っている情報から読み取れる。それが主軸電流だ。

理屈はシンプルな物理で説明できる。

  • 刃が摩耗すると、切れ味が落ちる
  • 切れ味が落ちると、同じ加工をするのに余分な力(切削抵抗)が要る
  • 余分な力を出すために、主軸モータはより大きなトルクを発生させる
  • トルクが増えれば、モータに流れる電流が上がる

つまり「摩耗 → 切削抵抗の増加 → モータ負荷(電流)の上昇」という一本の鎖でつながっている。電流を見ているということは、間接的に刃先の状態を見ていることになる。

摩耗から電流上昇までの物理の鎖
【図解】摩耗→切削抵抗の増加→モータ負荷→電流上昇という物理の鎖

そして決定的なのは、主軸電流は追加投資ゼロで手に入るという点だ。NC装置やサーボアンプは、モータを制御するために電流を常時把握している。後付けの振動センサーや音響センサーのように、配線・防水・電源工事をする必要がない。「まず1台で試す」ハードルが圧倒的に低い。若手が最初の実験対象として選ぶなら、これ以上ない素材だ。

補足
主軸電流が取れない・取りにくい古い機械でも、後から測る手はある。動力ケーブルに挟むだけで電流を読める「CTクランプ(クランプ式電流センサー)」を使えば、配線を切らずに主軸モータの電流を取得できる。後述するMAZINやTHKの製品も、この後付けクランプを起点に主軸電流を集める方式が中心だ。「電流ベース」が現場導入の本命とされるのは、こうした非侵襲(機械をいじらない)で済む測り方が成立するからでもある。

3. AIで摩耗を予測する仕組み

電流という生データが手に入ったら、次はそれをAIが扱える形に整える。流れは3段階だ。

(1) 生の電流波形から「特徴量」を取り出す

電流は、1回の加工のあいだに細かく上下する波形として記録される。この波形をそのままAIに渡しても、点が多すぎて学習しにくい。そこで、1サイクル(=ワーク1個の加工)ごとに、波形の性格を表す数字に要約する。今回は4つを使う。

特徴量 意味 摩耗との関係
平均(mean) そのサイクルの平均電流 摩耗で底上げされる
最大(max) ピーク電流 食い込みやびびりで跳ねる
標準偏差(std) ばらつきの大きさ 切削が不安定になると増える
勾配(slope) サイクル内で右肩上がりか 摩耗が進むと上昇傾向が出る

(2) 特徴量から摩耗量を予測する(回帰)

4つの特徴量を入力に、「いまの摩耗量はどのくらいか」を数値で当てるモデルを作る。今回はRandomForest(ランダムフォレスト)という手法を使う。

(3) 残り寿命を見積もる

いまの摩耗量と、その進み方のペースが分かれば、「あと何サイクルで交換ラインに達するか」を外挿できる。これが残り寿命の推定だ。

補足
「回帰」とは、入力の数字から連続した数値を予測すること。たとえば気温と来客数から売上を当てるのも回帰だ。「特徴量」は、生データを要約した予測の手がかり。「RandomForest」は、たくさんの簡単な判断木(決定木)を作って多数決させる定番の機械学習手法で、表形式のデータに強く、設定が少なくても素直に動くため最初の一歩に向いている。いずれもディープラーニングではなく、ノートPCで数秒で学習が終わる軽さが利点だ。

4. 自分で試すPythonコード

ここからが本題だ。実際に動くコードを段階ごとに見ていく。必要なのは標準的なライブラリだけ。

pip install scikit-learn pandas numpy matplotlib

注意:ここで使うのは合成データ(シミュレーション)だ。本物の機械の電流ログではない。「摩耗が進むと電流が上がる」という物理を、現場の体感に近い形でプログラムが自分で作り出す。考え方の流れを掴むためのサンプルとして読んでほしい。実機への適用については、章の最後と注意点で正直に書く。

4-1. 摩耗していく工具の電流を作る

まず、新品から寿命まで使い切る1本の工具をシミュレーションする。摩耗が進むほど、電流のベースラインとばらつきが上がっていく。摩耗そのものは「最初ゆるやか・末期で急加速」という非線形カーブにしてある。

def simulate_one_tool(n_cycles=220, samples_per_cycle=50):
    rows = []
    for cycle in range(n_cycles):
        # 真の摩耗量を非線形に進行させる(末期で急増する曲線)
        t = cycle / n_cycles
        wear = (t ** 2.2) * 1.3          # 1.0 を超えたら寿命

        # 電流のベースライン(摩耗で底上げされる)
        base_current = 10.0 + 6.0 * wear
        # ばらつき(摩耗が進むほど振動成分が増える)
        noise_level = 0.4 + 1.8 * wear

        # 1サイクル分の電流波形(加工の周期変動 + 摩耗由来のノイズ)
        phase = np.linspace(0, 2 * np.pi, samples_per_cycle)
        waveform = (
            base_current
            + 1.2 * np.sin(phase)
            + RNG.normal(0, noise_level, samples_per_cycle)
        )
        rows.append({"cycle": cycle, "waveform": waveform, "true_wear": wear})
    return pd.DataFrame(rows)

ポイントは2行目以降。wear = (t ** 2.2) * 1.3 が摩耗の非線形カーブだ。前半はほとんど増えず、後半で一気に立ち上がる。これが実際の工具摩耗に近い形で、この「終盤の急加速」こそが予知を難しくする本質でもある。

加工サイクルと摩耗・電流のカーブ
【図解】摩耗は序盤ゆるやか・末期で急加速。電流も同じ形で底上げされる

4-2. 波形を4つの数字に要約する

次に、各サイクルの波形から平均・最大・標準偏差・勾配を計算する。勾配は、波形を直線で近似したときの傾きだ。

def extract_features(df):
    records = []
    for _, row in df.iterrows():
        w = row["waveform"]
        x = np.arange(len(w))
        # トレンド勾配 = 波形を直線フィットしたときの傾き
        slope = np.polyfit(x, w, 1)[0]
        records.append({
            "cycle": row["cycle"],
            "mean":  float(np.mean(w)),
            "max":   float(np.max(w)),
            "std":   float(np.std(w)),
            "slope": float(slope),
            "true_wear": row["true_wear"],
        })
    return pd.DataFrame(records)

ここで生の波形(50点)が、たった4つの数字に圧縮される。AIに渡すのはこの4つだけ。データが軽くなり、学習も速くなる。

4-3. RandomForestで摩耗量を学習する

4つの特徴量を入力、摩耗量を正解として、回帰モデルを学習させる。データの3割をテスト用に取り分け、残り7割で学習する。

def train_wear_model(feat):
    feature_cols = ["mean", "max", "std", "slope"]
    X = feat[feature_cols].values
    y = feat["true_wear"].values

    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.3, random_state=42
    )
    model = RandomForestRegressor(n_estimators=200, random_state=42)
    model.fit(X_train, y_train)

    y_pred = model.predict(X_test)
    mae = mean_absolute_error(y_test, y_pred)
    r2  = r2_score(y_test, y_pred)
    return model, mae, r2

学習はノートPCで一瞬で終わる。実行すると、テストデータに対する精度がこう出る。

MAE (平均絶対誤差) : 0.0253
R^2 (決定係数)     : 0.9924

MAE(平均絶対誤差)は、予測した摩耗量が平均でどれだけずれたか。0.0253なので、寿命を1.0とするスケールで2〜3%程度のずれに収まっている。R²(決定係数)は1.0が満点で、0.9924はほぼ完璧に近い。

ただし、この数字をうのみにしてはいけない。これは合成データだから出る出来すぎた値だ。プログラムが作った世界には、現場の電圧変動も、材料のばらつきも、別の加工との混在もない。実機の電流ログで同じことをすれば、R²はもっと低く出るのが普通だと考えておいたほうがいい。ここで確認できるのは「精度の高さ」ではなく「この4つの特徴量で摩耗がちゃんと当たる方向性」のほうだ。

予測した摩耗と実際の摩耗の散布図
【図解】予測した摩耗と実際の摩耗。点が対角線に乗るほど精度が高い(合成データの例)

4-4. 残り寿命を見積もる

最後に、いまの摩耗と直近のペースから「あと何サイクルで交換ラインに届くか」を外挿する。

def estimate_remaining_life(model, feat, threshold=1.0):
    feature_cols = ["mean", "max", "std", "slope"]
    pred_wear = model.predict(feat[feature_cols].values)
    total_cycles = int(feat["cycle"].max()) + 1

    rows, window = [], 20
    for i in range(len(feat)):
        cur_wear = pred_wear[i]
        # 進行ペース = 直近 window サイクルの摩耗増加量 / サイクル数
        j = max(0, i - window)
        pace = (pred_wear[i] - pred_wear[j]) / max(1, (i - j))
        pace = max(pace, 1e-4)                      # ゼロ割防止

        # 残り寿命を線形外挿し、1本の寿命を超えない上限でキャップ
        remaining = max(0.0, (threshold - cur_wear) / pace)
        remaining = min(remaining, float(total_cycles))
        rows.append({"cycle": int(feat["cycle"].iloc[i]),
                     "pred_remaining_cycles": float(remaining)})
    return pd.DataFrame(rows)

実行すると、サイクルが進むにつれて残り寿命の予測がこう変化する。

加工サイクル 予測摩耗 残り寿命(予測) 残り寿命(実際)
50 0.10 多め(楽観) 約150
100 0.27 やや多め 約100
150 0.57 近づく 約50
200 1.07 0(交換) 0

ここに、現実そのものの性質が出ている。序盤(サイクル50付近)では、残り寿命を楽観的に多めに見積もる。これは、摩耗が末期で急加速する非線形カーブなのに、序盤の「まだ穏やかなペース」でまっすぐ未来を延長してしまうからだ。「まだ全然平気」と言いすぎる。

逆に、寿命が近づくほど予測は鋭くなる。ペースの急上昇を捉えて「もうすぐ交換」と正しく警告する。これは欠点ではなく、むしろ実運用の都合に合っている。本当に知りたいのは「あと半年は平気」ではなく「今週そろそろ危ない」のほうだからだ。コードでは、序盤の過大評価に上限(キャップ)をかけて暴れを抑えている。

残り寿命の予測と実際の比較
【図解】残り寿命の予測は序盤は楽観的、寿命が近づくほど鋭くなる

ここまでで、ディープな時系列モデルを持ち出さなくても、「電流の特徴量 → 摩耗の予測 → ペース外挿」という素直な組み立てで、交換計画に使える出力が得られることが見えたはずだ。難しい技術を積むより、まず手元で動かして挙動を理解するほうが、現場への説明力につながる。

5. 現場で広げるには

サンプルで仕組みを掴んだら、次に気になるのは「実際の製品はどうなっているか」だろう。主軸電流ベースの工具監視は、すでに後付けで導入できる商用ソリューションが出ている。代表的なものを挙げる。

ソリューション 提供元 特徴
切削工具監視AI MAZIN 主軸電流・モータ負荷データをAI解析し、工具の異常・摩耗を検知。既設機にも後付けしやすい構成
OMNIedge THK センサーとクラウドで設備状態を可視化。電流・振動などのデータを後付けで集めて予兆検知につなげる
iQ Monozukuri 工具摩耗診断 三菱電機 NCから取れる主軸負荷情報をもとに工具摩耗を診断するパッケージ

共通点は明確だ。いずれも「もともと取れる電流・負荷を起点にする」方向で設計されている。新しい穴を開けず、ケーブルにクランプを挟む程度で始められる。この記事のサンプルが示した思想と、商用製品の発想は地続きだ。だからこそ、自分で一度コードを動かしておくと、製品デモを見たときに「中で何をやっているか」が透けて見えるようになる。

そして2026年のトレンドは、電流「だけ」から一歩進んだマルチセンサー融合に向かっている。電流に加えて、振動・音響(AE)・温度を組み合わせ、それぞれが捉えにくい現象を補い合う方向だ。電流は全体的な負荷の上昇に強く、振動や音響は欠けや微小なびびりといった突発的な異常に強い。複数の目で見ることで、摩耗の「ゆるやかな進行」と「急な異変」の両方を取りこぼしにくくする。

ただし融合は万能ではない。センサーが増えれば配線も、データ量も、メンテナンスの手間も増える。だからこそ「電流だけ」で始めて効果を確認し、必要に応じて足していく順番が現実的だ。いきなりフルセットを狙わず、軽いところから検証する。これは技術選定全般に通じる姿勢でもある。

工作機械×AIの広がりは工具監視にとどまらない。CAMやCAD、計測まで含めた全体像は工作機械×AIの最新動向でまとめている。具体的なツール選定に進みたいなら工作機械×AIツールの比較もあわせて読むと、今回のサンプルがどの位置づけにあるか見えてくる。

マルチセンサー融合のイメージ
【図解】電流を起点に、振動・音響・温度を組み合わせるマルチセンサー融合(2026年の方向)

6. 若手にとっての意味

この記事で扱ったのは、技術的にはそれほど大げさな話ではない。電流を測り、4つの数字に要約し、軽い機械学習で予測する。それだけだ。だが、ここで起きている変化は本質的だ。

工具交換の判断が、「勘」から「数字」へ移っている。ベテランの頭の中にしかなかった「そろそろ替えどきだ」という感覚が、誰でも読める数値とグラフに翻訳される。これは、経験の浅い若手にとって大きい。長年の勘がなくても、データを読めれば同じ判断に近づけるからだ。

ここで若手に求められるスキルは、これまでと少し違う。旋盤やフライスの操作に加えて、データを読む力AIを道具として使う力が効いてくる。電流のグラフが何を語っているかを読み、PythonやAIツールで仮説を試し、結果を現場の言葉で説明する。製造の知識とデータの知識、その両方をつなげられる人が、これからの現場で重宝される。

補足
「どこから学べばいいか分からない」という人へ。最初の一歩は、この記事のコードを実際に動かしてみることで十分だ。pythonとscikit-learnは無料で、ノートPCがあれば始められる。次に、自分の現場で取れるデータ(電流に限らず、温度でも稼働ログでも)を1つ選び、同じ「生データ → 数字に要約 → 予測」の流れに当てはめてみる。完璧なモデルを作る必要はない。「データで現象を説明する」回数を増やすこと自体が、これからの製造業で効くスキルになる。

AIは、ベテランの仕事を奪う道具ではない。ベテランの勘を数字に翻訳して、次の世代に橋渡しする道具だ。その翻訳作業の主役になれるのは、製造の現場とデータの両方に足を置ける若手にほかならない。


手を動かしてAIを学ぶなら、次はAIエージェント開発へ

この記事のコードで「データからAIで予測する」流れを掴んだら、次のステップは環境構築不要でAIエージェント開発を実践できる「AI Agent Camp」。非エンジニアでもオンライン完結で、手を動かして学べる。

無料説明会あり / オンライン完結

環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

※まず手元のPythonで動かし、次に学習サービスでステップアップするのが定石

7. まとめ

主軸電流という「すでにそこにある情報」だけで、工具の摩耗と残り寿命をどこまで読めるか。この記事で追いかけた要点を整理する。

論点 この記事の答え
なぜ電流で分かるのか 摩耗→切削抵抗増→モータ負荷(電流)上昇という物理の鎖。追加センサー不要
どうAIにかけるか 波形を平均・最大・標準偏差・勾配の4特徴量に要約し、RandomForestで回帰
残り寿命は当たるか 序盤は楽観的、寿命が近づくほど鋭くなる。これは非線形摩耗の本質そのもの
サンプルの精度 合成データでMAE 0.0253・R² 0.9924。実機ではここまで出ない前提で考える
現場で広げるには MAZIN・THK・三菱電機が電流ベースの後付け製品を提供。2026年はマルチセンサー融合へ

大事なのは、今回のコードが「考え方を掴むための合成データのサンプル」だという一点だ。実機に効かせるには、自社設備の電流ログと、それに対応する実測の摩耗量(教師データ)を地道に集める必要がある。出来すぎたR²に惑わされず、まず手元で挙動を理解し、それから現場のデータで検証する。この順番を守れば、サンプルは現場の入口になる。

工具が折れてから慌てるのではなく、折れる前に数字が教えてくれる。その仕組みは、もう特別な装置がなくても、手元のPythonで体験できるところまで来ている。次に確認すべきは、自分の現場でどんなデータが取れるか。そこから始めればいい。

コメント

タイトルとURLをコピーしました