Python で外れ値を検出するための分離フォレスト アルゴリズム

Python で外れ値を検出するための分離フォレスト アルゴリズム

外れ値の検出は、機械学習の分野における重要なタスクです。これは、データセットの一般的な傾向から逸脱した異常な観測値またはデータ ポイントを識別するために使用されます。外れ値検出に効果的なアルゴリズムの 1 つは、Isolation Forestアルゴリズムです。 

今日のブログでは、Isolation Forest アルゴリズムの基本を説明し、それを使用してPythonを使用してデータセット内の外れ値を検出する方法を説明します。このチュートリアルのビデオ全体は、このブログの下部でご覧いただけます

目次

分離フォレストアルゴリズムと箱ひげ図法 

以下に、外れ値検出用の 2 つのビジュアルを示します。外れ値検出のための隔離林 ML モデルを使用した場合と比較して、 使用した場合の視覚的表現に大きな違いがあることに注目してください。

Python で外れ値を検出するための分離フォレスト アルゴリズム

Isolation Forest ML モデルでは、IS 異常検出アルゴリズムによって検出された外れ値の割合は32.56% です。同じアルゴリズムを使用すると、データの残りの67.44%は正常範囲内に収まりますが、これは非常に重要です。私たちの目標は、 Pythonを使用してこの感度を微調整することです。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

従来の外れ値検出方法

外れ値を見つける従来の方法は、箱ひげ図法を使用することです。この方法では、IQR を使用して、データの予想範囲外にあるものを見つけます。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

この例では、ひげの上のこの 1 つの点が外れ値です。

Python で外れ値を検出するための分離フォレスト アルゴリズム

この視覚的なグラフを円グラフに変換すると、データ全体の 2.33%に相当する 1 つの特定の外れ値が得られます。

Python で外れ値を検出するための分離フォレスト アルゴリズム

このブログでは、Isolation Forest ML メソッドの使用方法、従来のメソッドに一致するように微調整する方法、感度を増減する方法を学びます。

隔離林アルゴリズムのデータセット

LuckyTemplates でデータセットを開きます。次に、「データの変換」をクリックします。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

このチュートリアルのデータセットが表示されます。これには、Date、number of UsersIndex およびIsolation Forest Outlier が含まれており、正常範囲の場合は出力 1、外れ値の場合は -1 が出力されます。 

また、 「Traditional Outlier」の列と、「 Isolation Forest Outlier」を反映する「IS Anomaly Detection」というタイトルの条件付き列もあります。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

2 番目のクエリは、すべてを組み合わせる方法を学習するデータ フレームを示しています。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

Python コード

[プロパティ]ペインには、実行中の 2 つのPythonスクリプトが表示されます。これらのPythonスクリプトの 1 つで Isolation Forest 出力を作成し、もう 1 つで従来の外れ値を生成します。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

隔離フォレストのアルゴリズム Python コード

「Python スクリプトを実行」をクリックしてコードを表示します。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

この Python コードでは、パンダを pd としてインポートし、Isolation Forest と呼ばれるものを使用します 

Python で外れ値を検出するための分離フォレスト アルゴリズム

分離フォレストは、ツリー構造に基づいて意思決定を行い、それが外れ値であるかどうかを決定するツリーベースのモデルです。特定の外れ値を見つけるために 2 つの異なる方法を使用するため、 これをアンサンブル モデルと呼びます。

また、デフォルトでデータセットを保持するデータセット変数をdfとして置き換えます。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

データセットを考えると、以下で強調表示されている 2 行のコードは必要ないので、これらの行を削除するだけで済みます。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

私たちがやっていることはモデルをインスタンス化することです。

モデルをIsolationForestとして保存し、 モデルにユーザーのデータを学習させます。次に、異常検出という新しい列を作成します。この列は、学習したすべてのデータを遡って、どれが外れ値であるべきかどうかを予測します。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

この関数では、汚染のデフォルトは0.5に設定されています。したがって、現時点では非常に敏感であり、多くの外れ値を探すことになります。先ほどの円グラフでは、32.56% という非常に高い範囲の外れ値が示されているのはこのためです。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

感度を低くするには、 IsolationForest関数にcontamination = .1を追加します。

Python で外れ値を検出するための分離フォレスト アルゴリズム

最後に、インデックスをリセットし、「OK」をクリックします。

結果には要約表が表示されます。「適用されたステップ」ペインに移動し、「df」をクリックします。

Python で外れ値を検出するための分離フォレスト アルゴリズム

出力では、[異常検出]列で外れ値を見つけることができます。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

また、従来の外れ値と比較してどのようなパフォーマンスを発揮するのかも確認したいと考えています。 

従来の外れ値 Python コード

別の Python スクリプトを実行します。この例では、Run Python script1 です。

Python で外れ値を検出するための分離フォレスト アルゴリズム

このコードは、第 1 四分位数と第 3 四分位数を使用して外れ値関数を追加します。q3 から q1を減算すると、四分位範囲 (IQR)が得られます。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

次の 2 行では、外れ値の条件を設定します。最初の行は、 1.5 * iqr未満のものはすべて負の値、またはより低い外れ値とみなされることを示していますこれは、従来の方法で外れ値を見つける方法でもあります。

また、データの最高点として外れ値が 1 つあることもわかります。これを考慮して、2 行目では、 q3 + 1.5 * iqrよりも高いデータ ポイントも外れ値とみなされると述べています。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

そのデータセットを返し、関数outliers(df, 'Users')を使用します。次に「OK」をクリックします。

Python で外れ値を検出するための分離フォレスト アルゴリズム

先ほどと同様の概要表が表示されます。 

[適用されたステップ]ペインに移動して[変更されたタイプ 1]をクリックすると、 [従来の外れ値] 列と[異常検出]列が並べて表示されます。後者では、1 と -1 を使用して外れ値を示すかどうかを示します。

Python で外れ値を検出するための分離フォレスト アルゴリズム

ただし、Python で日付を使用すると、日付が乱れて表示される場合があります。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

実行できることは、[列の追加]インデックスを使用して追加の列を作成することです。

Python で外れ値を検出するための分離フォレスト アルゴリズム

次に、Mergeを使用して前の列にIndexを追加すると、元の列/データ セット内のすべての情報を保存できます。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

すべてが揃ったら、コードを実行してビジュアルを更新できます。外れ値の汚染度を 0.5 から 0.1 に変更したため、グラフのこの部分がかなり縮小していることがわかります。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

ビジュアルに戻り、「変更を適用」をクリックします。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

異常検出がデータの 32.56% から 11.63% までどのように低下​​したかに注目してください。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

結果から分かるように、これは外れ値の検出を最適化する良い方法です。 

また、従来の方法を使用する場合、1.5 より低い値を使用する可能性がありますが、それでも1.5​​ x IQRが従来の方法であることに注意してください。 

Python で外れ値を検出するための分離フォレスト アルゴリズム

Python で外れ値を検出するための分離フォレスト アルゴリズム


LuckyTemplates での外れ値の検出と結果の表示
LuckyTemplates での動的な外れ値トリガー ポイントの作成
LuckyTemplates の異常検出機能: 仕組み

結論

Isolation Forest アルゴリズムを使用すると、異常な観測値を簡単に特定してデータセットから除外できるため、分析の精度が向上します。このチュートリアルでは、Python を使用して外れ値検出に Isolation Forest アルゴリズムを使用する方法について段階的なガイドを提供しました。これは、独自のプロジェクトでの実装を開始するのに役立ちます。

私たちが行ったのは、 Pythonコードを使用して異常を見つける非常に簡単な方法でした。汚染や、 Python のコード ページ を通じて学習できるその他の変数を変更することで、アルゴリズムをさらに最適化できます。

ではごきげんよう、


Python における Self とは: 実際の例

Python における Self とは: 実際の例

Python における Self とは: 実際の例

RでRDSファイルを保存してロードする方法

RでRDSファイルを保存してロードする方法

R の .rds ファイルからオブジェクトを保存および読み込む方法を学習します。このブログでは、R から LuckyTemplates にオブジェクトをインポートする方法についても説明します。

最初の N 営業日の再考 – DAX コーディング言語ソリューション

最初の N 営業日の再考 – DAX コーディング言語ソリューション

この DAX コーディング言語チュートリアルでは、GENERATE 関数の使用方法とメジャー タイトルを動的に変更する方法を学びます。

LuckyTemplates のマルチスレッド動的ビジュアル手法を使用したインサイトのショーケース

LuckyTemplates のマルチスレッド動的ビジュアル手法を使用したインサイトのショーケース

このチュートリアルでは、マルチスレッド動的ビジュアル手法を使用して、レポート内の動的データ視覚化から洞察を作成する方法について説明します。

LuckyTemplates のフィルター コンテキストの概要

LuckyTemplates のフィルター コンテキストの概要

この記事では、フィルター コンテキストについて説明します。フィルター コンテキストは、LuckyTemplates ユーザーが最初に学習する必要がある主要なトピックの 1 つです。

LuckyTemplates Online Service でアプリを使用する際の最良のヒント

LuckyTemplates Online Service でアプリを使用する際の最良のヒント

LuckyTemplates Apps オンライン サービスが、さまざまなソースから生成されたさまざまなレポートや分析情報の管理にどのように役立つかを示したいと思います。

時間の経過に伴う利益率の変化を分析する – LuckyTemplates と DAX を使用した分析

時間の経過に伴う利益率の変化を分析する – LuckyTemplates と DAX を使用した分析

LuckyTemplates でのメジャー分岐や DAX 数式の結合などの手法を使用して、利益率の変化を計算する方法を学びます。

DAX Studio でのデータ キャッシュのマテリアライゼーションのアイデア

DAX Studio でのデータ キャッシュのマテリアライゼーションのアイデア

このチュートリアルでは、データ キャッシュの具体化のアイデアと、それが結果を提供する際の DAX のパフォーマンスにどのように影響するかについて説明します。

LuckyTemplates を使用したビジネス レポート

LuckyTemplates を使用したビジネス レポート

これまで Excel を使用している場合は、ビジネス レポートのニーズに合わせて LuckyTemplates の使用を開始するのに最適な時期です。

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて