目次

Amazon Lookout for Equipment v2.0 完全ガイド(AI/ML - IoT)

初心者から実務者向けの包括的解説

Amazon Lookout for Equipment は、産業機器のセンサーデータから故障パターンを自動学習し、故障が発生する前に予知するマネージドサービスです。振動・温度・圧力などの複数センサーからの時系列データを分析して、異常パターンを検出し、計画外停止を事前に防ぎます。

⚠️ End of Support Notice: Amazon Lookout for Equipment は 2026年10月7日をもってサポート終了予定です。詳細参照。


目次

  1. 概要
  2. Lookout for Equipment が解決する課題
  3. 主な特徴
  4. アーキテクチャ
  5. コアコンポーネント
  6. 時系列異常検知アプローチ
  7. ワークフロー
  8. データ準備
  9. モデル学習
  10. 推論とリアルタイム監視
  11. IoT SiteWise との統合
  12. インサイト・分析
  13. 主要ユースケース
  14. 他サービスとの比較
  15. セキュリティとコンプライアンス
  16. コスト分析
  17. マイグレーション戦略
  18. ベストプラクティス
  19. トラブルシューティング
  20. End of Support Notice
  21. まとめ

概要

Lookout for Equipment とは

「産業設備の予知保全 ML サービス」 で、以下の特徴があります:

  • 多変量時系列異常検知: 複数センサーの相互作用を分析
  • 特定の故障モード学習: 「軸受け摩耗」「潤滑不足」など故障タイプごとに学習
  • リアルタイム推論: 新規センサーデータをストリーミング処理
  • 影響要因分析: どのセンサーが異常に寄与しているか自動分析
  • IoT SiteWise / S3 統合: 既存インフラから自動取込

選ぶべき理由

以下のいずれかに該当すれば Lookout for Equipment は最適:

  • 産業機器(回転機械・ポンプ・コンプレッサー)の故障を予知したい
  • センサーデータは豊富だが、故障時刻ラベルが手動作業になっている
  • 計画外停止による生産ロス・修理コストを削減したい
  • 複数センサーの複合的な異常パターンを検出したい
  • IoT SiteWise で既にセンサー収集基盤がある

Lookout for Equipment が解決する課題

課題 従来の方法 Lookout for Equipment
故障予知 閾値アラート(見落とし多い) ML による多変量異常検知
ML 構築コスト 専門エンジニア数ヶ月 マネージド(ローコード)
複数センサー分析 各センサー個別監視 複合パターン自動検出
計画外停止 年間 100+ 時間 50-80% 削減可
修理コスト 緊急修理(高額) 計画修理(低額)
故障モード特定 現場経験則頼り データドリブン原因特定
環境学習 モデル再構築困難 自動適応

主な特徴

✅ 多変量時系列異常検知

  • 単一センサー閾値では検知不可な複合異常を検出
  • センサー間相互作用を学習

✅ 特定の故障モード学習

# モデル学習時に故障モードのラベルを付与可

training_data = {
    'start_time': '2024-01-01 10:00',
    'end_time': '2024-01-01 11:30',
    'failure_mode': 'bearing_wear'  # 軸受け摩耗
}

✅ 影響コンポーネント分析

  • 異常スコアに最も寄与しているセンサーを特定
  • メンテナンス対象を絞り込み可能

✅ リアルタイムストリーミング推論

  • IoT Core / Kinesis から自動取込
  • 秒単位の推論実行

✅ 長期記録の異常検知

  • 数年単位の履歴データから傾向学習
  • 緩やかな劣化の検出

アーキテクチャ

センサーデバイス
    ├── 振動センサー(加速度計)
    ├── 温度センサー
    ├── 圧力センサー
    ├── 流量センサー
    └── 電流センサー
         ↓ IoT Core / Kinesis / OPC-UA
         
S3 データレイク
    ├── Raw センサーデータ(CSV)
    ├── パーティショニング(日/時間別)
    └── アーカイブ(Glacier)

Lookout for Equipment
    ├── データベース(タイムシリーズ)
    ├── ML 学習エンジン
    └── リアルタイム推論
         ↓
異常スコア(0.0-1.0)
    ↓
SNS / Lambda / CloudWatch
    ↓
メンテナンス指示 / 部品発注 / 停止計画

コアコンポーネント

1. Dataset(データセット)

import boto3

client = boto3.client('lookoutequipment')

# データセット作成
response = client.create_dataset(
    DatasetName='pump-vibration-dataset',
    DatasetSchema={
        'InlineDataSchema': {
            'NamedColumnIndexes': {
                'Timestamp': 0,
                'ComponentId': 1,
                'Vibration_X': 2,
                'Vibration_Y': 3,
                'Vibration_Z': 4,
                'Temperature': 5,
                'Pressure': 6
            }
        }
    },
    ServerSideKmsKeyId='arn:aws:kms:region:account:key/key-id'
)

# CSV データをアップロード
response = client.start_data_ingestion_job(
    DatasetName='pump-vibration-dataset',
    IngestionInputConfiguration={
        'S3InputConfiguration': {
            'Bucket': 'my-data-bucket',
            'Prefix': 'sensor-data/pump/'
        }
    }
)

2. Model(モデル)

# モデル作成・学習開始
response = client.create_model(
    DatasetName='pump-vibration-dataset',
    ModelName='pump-failure-predictor-v1',
    ClientToken='unique-token-001',
    
    # (オプション)故障モードラベル
    LabelsInputConfiguration={
        'S3InputConfiguration': {
            'Bucket': 'my-data-bucket',
            'Prefix': 'labels/pump/'
        }
    },
    
    # リソース設定
    DataPreProcessingConfiguration={
        'TargetSamplingRate': 'PT5S'  # 5 秒ごとにサンプリング
    }
)

model_arn = response['ModelArn']

# 学習ステータス確認
response = client.describe_model(
    ModelName='pump-failure-predictor-v1'
)
# Status: TRAINING / TRAINED / FAILED

3. Label(故障モードラベル)

{
    "data": [
        {
            "start": "2024-02-15T10:30:00Z",
            "end": "2024-02-15T12:00:00Z",
            "label": "bearing_wear"
        },
        {
            "start": "2024-03-20T08:15:00Z",
            "end": "2024-03-20T09:45:00Z",
            "label": "lubrication_failure"
        },
        {
            "start": "2024-04-05T14:20:00Z",
            "end": "2024-04-05T16:30:00Z",
            "label": "cavitation"
        }
    ]
}

4. InferenceScheduler(推論スケジューラー)

# リアルタイム推論を有効化
response = client.create_inference_scheduler(
    ModelName='pump-failure-predictor-v1',
    InferenceSchedulerName='pump-realtime-monitoring',
    
    DataInputConfiguration={
        'S3InputConfiguration': {
            'Bucket': 'incoming-sensor-data',
            'Prefix': 'realtime/'
        }
    },
    
    DataOutputConfiguration={
        'S3OutputConfiguration': {
            'Bucket': 'inference-results',
            'Prefix': 'predictions/'
        }
    },
    
    RoleArn='arn:aws:iam::account:role/LookoutEquipmentRole',
    
    # 推論実行頻度
    DataUploadFrequency='PT5M',  # 5 分ごと
    
    # オフセット時間設定(データ受信待機)
    DataDelayOffsetInMinutes=5
)

# 推論スケジューラー開始
response = client.start_inference_scheduler(
    InferenceSchedulerName='pump-realtime-monitoring'
)

5. Anomaly Detection Result

# 推論結果を S3 から取得
s3_client = boto3.client('s3')

response = s3_client.get_object(
    Bucket='inference-results',
    Key='predictions/2025-04-27/results.json'
)

results = json.loads(response['Body'].read())

# 推論結果構造
{
    'anomaly': 0.85,  # 異常スコア(0.0-1.0)
    'anomaly_prediction': 'ANOMALOUS',  # ANOMALOUS / NORMAL
    'diagnostics': {
        'Vibration_X': 0.92,  # 各センサーの寄与度
        'Temperature': 0.72,
        'Pressure': 0.55,
        'Vibration_Y': 0.10
    },
    'timestamp': '2025-04-27T10:30:00Z',
    'component_id': 'PUMP_001'
}

時系列異常検知アプローチ

多変量オートエンコーダー

正常運転データ(過去データ)
    ↓
Encoder: 高次元 → 低次元特徴空間
    ↓ 潜在空間
Decoder: 低次元 → 高次元(復元)
    ↓
再構成誤差を計算

正常データ:
    再構成誤差: 低い(同じパターンに復元)

異常データ:
    再構成誤差: 高い(復元失敗)
    → IsAnomalous = true

長期依存性の学習(LSTM)

# 時系列の長期パターンを学習

入力: 過去 168 時間(1 週間)のセンサーデータ
    ↓
LSTM エンコーダー: 時系列特徴抽出
    ↓
LSTM デコーダー: 次の 1 時間を予測
    ↓
予測誤差が異常スコア

多変量ガウス分布

正常運転: 複数センサーの同時分布
    μ(平均)= [100, 50, 20]  # [Vibration, Temp, Pressure]
    Σ(共分散) = [[...]]     # センサー間相関

新規データが分布外なら異常判定

ワークフロー

フェーズ 1: 過去データ準備(1-4 週間)

タスク:
① 過去 3-12 ヶ月のセンサーデータを S3 にアップロード
② 故障時刻を CSV で記録(オプション)
③ データ品質確認(欠損値・外れ値チェック)

結果:
  S3 内の構造化データセット完成

フェーズ 2: データセット登録(1 日)

response = client.create_dataset(
    DatasetName='production-equipment',
    ...
)

response = client.start_data_ingestion_job(
    DatasetName='production-equipment',
    IngestionInputConfiguration={...}
)

フェーズ 3: モデル学習(1-3 時間)

response = client.create_model(
    DatasetName='production-equipment',
    ModelName='failure-predictor-v1'
)

# 完了まで待機
waiter = client.get_waiter('model_trained')
waiter.wait(ModelName='failure-predictor-v1')

フェーズ 4: モデル評価(30 分)

response = client.describe_model(
    ModelName='failure-predictor-v1'
)

metrics = response['ModelMetrics']
print(f"Precision: {metrics['Precision']}")
print(f"Recall: {metrics['Recall']}")
print(f"F1-Score: {metrics['F1Score']}")

フェーズ 5: 推論スケジューラーデプロイ(1 日)

response = client.create_inference_scheduler(
    ModelName='failure-predictor-v1',
    ...
)

response = client.start_inference_scheduler(
    InferenceSchedulerName='realtime-monitoring'
)

フェーズ 6: 運用監視(継続)

  • ① CloudWatch ダッシュボード監視
  • ② 異常アラート確認
  • ③ 月次レポート生成
  • ④ 3-6 ヶ月ごとにモデル再学習

データ準備

推奨データフォーマット

Timestamp,ComponentId,Vibration_X_mps2,Vibration_Y_mps2,Vibration_Z_mps2,Temperature_C,Pressure_bar,Current_A
2024-01-01 00:00:00,PUMP_001,0.2,0.15,0.18,45.2,3.5,12.3
2024-01-01 00:01:00,PUMP_001,0.21,0.16,0.19,45.3,3.5,12.2
2024-01-01 00:02:00,PUMP_001,0.22,0.17,0.20,45.4,3.5,12.1
...

データ品質ガイドライン

時間粒度: 1 分〜 1 時間(推奨)
  - 1 秒以下: 過剰(ストレージ浪費)
  - 1 日以上: 不足(異常見落とし)

サンプル数: 最少 5,000 行(推奨 100,000+ 行)
  - 3 ヶ月分以上の継続データ
  - 季節変動カバー

欠損処理:
  ✅ 線形補間(短期欠損)
  ❌ 前値保持(推奨しない)
  ❌ ゼロ埋め(異常パターン導入)

外れ値処理:
  ✅ IQR 法で検出・マーク
  ❌ 削除(情報損失)

S3 ディレクトリ構造

my-bucket/
├── sensor-data/
│   ├── 2024/
│   │   ├── 01/
│   │   │   ├── pump_001_data.csv
│   │   │   └── pump_002_data.csv
│   │   ├── 02/
│   │   └── ...
│   └── 2025/
├── labels/
│   ├── failure_events.json
│   └── maintenance_records.csv
└── models/
    ├── failure_predictor_v1/
    └── failure_predictor_v2/

モデル学習

学習時間見積もり

データサイズ | センサー数 | 学習時間 | コスト
  3 ヶ月     | 5        | 30分    | $5
  6 ヶ月     | 8        | 60分    | $10
  12 ヶ月    | 10       | 120分   | $20
  24 ヶ月    | 15       | 180分   | $30

精度改善のイテレーション

# Iteration 1
client.create_model(
    DatasetName='production-equipment',
    ModelName='v1'
)
# 評価: F1-Score = 0.78

# 改善: 故障モードラベルを追加
# Iteration 2
client.create_model(
    DatasetName='production-equipment',
    ModelName='v2',
    LabelsInputConfiguration={...}
)
# 評価: F1-Score = 0.85(改善)

# 改善: データ品質向上・外れ値除去
# Iteration 3
client.create_model(
    DatasetName='production-equipment-v2',
    ModelName='v3'
)
# 評価: F1-Score = 0.91(さらに改善)

推論とリアルタイム監視

リアルタイム推論フロー

新規センサーデータ(5 分ごと)
    ↓ S3 にアップロード
    ↓ InferenceScheduler が自動取込
    ↓ Lookout for Equipment で推論
    ↓ 結果を S3 に出力
    ↓ Lambda が結果を読込
    ↓ 異常スコア > 0.7 なら SNS 送信
    ↓ メンテナンスチームがアラート受信

Lambda 統合例

import boto3
import json
import pandas as pd

lookout = boto3.client('lookoutequipment')
s3 = boto3.client('s3')
sns = boto3.client('sns')
dynamodb = boto3.resource('dynamodb')

def lambda_handler(event, context):
    """Lookout for Equipment 推論結果を処理"""
    
    # S3 イベントから推論結果ファイルを取得
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    
    # 推論結果を読込
    obj = s3.get_object(Bucket=bucket, Key=key)
    results_df = pd.read_json(obj['Body'])
    
    # 異常判定
    anomalous_rows = results_df[results_df['anomaly'] > 0.7]
    
    if len(anomalous_rows) > 0:
        for _, row in anomalous_rows.iterrows():
            # DynamoDB にアラート記録
            table = dynamodb.Table('equipment-alerts')
            table.put_item(
                Item={
                    'equipment_id': row['component_id'],
                    'timestamp': row['timestamp'],
                    'anomaly_score': float(row['anomaly']),
                    'top_factors': ','.join([
                        f"{k}:{v:.2f}" 
                        for k, v in row['diagnostics'].items()
                        if v > 0.5
                    ])
                }
            )
            
            # SNS でメンテナンスチームに通知
            sns.publish(
                TopicArn='arn:aws:sns:region:account:maintenance-alerts',
                Subject=f'Equipment Anomaly Detected: {row["component_id"]}',
                Message=f'''
Anomaly Score: {row['anomaly']:.2%}
Equipment: {row['component_id']}
Timestamp: {row['timestamp']}
Top Contributing Sensors: {row['diagnostics']}
Recommended Action: Schedule preventive maintenance
                '''
            )
    
    return {
        'statusCode': 200,
        'body': json.dumps({
            'processed_rows': len(results_df),
            'anomalous_rows': len(anomalous_rows)
        })
    }

CloudWatch ダッシュボード

import boto3

cloudwatch = boto3.client('cloudwatch')

# カスタムメトリクスを送信
cloudwatch.put_metric_data(
    Namespace='Equipment/Monitoring',
    MetricData=[
        {
            'MetricName': 'AnomalyScore',
            'Value': 0.82,
            'Unit': 'None',
            'Dimensions': [
                {'Name': 'EquipmentId', 'Value': 'PUMP_001'},
                {'Name': 'ComponentId', 'Value': 'bearing'}
            ]
        },
        {
            'MetricName': 'FailureProbability',
            'Value': 0.45,
            'Unit': 'Percent',
            'Dimensions': [
                {'Name': 'EquipmentId', 'Value': 'PUMP_001'}
            ]
        }
    ]
)

IoT SiteWise との統合

データパイプライン

OPC-UA サーバー(工場)
    ↓ IoT SiteWise Gateway
    ↓ IoT SiteWise(クラウド)
    ↓ 自動エクスポート → S3
    ↓ Lookout for Equipment
    ↓ 推論結果

IoT SiteWise からのデータ抽出

import boto3

iotsitewise = boto3.client('iotsitewise')
s3 = boto3.client('s3')

# アセット ID 取得
response = iotsitewise.list_assets(
    filter='NAME:pump_01'
)

asset_id = response['assetSummaries'][0]['id']

# プロパティデータを取得
response = iotsitewise.get_asset_property_value_history(
    assetId=asset_id,
    propertyId='vibration-x',
    startDate=1704067200,  # 2024-01-01
    endDate=1712102400    # 2024-04-03
)

# S3 に CSV 出力
csv_data = convert_to_csv(response['assetPropertyValueHistory'])
s3.put_object(
    Bucket='lookout-training-data',
    Key='sitewise-export/pump_01.csv',
    Body=csv_data
)

インサイト・分析

診断スコア(Diagnostics)

{
    "anomaly_score": 0.87,
    "diagnostics": {
        "Vibration_X": 0.95,      // 最も寄与度が高い
        "Temperature": 0.72,
        "Vibration_Y": 0.68,
        "Pressure": 0.45,         // 寄与度が低い
        "Current": 0.15
    },
    "interpretation": "軸受け摩耗の可能性が高い。X 軸振動が急増。"
}

予兆シグナルの段階

Normal (Score 0.0-0.3)
    → 通常稼働
    
Caution (Score 0.3-0.6)
    → 初期異常を検出
    → メンテナンス予定を検討
    
Warning (Score 0.6-0.8)
    → 急速な劣化
    → 2-4 週間以内に部品交換推奨
    
Critical (Score 0.8-1.0)
    → 故障直前
    → 直近 1 週間の停止計画推奨

根本原因分析(RCA)

# 異常が発生した時刻から遡る

異常発見: 2025-04-27 14:30
異常スコア: 0.92

遡り分析:
2025-04-20 08:00: Score 0.12(初期兆候)
2025-04-22 16:00: Score 0.35(加速化開始)
2025-04-25 12:00: Score 0.65(警告段階)
2025-04-27 14:30: Score 0.92(危機的)

期間: 7 日間で 0.120.92

原因仮説:
① 潤滑剤枯渇(最確度)
② 軸受け摩耗(確度高)
③ 偏心(確度中)

主要ユースケース

1. 回転機械(モーター・ポンプ・ファン)

  • 入力: 振動センサー(X/Y/Z)、温度
  • 処理: 多変量異常検知
  • 出力: 軸受け摩耗 / バランス不良 / 共振検出
  • 効果: 計画外停止を 60-80% 削減

2. コンプレッサー監視

  • 入力: 圧力、吐出温度、吸入温度、流量
  • 処理: 複合異常パターン検出
  • 出力: 冷却能力低下 / 弁漏れ / 潤滑不足検出
  • 効果: エネルギー効率の最大 5% 向上

3. 風力発電タービン

  • 入力: ギアボックス温度、ブレード振動、発電出力
  • 処理: 長期トレンド + 急速異常
  • 出力: 計画メンテナンスの 2-4 週間前予知
  • 効果: タービン稼働率 98% 達成

4. 油圧システム

  • 入力: 油温度、圧力、流量、粘度
  • 処理: マルチセンサー相互作用学習
  • 出力: ポンプ摩耗 / フィルタ詰まり検出
  • 効果: 油交換サイクルを 30% 延長

5. 化学・石油プラント

  • 入力: 装置別の複数センサー(温度・圧力・流量)
  • 処理: 設備別モデル構築
  • 出力: リアルタイムプロセス安全管理
  • 効果: 事故リスクを 40% 低減

他サービスとの比較

Lookout for Equipment vs SageMaker

観点 Lookout for Equipment SageMaker
セットアップ時間 1-2 週間 1-2 ヶ月
必要スキル 最小限 Python / ML
カスタマイズ 限定的 高度に可能
推論レイテンシ 実時間(5 分) 秒単位(API)
多変量異常検知 ✅ 自動 手動実装
価格 $0.80/センサー 従量課金
採用理由 予知保全向け 高度なカスタマイズ

Lookout for Equipment vs Monitron

観点 Lookout for Equipment Monitron
セットアップ データパイプライン必須 ハードウェア込み
センサー 既存センサー対応 Monitron センサー限定
スケーラビリティ 高度に可能 限定的
カスタマイズ 高い 限定的
初期投資 低い($0) 高い($15K+)
セットアップ難度 中程度 低い
採用理由 大規模 / 既存センサー シンプル / ターンキー

セキュリティとコンプライアンス

データ暗号化

# S3 に KMS 暗号化を適用
s3 = boto3.client('s3')

s3.put_bucket_encryption(
    Bucket='equipment-data',
    ServerSideEncryptionConfiguration={
        'Rules': [
            {
                'ApplyServerSideEncryptionByDefault': {
                    'SSEAlgorithm': 'aws:kms',
                    'KMSMasterKeyID': 'arn:aws:kms:region:account:key/key-id'
                }
            }
        ]
    }
)

# インターネット経由通信は TLS 1.2

アクセス制御(IAM)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lookoutequipment:DescribeModel",
                "lookoutequipment:ListInferenceSchedulers"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "lookoutequipment:DeleteModel",
                "lookoutequipment:DeleteDataset"
            ],
            "Resource": "*"
        }
    ]
}

コスト分析

課金体系

項目 単価
モデル学習 $0.80/センサー/モデル
推論(リアルタイム) $0.35/センサー/月
S3 ストレージ 標準 S3 料金

コスト最適化例

設備数: 10 台
センサー数: 8 個/設備(80 センサー)

初期投資:
  モデル学習: $0.80 × 80 = $64(初回のみ)

月間コスト:
  推論: $0.35 × 80 = $28/月
  S3 保存: 50GB × $0.023 = $1.15/月
  合計: $29.15/月

年間コスト:
  初年度: $64 + ($29.15 × 12) = $414.80
  以降: $349.80/年

ROI:
  従来: 検査員 $3,000/月
  Lookout: $29/月
  削減: $2,971/月
  初年度 ROI: 90 日(ブレークイーブン)

マイグレーション戦略

2026年10月7日への対応

推奨移行先:

  1. AWS IoT SiteWise – 多変量異常検知(2025年7月新機能)
  2. SageMaker – カスタムモデル
  3. Bedrock – LLM ベース分析

移行シナリオ

シナリオ 1: IoT SiteWise への移行

# Lookout → IoT SiteWise 多変量異常検知

iotsitewise = boto3.client('iotsitewise')

# アセットモデルに異常検知ルールを設定
response = iotsitewise.create_asset_model(
    assetModelName='equipment-anomaly-detector',
    assetModelProperties=[
        {
            'name': 'vibration_anomaly',
            'dataType': 'DOUBLE',
            'type': {
                'metric': {
                    'expression': 'sqrt(x^2 + y^2 + z^2) > threshold'
                }
            }
        }
    ]
)

シナリオ 2: SageMaker Autopilot

# 自動 ML で時系列予測モデル構築

sagemaker = boto3.client('sagemaker')

response = sagemaker.create_auto_ml_job(
    AutoMLJobName='equipment-failure-autopilot',
    InputDataConfig=[
        {
            'DataSource': {
                'S3DataSource': {
                    'S3DataType': 'S3Prefix',
                    'S3Uri': 's3://bucket/training-data/'
                }
            }
        }
    ],
    OutputDataConfig={'S3OutputPath': 's3://bucket/output/'},
    ProblemType='Regression',  # または TimeSeriesForecastingAutomated
    Role='arn:aws:iam::account:role/SageMakerRole'
)

ベストプラクティス

1. データ品質

✅ 推奨:
  - 最低 3-6 ヶ月分のデータ
  - センサー数: 5-15 個の多変量
  - サンプリング: 1-60 分ごと
  - 欠損率: < 5%

❌ 非推奨:
  - 1 ヶ月分未満
  - 単一センサーのみ
  - 秒単位(過剰)
  - 欠損率 > 20%

2. モデル選択

設備タイプ別推奨:

回転機械 → 多変量異常検知(デフォルト)
 → 振動 + 温度で高精度

往復機械 → 周期性考慮モデル
 → 温度 + 流量で検出

静止装置 → トレンド分析
 → 長期変化の追跡

3. 運用監視

# 月次モデル性能レビュー

response = client.describe_model(
    ModelName='failure-predictor-v1'
)

# 精度が 0.85 未満なら再学習トリガー
if response['ModelMetrics']['F1Score'] < 0.85:
    # 新データを追加して再学習
    client.create_model(
        DatasetName='equipment-data-v2',
        ModelName='failure-predictor-v2'
    )

トラブルシューティング

精度が低い(F1 < 0.75)

① データ品質確認
   → 欠損値が多すぎないか
   → 外れ値が含まれていないか

② 故障モードラベルの追加
   → 手動で故障時刻を記録
   → 異なる故障タイプを区別

③ モデル再学習
   → より長期間のデータを使用
   → センサー数を増加

推論スケジューラーが失敗

エラー: "DataUploadFrequencyMismatchError"
→ データアップロード頻度と推論周期を一致させる

エラー: "InsufficientDataException"
→ 連続したセンサーデータが不足
→ S3 に日次アップロードが漏れていないか確認

エラー: "ModelNotDeployedError"
→ モデル学習完了後、推論スケジューラーを開始

End of Support Notice

重要なお知らせ

Amazon Lookout for Equipment は 2026年10月7日をもってサポート終了予定です。

新規顧客: 2025年10月7日以降の利用不可 既存顧客: 2026年10月7日までサポート継続

IoT SiteWise への推奨移行

2025 年 7 月、AWS IoT SiteWise は多変量異常検知機能をネイティブサポートするようになりました。

# IoT SiteWise での異常検知設定
iotsitewise = boto3.client('iotsitewise')

response = iotsitewise.create_asset_model_composite_model(
    assetModelId='model-id',
    assetModelCompositeModelName='anomaly-detection',
    assetModelCompositeModelType='AWS/ANOMALY_DETECTION'
)

まとめ

Amazon Lookout for Equipment は 「産業設備の予知保全 ML サービス」 です。

強み

  • 多変量時系列異常検知が自動
  • IoT データパイプラインとの統合
  • 特定の故障モード学習対応
  • マネージド(ローコード)

制約

  • カスタマイズ機能は限定的
  • 2026年10月7日でサポート終了
  • 複雑なビジネスロジックには不向き

選択基準

  • ✅ 産業設備の故障予知を実現したい
  • ✅ 複数センサーの相互作用を学習したい
  • ✅ 既に IoT インフラがある
  • ❌ 2026年以降の長期運用を計画

公式ドキュメント


最終更新: 2025年4月27日 バージョン: v2.0