新着記事一覧

IT・プログラミング Python

2024/4/21

【Python】Pythonでの自然言語処理(日本語)

こちらの記事では、自然言語処理についてまとめています。 Contents1 自然言語処理とは?2 自然言語処理の実装 自然言語処理とは? 自然言語とは、日本語や英語のような自然発生的に生まれた言語です。日常的に使用している自然言語について、言葉が持つ意味を解析し処理します。活用事例としては、チャットボット、音声認識AI、文字認識(手書き文字をカメラが認識し文字データへと変換する技術)、検索エンジン、翻訳、感情分析、文章要約などがあります。 文章の意味を機械に理解させるには、単語分割を行う必要があります。手 ...

続きを読む

IT・プログラミング Python

2024/4/8

【Python】統計学的モデル 時系列分析の実装

こちらの記事では、時系列分析の実装についてまとめています。 Contents1 時系列分析とは?2 定常性とは?3 時系列データの分析方法4 SARIMAモデルの実装 時系列分析とは? 時系列分析では、時間経過とともに変化する時系列データを扱います。時系列データの例としては、毎時間の気温、株価の推移等がこれにあたります。売上予測、来店者予測等、ビジネスにおいて重要な分析技術です。 時系列データには以下3種類があります。 1.トレンドデータの長期的な傾向。時間の経過とともに値が上昇・下降している時系列データ ...

続きを読む

IT・プログラミング Python

2024/4/1

【Python】主成分分析の実装

こちらの記事では、主成分分析を実装していきます。 Contents1 主成分分析とは2 主成分分析の手順について 主成分分析とは 主成分分析とは、次元削減を行う時によく使う手法です。例えば、いくつかの特徴量があるデータを2次元データに変換すると、できるだけ情報を保ったまま2軸での描画が可能になり、全てのデータを見やすく示すことができます。 主成分分析の実用例として、製品やサービスのスコアリングや比較(1次元に圧縮)、データの可視化(2,3次元に圧縮)、回帰分析の前処理などが挙げられます。 主成分分析の手順 ...

続きを読む

IT・プログラミング Python

2024/4/1

【Python】カーネル主成分分析の実装

こちらの記事では、カーネル主成分分析の手順についてまとめています。 Contents1 カーネル主成分分析とは2 カーネル主成分分析の実装 カーネル主成分分析とは 回帰分析等、機械学習の多くのアルゴリズムは線形分離できるデータが与えられることを前提としていますが、現実的には線形分離できないデータ、つまり非線形分離する必要があるデータがほとんどです。非線形分離する必要があるデータに対処できるのが、カーネル主成分分析(kernel PCA)です。 カーネル主成分分析ではN×M(データの数×特徴の種類)のデータ ...

続きを読む

IT・プログラミング Python

2024/3/29

【Python】機械学習(教師なし) クラスタリング DBSCANの実装

こちらの記事では、機械学習(教師なし)の非階層的クラスタリング DBSCAN法についてまとめていきます。 Contents1 クラスタリングとは2 DBSCANでの実装 クラスタリングとは データをクラスター(塊)に分割する操作のことです。クラスタリングの中でも階層的クラスタリングと、非階層的クラスタリングの2種に分けられています。 1.階層的クラスタリングデータの中から最も似ている組み合わせを探し出して、順番にクラスターにしていく方法です。最終的に全データをまとめるクラスターに行くつけば終了です。 2. ...

続きを読む

IT・プログラミング Python

2024/3/28

【Python】機械学習(教師なし) クラスタリング k-meansの実装

こちらの記事では、機械学習(教師なし)の非階層的クラスタリング k-means法についてまとめていきます。 Contents1 クラスタリングとは2 k-means法での実装 クラスタリングとは データをクラスター(塊)に分割する操作のことです。クラスタリングの中でも階層的クラスタリングと、非階層的クラスタリングの2種に分けられています。 1.階層的クラスタリングデータの中から最も似ている組み合わせを探し出して、順番にクラスターにしていく方法です。最終的に全データをまとめるクラスターに行くつけば終了です。 ...

続きを読む

IT・プログラミング Python

2024/3/28

【Python】機械学習のデータ前処理 外れ値の扱いについて

外れ値の処理についてまとめています。 Contents1 外れ値とは?2 外れ値の検知方法について 外れ値とは? 外れ値とは、他のデータと著しく乖離したデータのことを指します。データ内に外れ値が混在していると、分析結果に影響を及ぼしたり、機械学習モデルの学習過程で影響がでてしまい学習が進みにくくなる、などの影響が出てしまいます。 外れ値の検知方法について 外れ値の検知方法について、可視化、LOF(Local Outlier Factor )、Isolation Forestの3つの手法について紹 ...

続きを読む

IT・プログラミング Python

【Python】機械学習のデータ前処理 外れ値の扱いについて

外れ値の処理についてまとめています。

外れ値とは?

外れ値とは、他のデータと著しく乖離したデータのことを指します。
データ内に外れ値が混在していると、分析結果に影響を及ぼしたり、機械学習モデルの学習過程で影響がでてしまい学習が進みにくくなる、などの影響が出てしまいます。

外れ値の検知方法について

外れ値の検知方法について、可視化、LOF(Local Outlier Factor )、Isolation Forestの3つの手法について紹介します。

可視化による外れ値の検知

外れ値があるかどうか、まず可視化して確かめてみるのがよいです。

#必要なライブラリをインポートする
import pandas as pd
import numpy as np
import openpyxl
import matplotlib.pyplot as plt
import seaborn as sns

#Excelを読み込む
data = pd.read_excel("sampledata_outlier.xlsx")

#タイムを箱ひげ図にて可視化する
sns.boxplot(y=data["time"])

#joinplotで散布図とヒストグラムを描画する
#今回は、x軸にtime、y軸にdistanceとして可視化をしてみる
x_data = data["time"]
y_data = data["distance"]
sns.jointplot(x=x_data, y=y_data, data=data)

可視化の手法について、箱ひげ図、散布図+ヒストグラムでの描画を行ってみます。

#必要なライブラリをインポートする
import pandas as pd
import numpy as np
import openpyxl
import matplotlib.pyplot as plt
import seaborn as sns

#Excelを読み込む
data = pd.read_excel("sampledata_outlier.xlsx")

まず、必要なライブラリをインポートし、データを読み込みます。今回は以下のようなサンプルデータを準備しました。3カラムのデータです。

#timeカラムを箱ひげ図にて可視化する
sns.boxplot(y=data["time"])

timeカラムを箱ひげ図で描画してみます。〇が外れ値です。

#joinplotで散布図とヒストグラムを描画する
#今回は、x軸にtime、y軸にdistanceとして可視化をしてみる
x_data = data["time"]
y_data = data["distance"]
sns.jointplot(x=x_data, y=y_data, data=data)

データが二次元の場合は、散布図とヒストグラムを同時に描画してくれるjointplotが使えます。
今回は、x軸にtime, y軸にdistanceを設定し可視化してみます。目視で確認すると、タイムに外れ値がありそうです。

LOF(Local Outlier Factor )による外れ値の検知

LOFはデータの密度に基づいて外れ値を検知する方法です。LOFには、近くにデータ点が少ないのが外れ値であると考える、k個の近傍点を使ってデータの密度を推定する、密度が周囲と相対的に低い点を外れ値と判定する、という特徴があります。
Scikit-learnにて簡単に検知することができます。

#必要なライブラリをインポートする
import pandas as pd
import numpy as np
import openpyxl
from sklearn.neighbors import LocalOutlierFactor

#Excelを読み込む
data = pd.read_excel("sampledata_outlier.xlsx")

#LocalOutlierFactorでパラメータを指定し(何個の近傍点を使うか)、分類モデルを作成する
clf = LocalOutlierFactor(n_neighbors=3)
predictions= clf.fit_predict(data)
data[predictions == -1]

可視化と同じデータを使って試してみます。

#必要なライブラリをインポートする
import pandas as pd
import numpy as np
import openpyxl
from sklearn.neighbors import LocalOutlierFactor

#Excelを読み込む
data = pd.read_excel("sampledata_outlier.xlsx")

必要なライブラリをインポートしてExcelを読み込みます。

#LocalOutlierFactorでパラメータを指定し(何個の近傍点を使うか)、分類モデルを作成する
clf = LocalOutlierFactor(n_neighbors=3)
predictions= clf.fit_predict(data)
data[predictions == -1]

LocalOutlierFactor関数で、何個の近傍点(n_neighbors)を使うかパラメータ指定をして分類モデルを作成します。この例では3で実行しました。
fit_predictでデータを学習させて外れ値を検出します。
predictionの返り値は以下のようになります。外れ値とみなしたデータ行では値が-1に、正常なものは1が返ってきます。

data[predictions == -1]で、外れ値と判定された行を取得できます。

Isolation Forestによる外れ値の検知

Isolation Forestは、計算が複雑ではなく省メモリ、大規模なデータでも計算しやすい、というメリットがあります。
特定のデータ項目でランダムにデータを分割→別のデータ項目でランダムにデータ分割→これ以上分割できないデータを2回の分割で作成できたのでこれをdepth=2として記録→これらを繰り返し各点の深さの平均を計算するといったアルゴリズムで外れ値を検出します。
外れ値ほど深さの平均が小さい値となるため、深さが小さいデータを外れ値として判定することができます。

#必要なライブラリをインポートする
import pandas as pd
import numpy as np
import openpyxl
from sklearn.ensemble import IsolationForest

#Excelを読み込む
data = pd.read_excel("sampledata_outlier.xlsx")

#Isolation Forestで外れ値を検知する
clf = IsolationForest()
clf.fit(data)
prediction = clf.predict(data)
data[prediction == -1]

必要なライブラリをインポートしてExcelを読み込みます。

#Isolation Forestで外れ値を検知する
clf = IsolationForest()
clf.fit(data)
prediction = clf.predict(data)
data[prediction == -1]

Isolation Forestモデルを作成し、元のデータに適合させ、predictメソッドを使用して外れ値を予測します。予測された値がpredictionに返ってきます。外れ値とみなしたデータ行では値が-1に、正常なものは1が返ってきます。
外れ値を表示させてみると、以下のようになります。

  • この記事を書いた人

Haru

会社員。2回目の育休から仕事復帰。
職種は海外営業。
育休の過ごし方、育児、家事、プログラミング勉強について発信しています。

-IT・プログラミング, Python
-, ,