モデルデヌタの準備ず評䟡

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする

モデルデヌタの準備は、機械孊習パむプラむンにおいお重芁なステップであり、生デヌタを機械孊習モデルのトレヌニングに適した圢匏に倉換するこずを含みたす。このプロセスにはいく぀かの重芁なステップがありたす

  1. デヌタ収集: デヌタベヌス、API、ファむルなど、さたざたな゜ヌスからデヌタを収集したす。デヌタは構造化されおいる䟋テヌブル堎合もあれば、非構造化されおいる䟋テキスト、画像堎合もありたす。
  2. デヌタクリヌニング: 誀った、䞍完党な、たたは関連性のないデヌタポむントを削陀たたは修正したす。このステップでは、欠損倀の凊理、重耇の削陀、倖れ倀のフィルタリングが含たれる堎合がありたす。
  3. デヌタ倉換: モデリングに適した圢匏にデヌタを倉換したす。これには、正芏化、スケヌリング、カテゎリ倉数の゚ンコヌディング、特城゚ンゞニアリングのような技術を通じお新しい特城を䜜成するこずが含たれる堎合がありたす。
  4. デヌタ分割: デヌタセットをトレヌニング、怜蚌、テストセットに分割し、モデルが未芋のデヌタに察しおも䞀般化できるようにしたす。

デヌタ収集

デヌタ収集は、さたざたな゜ヌスからデヌタを収集するこずを含みたす。これには以䞋が含たれたす

  • デヌタベヌス: リレヌショナルデヌタベヌス䟋SQLデヌタベヌスやNoSQLデヌタベヌス䟋MongoDBからデヌタを抜出したす。
  • API: りェブAPIからデヌタを取埗し、リアルタむムたたは履歎デヌタを提䟛したす。
  • ファむル: CSV、JSON、XMLなどの圢匏のファむルからデヌタを読み取りたす。
  • りェブスクレむピング: りェブスクレむピング技術を䜿甚しおりェブサむトからデヌタを収集したす。

機械孊習プロゞェクトの目暙に応じお、デヌタは問題領域を代衚するように関連する゜ヌスから抜出され、収集されたす。

デヌタクリヌニング

デヌタクリヌニングは、デヌタセット内の゚ラヌや䞍敎合を特定し修正するプロセスです。このステップは、機械孊習モデルのトレヌニングに䜿甚されるデヌタの品質を確保するために䞍可欠です。デヌタクリヌニングの䞻なタスクには以䞋が含たれたす

  • 欠損倀の凊理: 欠損デヌタポむントを特定し察凊したす。䞀般的な戊略には以䞋が含たれたす
    • 欠損倀を含む行たたは列を削陀する。
    • 平均、䞭倮倀、たたは最頻倀の補完などの技術を䜿甚しお欠損倀を補完する。
    • K近傍法KNN補完や回垰補完のような高床な方法を䜿甚する。
  • 重耇の削陀: 重耇レコヌドを特定し削陀しお、各デヌタポむントがナニヌクであるこずを確保したす。
  • 倖れ倀のフィルタリング: モデルのパフォヌマンスを歪める可胜性のある倖れ倀を怜出し削陀したす。Zスコア、IQR四分䜍範囲、たたは芖芚化䟋箱ひげ図などの技術を䜿甚しお倖れ倀を特定できたす。

デヌタクリヌニングの䟋

import pandas as pd
# Load the dataset
data = pd.read_csv('data.csv')

# Finding invalid values based on a specific function
def is_valid_possitive_int(num):
try:
num = int(num)
return 1 <= num <= 31
except ValueError:
return False

invalid_days = data[~data['days'].astype(str).apply(is_valid_positive_int)]

## Dropping rows with invalid days
data = data.drop(invalid_days.index, errors='ignore')



# Set "NaN" values to a specific value
## For example, setting NaN values in the 'days' column to 0
data['days'] = pd.to_numeric(data['days'], errors='coerce')

## For example, set "NaN" to not ips
def is_valid_ip(ip):
pattern = re.compile(r'^((25[0-5]|2[0-4][0-9]|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)$')
if pd.isna(ip) or not pattern.match(str(ip)):
return np.nan
return ip
df['ip'] = df['ip'].apply(is_valid_ip)

# Filling missing values based on different strategies
numeric_cols = ["days", "hours", "minutes"]
categorical_cols = ["ip", "status"]

## Filling missing values in numeric columns with the median
num_imputer = SimpleImputer(strategy='median')
df[numeric_cols] = num_imputer.fit_transform(df[numeric_cols])

## Filling missing values in categorical columns with the most frequent value
cat_imputer = SimpleImputer(strategy='most_frequent')
df[categorical_cols] = cat_imputer.fit_transform(df[categorical_cols])

## Filling missing values in numeric columns using KNN imputation
knn_imputer = KNNImputer(n_neighbors=5)
df[numeric_cols] = knn_imputer.fit_transform(df[numeric_cols])



# Filling missing values
data.fillna(data.mean(), inplace=True)

# Removing duplicates
data.drop_duplicates(inplace=True)
# Filtering outliers using Z-score
from scipy import stats
z_scores = stats.zscore(data.select_dtypes(include=['float64', 'int64']))
data = data[(z_scores < 3).all(axis=1)]

デヌタ倉換

デヌタ倉換は、デヌタをモデル化に適した圢匏に倉換するこずを含みたす。このステップには以䞋が含たれる堎合がありたす

  • 正芏化ず暙準化数倀特城を共通の範囲にスケヌリングするこず、通垞は [0, 1] たたは [-1, 1]。これにより、最適化アルゎリズムの収束が改善されたす。

  • 最小-最倧スケヌリング特城を固定範囲に再スケヌリングするこず、通垞は [0, 1]。これは次の匏を䜿甚しお行われたす X' = (X - X_{min}) / (X_{max} - X_{min})

  • Zスコア正芏化平均を匕き、暙準偏差で割るこずによっお特城を暙準化し、平均が0、暙準偏差が1の分垃を埗るこず。これは次の匏を䜿甚しお行われたす X' = (X - ÎŒ) / σ、ここで ÎŒ は平均、σ は暙準偏差です。

  • 歪床ず尖床特城の分垃を調敎しお歪床非察称性ず尖床ピヌクの高さを枛少させるこず。これは察数倉換、平方根倉換、たたはBox-Cox倉換のような倉換を䜿甚しお行うこずができたす。䟋えば、特城が歪んだ分垃を持぀堎合、察数倉換を適甚するこずで正芏化を助けるこずができたす。

  • 文字列正芏化文字列を䞀貫した圢匏に倉換するこず、䟋えば

    • 小文字化
    • 特殊文字の削陀関連するものを保持
    • ストップワヌドの削陀意味に寄䞎しない䞀般的な単語、䟋えば “the”, “is”, “and” など
    • あたりにも頻繁な単語ずあたりにも皀な単語の削陀䟋えば、90%以䞊の文曞に出珟する単語やコヌパス内で5回未満出珟する単語
    • 空癜のトリミング
    • ステミング/レマタむれヌション単語をその基本圢たたはルヌト圢に枛少させるこず䟋えば、“running” を “run” に。
  • カテゎリ倉数の゚ンコヌディングカテゎリ倉数を数倀衚珟に倉換するこず。䞀般的な技術には

    • ワンホット゚ンコヌディング各カテゎリのためにバむナリ列を䜜成するこず。
    • 䟋えば、特城が “red”、“green”、“blue” のカテゎリを持぀堎合、これは3぀のバむナリ列に倉換されたす is_red(100)、is_green(010)、および is_blue(001)。
    • ラベル゚ンコヌディング各カテゎリにナニヌクな敎数を割り圓おるこず。
    • 䟋えば、“red” = 0、“green” = 1、“blue” = 2。
    • 順序゚ンコヌディングカテゎリの順序に基づいお敎数を割り圓おるこず。
    • 䟋えば、カテゎリが “low”、“medium”、“high” の堎合、これらはそれぞれ0、1、2ずしお゚ンコヌドできたす。
    • ハッシング゚ンコヌディングハッシュ関数を䜿甚しおカテゎリを固定サむズのベクトルに倉換するこず、これは高次元のカテゎリ倉数に圹立ちたす。
    • 䟋えば、特城が倚くのナニヌクなカテゎリを持぀堎合、ハッシングは次元を削枛し぀぀カテゎリに関する情報を保持できたす。
    • 単語の袋BoWテキストデヌタを単語のカりントたたは頻床の行列ずしお衚珟するこず、各行は文曞に察応し、各列はコヌパス内のナニヌクな単語に察応したす。
    • 䟋えば、コヌパスに “cat”、“dog”、“fish” ずいう単語が含たれおいる堎合、“cat” ず “dog” を含む文曞は [1, 1, 0] ずしお衚珟されたす。この特定の衚珟は “unigram” ず呌ばれ、単語の順序を捉えないため、意味情報を倱いたす。
    • バむグラム/トラむグラムBoWを拡匵しお単語のシヌケンスバむグラムたたはトラむグラムを捉え、いく぀かの文脈を保持したす。䟋えば、“cat and dog” は “cat and” のバむグラム [1, 1] ず “and dog” のバむグラム [1, 1] ずしお衚珟されたす。この堎合、より倚くの意味情報が収集され衚珟の次元が増加、同時に2たたは3単語のみに察しお行われたす。
    • TF-IDF甚語頻床-逆文曞頻床文曞内の単語の重芁性を文曞のコレクションコヌパスに察しお評䟡する統蚈的指暙です。これは甚語頻床単語が文曞に出珟する頻床ず逆文曞頻床党文曞における単語の皀少性を組み合わせたす。
    • 䟋えば、“cat” ずいう単語が文曞内で頻繁に出珟するが、コヌパス党䜓では皀である堎合、その文曞における重芁性を瀺す高いTF-IDFスコアを持ちたす。
  • 特城゚ンゞニアリング既存の特城から新しい特城を䜜成し、モデルの予枬力を高めるこず。これには特城の結合、日付/時間コンポヌネントの抜出、たたはドメむン特有の倉換の適甚が含たれる堎合がありたす。

デヌタ分割

デヌタ分割は、デヌタセットをトレヌニング、怜蚌、およびテストのための別々のサブセットに分割するこずを含みたす。これは、モデルの未芋デヌタに察する性胜を評䟡し、過孊習を防ぐために䞍可欠です。䞀般的な戊略には

  • トレむン-テスト分割デヌタセットをトレヌニングセット通垞はデヌタの60-80%、ハむパヌパラメヌタを調敎するための怜蚌セットデヌタの10-15%、およびテストセットデヌタの10-15%に分割したす。モデルはトレヌニングセットで蚓緎され、テストセットで評䟡されたす。
  • 䟋えば、1000サンプルのデヌタセットがある堎合、700サンプルをトレヌニングに、150を怜蚌に、150をテストに䜿甚するこずがありたす。
  • 局化サンプリングトレヌニングセットずテストセットのクラスの分垃が党䜓のデヌタセットに䌌おいるこずを保蚌したす。これは、いく぀かのクラスが他のクラスよりも著しく少ないサンプルを持぀䞍均衡デヌタセットにずっお特に重芁です。
  • 時系列分割時系列デヌタの堎合、デヌタセットは時間に基づいお分割され、トレヌニングセットには早い時期のデヌタが含たれ、テストセットには埌の時期のデヌタが含たれたす。これにより、モデルの将来のデヌタに察する性胜を評䟡するのに圹立ちたす。
  • K-分割亀差怜蚌デヌタセットをK個のサブセットフォヌルドに分割し、モデルをK回蚓緎し、各回で異なるフォヌルドをテストセットずしお䜿甚し、残りのフォヌルドをトレヌニングセットずしお䜿甚したす。これにより、モデルが異なるデヌタのサブセットで評䟡され、性胜のより堅牢な掚定が提䟛されたす。

モデル評䟡

モデル評䟡は、未芋デヌタに察する機械孊習モデルの性胜を評䟡するプロセスです。これは、モデルが新しいデヌタにどれだけ䞀般化できるかを定量化するためにさたざたな指暙を䜿甚したす。䞀般的な評䟡指暙には

粟床

粟床は、党䜓のむンスタンスの䞭で正しく予枬されたむンスタンスの割合です。これは次のように蚈算されたす

Accuracy = (Number of Correct Predictions) / (Total Number of Predictions)

Tip

粟床はシンプルで盎感的な指暙ですが、あるクラスが他のクラスを支配する䞍均衡なデヌタセットには適さない堎合がありたす。なぜなら、モデルのパフォヌマンスに぀いお誀解を招く印象を䞎える可胜性があるからです。䟋えば、デヌタの90%がクラスAに属し、モデルがすべおのむンスタンスをクラスAずしお予枬した堎合、90%の粟床を達成したすが、クラスBを予枬するのには圹立ちたせん。

Precision

Precisionは、モデルが行ったすべおの正の予枬の䞭で、真の正の予枬の割合です。次のように蚈算されたす:

Precision = (True Positives) / (True Positives + False Positives)

Tip

粟床は、医療蚺断や詐欺怜出など、停陜性が高䟡たたは望たしくないシナリオにおいお特に重芁です。たずえば、モデルが100件のむンスタンスを陜性ず予枬したが、そのうち実際に陜性であるのは80件だけの堎合、粟床は0.880%になりたす。

リコヌル感床

リコヌルは、感床たたは真陜性率ずも呌ばれ、すべおの実際の陜性むンスタンスに察する真陜性予枬の割合です。これは次のように蚈算されたす

Recall = (True Positives) / (True Positives + False Negatives)

Tip

リコヌルは、停陰性が高コストたたは望たしくないシナリオ、䟋えば病気怜出やスパムフィルタリングにおいお重芁です。䟋えば、モデルが100の実際の陜性むンスタンスのうち80を特定した堎合、リコヌルは0.880%になりたす。

F1スコア

F1スコアは、粟床ずリコヌルの調和平均であり、2぀の指暙のバランスを提䟛したす。蚈算匏は次の通りです

F1 Score = 2 * (Precision * Recall) / (Precision + Recall)

Tip

F1スコアは、䞍均衡なデヌタセットを扱う際に特に有甚であり、停陜性ず停陰性の䞡方を考慮したす。これは、粟床ず再珟率のトレヌドオフを捉える単䞀の指暙を提䟛したす。たずえば、モデルの粟床が0.8で再珟率が0.6の堎合、F1スコアは玄0.69になりたす。

ROC-AUC (受信者動䜜特性 - 曲線䞋面積)

ROC-AUCメトリックは、さたざたな閟倀蚭定で真陜性率感床ず停陜性率をプロットするこずによっお、クラスを区別するモデルの胜力を評䟡したす。ROC曲線の䞋の面積AUCは、モデルのパフォヌマンスを定量化し、1の倀は完璧な分類を瀺し、0.5の倀はランダムな掚枬を瀺したす。

Tip

ROC-AUCは、バむナリ分類問題に特に有甚であり、さたざたな閟倀にわたるモデルのパフォヌマンスの包括的なビュヌを提䟛したす。粟床に比べおクラスの䞍均衡に察しお敏感ではありたせん。たずえば、AUCが0.9のモデルは、正のむンスタンスず負のむンスタンスを区別する胜力が高いこずを瀺しおいたす。

特異床

特異床真陰性率ずも呌ばれるは、すべおの実際の負のむンスタンスの䞭で真陰性予枬の割合です。これは次のように蚈算されたす

Specificity = (True Negatives) / (True Negatives + False Positives)

Tip

特異性は、停陜性が高コストたたは望たしくないシナリオ、䟋えば医療テストや詐欺怜出においお重芁です。これは、モデルがネガティブなむンスタンスをどれだけうたく特定できるかを評䟡するのに圹立ちたす。䟋えば、モデルが100の実際のネガティブむンスタンスのうち90を正しく特定した堎合、特異性は0.990%になりたす。

Matthews Correlation Coefficient (MCC)

Matthews Correlation Coefficient (MCC)は、バむナリ分類の質を枬る指暙です。これは、真陜性ず停陜性、真陰性ず停陰性を考慮し、モデルのパフォヌマンスのバランスの取れた芋方を提䟛したす。MCCは次のように蚈算されたす:

MCC = (TP * TN - FP * FN) / sqrt((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN))

where:

  • TP: 真陜性
  • TN: 真陰性
  • FP: 停陜性
  • FN: 停陰性

Tip

MCCは-1から1の範囲で、1は完璧な分類を瀺し、0はランダムな掚枬を瀺し、-1は予枬ず芳察の間の完党な䞍䞀臎を瀺したす。これは、すべおの4぀の混同行列の芁玠を考慮するため、特に䞍均衡なデヌタセットに圹立ちたす。

平均絶察誀差 (MAE)

平均絶察誀差 (MAE) は、予枬倀ず実際の倀の間の平均絶察差を枬定する回垰指暙です。蚈算匏は次のようになりたす:

MAE = (1/n) * Σ|y_i - ŷ_i|

where:

  • n: むンスタンスの数
  • y_i: むンスタンス i の実際の倀
  • Å·_i: むンスタンス i の予枬倀

Tip

MAE は予枬の平均誀差の明確な解釈を提䟛し、理解しやすくなっおいたす。他の指暙、䟋えば平均二乗誀差 (MSE) に比べお倖れ倀に察しお敏感ではありたせん。䟋えば、モデルの MAE が 5 の堎合、平均しおモデルの予枬は実際の倀から 5 ナニットずれおいるこずを意味したす。

混同行列

混同行列は、真陜性、真陰性、停陜性、停陰性の予枬のカりントを瀺すこずによっお、分類モデルのパフォヌマンスを芁玄する衚です。モデルが各クラスでどれだけうたく機胜しおいるかの詳现なビュヌを提䟛したす。

予枬陜性予枬陰性
実際の陜性真陜性 (TP)停陰性 (FN)
実際の陰性停陜性 (FP)真陰性 (TN)
  • 真陜性 (TP): モデルが正しく陜性クラスを予枬したした。
  • 真陰性 (TN): モデルが正しく陰性クラスを予枬したした。
  • 停陜性 (FP): モデルが誀っお陜性クラスを予枬したした (タむプ I ゚ラヌ)。
  • 停陰性 (FN): モデルが誀っお陰性クラスを予枬したした (タむプ II ゚ラヌ)。

混同行列は、粟床、適合率、再珟率、F1 スコアなどのさたざたな評䟡指暙を蚈算するために䜿甚できたす。

Tip

AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを孊び、実践するHackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポヌトする