異常検知アルゴリズムの実装例

異常検知アルゴリズムの実装例

異常検知アルゴリズムの実装例

異常検知は、データの中に通常とは異なるパターンを見つけることで、様々な問題を早期に発見し、対策を講じることを目的とした技術です。本記事では、いくつかの代表的な異常検知アルゴリズムを実装例を交えて解説します。

1. 移動平均法による異常検知

移動平均法は、過去のデータを使って平均値を計算し、その値と現在のデータとの差を計算することで、異常値を検出します。


// JavaScript の例
function detectAnomaly(data, windowSize) {
  const movingAverage = [];
  for (let i = 0; i < data.length; i++) {
    if (i < windowSize) {
      movingAverage.push(null); // 初期値をnullで埋める
    } else {
      const sum = data.slice(i - windowSize, i).reduce((a, b) => a + b, 0);
      const movingAverage = sum / windowSize;
      movingAverage.push(movingAverage);
    }
  }

  const differences = movingAverage.map((ma, i) => Math.abs(data[i] - ma));
  const threshold = differences.sort((a, b) => a - b)[Math.floor(differences.length / 2)]; // 中央値を使用

  const anomalies = differences.map((diff, i) => diff > threshold ? i : null);

  return anomalies;
}

// 例
const data = [10, 12, 15, 13, 16, 18, 20, 19, 22, 25];
const windowSize = 3;
const anomalies = detectAnomaly(data, windowSize);
console.log("Anomalies:", anomalies);

この例では、`windowSize` で指定された期間の移動平均を計算し、その平均値から現在のデータとの差を計算しています。差が一定の閾値を超えた場合に、その時点を異常値として検出します。

2. Zスコアによる異常検知

Zスコアは、データの標準偏差に基づいて、データが平均からどれだけ離れているかを表します。Zスコアが一定の閾値を超えた場合、その時点を異常値として検出します。


// JavaScript の例
function detectAnomalyZScore(data, standardDeviation) {
  const zScores = data.map(x => (x - Math.mean(data)) / standardDeviation);
  const threshold = Math.abs(zScores.sort((a, b) => a - b)[Math.floor(zScores.length / 2)]);
  const anomalies = zScores.map((z, i) => z > threshold ? i : null);
  return anomalies;
}

// 例
const data = [10, 12, 15, 13, 16, 18, 20, 19, 22, 25];
const standardDeviation = 3;
const anomalies = detectAnomalyZScore(data, standardDeviation);
console.log("Anomalies:", anomalies);

この例では、まずデータの標準偏差を計算し、各データに対してZスコアを計算します。Zスコアが一定の閾値を超えた場合に、その時点を異常値として検出します。

まとめ

本記事では、移動平均法とZスコアを用いた異常検知アルゴリズムの実装例を紹介しました。これらのアルゴリズムは、様々なデータ分析において、異常値を早期に検出するために役立ちます。それぞれのアルゴリズムの特性を理解し、適切な場面で適用することで、より効果的な分析が可能になります。

Comments

Popular posts from this blog

How to show different lines on WinMerge

パスワードハッシュ:bcrypt, scrypt, Argon2 徹底解説

GPIO入門:電子工作の基礎と活用例