投稿日:2025年1月11日

Pythonを用いた異常検知手法と実装プログラミング

Pythonによる異常検知の基本概念

異常検知とは、データの中で通常のパターンから逸脱したデータポイント、すなわち異常を特定する手法です。
製造業などの産業分野では、異常検知は製品の品質向上、機械のメンテナンス、またはプロセスの最適化において重要な役割を果たします。
Pythonは、その豊富なライブラリと柔軟性から、異常検知に非常に適したプログラミング言語です。

Pythonを使って異常検知を行うための基本的なステップは次の通りです。
データの収集、前処理、モデリング、評価、そして継続的な改善です。
異常検知のアルゴリズムとしては、統計的手法、機械学習、深層学習が一般的に使われます。

統計的手法による異常検知

統計的手法は、異常検知の古典的な方法の1つであり、多くの場合、データの平均や標準偏差を基に異常を判断します。
具体的には、正規分布を仮定し、ある範囲から外れたデータポイントを異常として検出することが一般的です。

Pythonでの実装例

Pythonを利用して統計的手法を実装するには、例えば以下のようなコードが考えられます。

“`python
import numpy as np
import pandas as pd

# データの例を生成
data = np.random.normal(0, 1, 1000)
# 異常値を追加
data = np.append(data, [10, 15, -10])

# 平均と標準偏差を計算
mean = np.mean(data)
std_dev = np.std(data)

# 異常値を検出
threshold = 3
anomalies = [x for x in data if np.abs(x – mean) > threshold * std_dev]

print(f”Anomalies: {anomalies}”)
“`

このコードでは、データの平均と標準偏差を計算し、それに基づいて閾値を設け異常値を特定しています。

機械学習による異常検知

機械学習を用いた異常検知は、教師あり学習と教師なし学習の両方で実現可能です。
教師あり学習では、正常と異常のデータのラベルが必要ですが、製造業の現場ではラベルのないデータが多いため、教師なし学習の方が主に使われます。

k-meansを用いた教師なし学習の例

k-meansクラスタリングは、データをクラスターに分類し、孤立したクラスターを異常と見なす手法です。

“`python
from sklearn.cluster import KMeans

# データ生成
data = np.random.normal(0, 1, (1000, 2))
# 異常値を追加
data = np.vstack([data, [10, 10], [12, 12]])

# クラスタリング
kmeans = KMeans(n_clusters=2)
kmeans.fit(data)

# クラスタとデータの距離を計算
distances = kmeans.transform(data)
anomalies = np.where(np.min(distances, axis=1) > 3)[0]

print(f”Anomalies at indices: {anomalies}”)
“`

ここでは、クラスタリング後のデータとそれぞれのクラスターの重心との距離を利用して、異常を特定する例を示しています。

深層学習による異常検知

深層学習を用いた異常検知は、特にデータが複雑で高次元な場合に効果的です。
一般的なアプローチとしては、オートエンコーダーというニューラルネットワークを利用した手法があります。

オートエンコーダーを用いた実装例

オートエンコーダーは、入力データを中間表現にエンコードし、その中間表現から再構成するニューラルネットワークです。
再構成誤差が大きい場合、データは異常と見なされます。

“`python
from keras.layers import Input, Dense
from keras.models import Model
import numpy as np

# データ生成
data = np.random.normal(0, 1, (1000, 10))
# 異常値を追加
data = np.vstack([data, [10] * 10, [12] * 10])

# オートエンコーダーの定義
input_dim = data.shape[1]
encoding_dim = 2

input_img = Input(shape=(input_dim,))
encoded = Dense(encoding_dim, activation=’relu’)(input_img)
decoded = Dense(input_dim, activation=’sigmoid’)(encoded)

autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer=’adam’, loss=’mean_squared_error’)

# 学習
autoencoder.fit(data, data, epochs=50, batch_size=256, shuffle=True)

# 異常を検知
decoded_data = autoencoder.predict(data)
mse = np.mean(np.power(data – decoded_data, 2), axis=1)
threshold = 0.1
anomalies = np.where(mse > threshold)[0]

print(f”Anomalies at indices: {anomalies}”)
“`

この例では、オートエンコーダーを用いて、再構成誤差を基に異常検知を行っています。

実装上の考慮事項と課題

実際の異常検知の導入においては、データの前処理、正規化、特徴選択が重要です。
また、異常検知の結果を検証するための適切な評価指標も必要です。
製造業での実際のデータは、ノイズが多く、分布が複雑な場合が多いため、モデルの過学習に注意を払う必要があります。

異常検知を製造現場に実装する際の課題としては、異常の発生頻度が低いこと、異常と正常のデータのラベルがないこと、オンラインでの異常検知が求められることなどがあります。
これらの課題に対する対策として、データ収集の段階から異常ラベルを取得できるような体制を整えること、オンライン学習の手法を取り入れることが考えられます。

まとめ

Pythonを用いた異常検知は、製造業における品質管理やプロセスの最適化において不可欠なツールと言えます。
統計的手法、機械学習、深層学習といった異なるアプローチを理解し、データの特性に応じて適切な方法を選択することが重要です。
実装の際には、データの前処理やモデルの評価を十分に行い、現場のニーズに応じた異常検知システムを開発することが成功の鍵となります。

Pythonは、これらの手法の実装を迅速かつ柔軟に行うための強力なツールであり、異常検知に関する問題を解決するための優れた選択肢です。

資料ダウンロード

QCD調達購買管理クラウド「newji」は、調達購買部門で必要なQCD管理全てを備えた、現場特化型兼クラウド型の今世紀最高の購買管理システムとなります。

ユーザー登録

調達購買業務の効率化だけでなく、システムを導入することで、コスト削減や製品・資材のステータス可視化のほか、属人化していた購買情報の共有化による内部不正防止や統制にも役立ちます。

NEWJI DX

製造業に特化したデジタルトランスフォーメーション(DX)の実現を目指す請負開発型のコンサルティングサービスです。AI、iPaaS、および先端の技術を駆使して、製造プロセスの効率化、業務効率化、チームワーク強化、コスト削減、品質向上を実現します。このサービスは、製造業の課題を深く理解し、それに対する最適なデジタルソリューションを提供することで、企業が持続的な成長とイノベーションを達成できるようサポートします。

オンライン講座

製造業、主に購買・調達部門にお勤めの方々に向けた情報を配信しております。
新任の方やベテランの方、管理職を対象とした幅広いコンテンツをご用意しております。

お問い合わせ

コストダウンが利益に直結する術だと理解していても、なかなか前に進めることができない状況。そんな時は、newjiのコストダウン自動化機能で大きく利益貢献しよう!
(Β版非公開)

You cannot copy content of this page