λͺ¨λΈ 데이터 μ€€λΉ„ 및 평가

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” λ²”μ£Όλ₯Ό κ°€μ§€λ©΄ μ„Έ 개의 이진 μ—΄λ‘œ λ³€ν™˜λ©λ‹ˆλ‹€: 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 (민감도)

Recall, λ˜λŠ” 민감도 λ˜λŠ” μ§„μ • 긍정 λΉ„μœ¨λ‘œλ„ μ•Œλ €μ§„ 것은 λͺ¨λ“  μ‹€μ œ 긍정 사둀 μ€‘μ—μ„œ μ§„μ • 긍정 예츑의 λΉ„μœ¨μž…λ‹ˆλ‹€. μ΄λŠ” λ‹€μŒκ³Ό 같이 κ³„μ‚°λ©λ‹ˆλ‹€:

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

Tip

λ¦¬μ½œμ€ μ§ˆλ³‘ νƒμ§€λ‚˜ 슀팸 필터링과 같이 κ±°μ§“ 뢀정이 λΉ„μš©μ΄ 많이 λ“€κ±°λ‚˜ λ°”λžŒμ§ν•˜μ§€ μ•Šμ€ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ μ€‘μš”ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λͺ¨λΈμ΄ 100개의 μ‹€μ œ μ–‘μ„± 사둀 쀑 80개λ₯Ό μ‹λ³„ν•˜λ©΄ λ¦¬μ½œμ€ 0.8(80%)이 λ©λ‹ˆλ‹€.

F1 Score

F1 μ μˆ˜λŠ” 정밀도와 리콜의 μ‘°ν™” ν‰κ· μœΌλ‘œ, 두 λ©”νŠΈλ¦­ κ°„μ˜ κ· ν˜•μ„ μ œκ³΅ν•©λ‹ˆλ‹€. 계산 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

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은 예츑과 κ΄€μ°° κ°„μ˜ μ™„μ „ν•œ 뢈일치λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄λŠ” λͺ¨λ“  λ„€ κ°€μ§€ ν˜Όλ™ ν–‰λ ¬ ꡬ성 μš”μ†Œλ₯Ό κ³ λ €ν•˜λ―€λ‘œ λΆˆκ· ν˜• 데이터 μ„ΈνŠΈμ— 특히 μœ μš©ν•©λ‹ˆλ‹€.

평균 μ ˆλŒ€ 였차 (MAE)

평균 μ ˆλŒ€ 였차 (MAE)λŠ” 예츑 κ°’κ³Ό μ‹€μ œ κ°’ κ°„μ˜ 평균 μ ˆλŒ€ 차이λ₯Ό μΈ‘μ •ν•˜λŠ” νšŒκ·€ λ©”νŠΈλ¦­μž…λ‹ˆλ‹€. μ΄λŠ” λ‹€μŒκ³Ό 같이 κ³„μ‚°λ©λ‹ˆλ‹€:

MAE = (1/n) * Ξ£|y_i - Ε·_i|

어디에:

  • n: μΈμŠ€ν„΄μŠ€ 수
  • y_i: μΈμŠ€ν„΄μŠ€ i의 μ‹€μ œ κ°’
  • Ε·_i: μΈμŠ€ν„΄μŠ€ i의 예츑 κ°’

Tip

MAEλŠ” 예츑의 평균 였λ₯˜μ— λŒ€ν•œ κ°„λ‹¨ν•œ 해석을 μ œκ³΅ν•˜μ—¬ μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€. μ΄λŠ” 평균 제곱 였차(MSE)와 같은 λ‹€λ₯Έ λ©”νŠΈλ¦­μ— λΉ„ν•΄ μ΄μƒμΉ˜μ— 덜 λ―Όκ°ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λͺ¨λΈμ˜ MAEκ°€ 5인 경우, μ΄λŠ” ν‰κ· μ μœΌλ‘œ λͺ¨λΈμ˜ 예츑이 μ‹€μ œ κ°’μ—μ„œ 5 λ‹¨μœ„λ§ŒνΌ λ²—μ–΄λ‚œλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

ν˜Όλ™ ν–‰λ ¬

ν˜Όλ™ 행렬은 μ§„μ§œ μ–‘μ„±, μ§„μ§œ μŒμ„±, κ±°μ§“ μ–‘μ„± 및 κ±°μ§“ μŒμ„± 예츑의 수λ₯Ό λ³΄μ—¬μ€ŒμœΌλ‘œμ¨ λΆ„λ₯˜ λͺ¨λΈμ˜ μ„±λŠ₯을 μš”μ•½ν•˜λŠ” ν‘œμž…λ‹ˆλ‹€. μ΄λŠ” λͺ¨λΈμ΄ 각 ν΄λž˜μŠ€μ—μ„œ μ–Όλ§ˆλ‚˜ 잘 μˆ˜ν–‰λ˜λŠ”μ§€λ₯Ό μžμ„Ένžˆ λ³΄μ—¬μ€λ‹ˆλ‹€.

예츑된 μ–‘μ„±μ˜ˆμΈ‘λœ μŒμ„±
μ‹€μ œ μ–‘μ„±μ§„μ§œ μ–‘μ„± (TP)κ±°μ§“ μŒμ„± (FN)
μ‹€μ œ μŒμ„±κ±°μ§“ μ–‘μ„± (FP)μ§„μ§œ μŒμ„± (TN)
  • μ§„μ§œ μ–‘μ„± (TP): λͺ¨λΈμ΄ μ–‘μ„± 클래슀λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ˜ˆμΈ‘ν–ˆμŠ΅λ‹ˆλ‹€.
  • μ§„μ§œ μŒμ„± (TN): λͺ¨λΈμ΄ μŒμ„± 클래슀λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ˜ˆμΈ‘ν–ˆμŠ΅λ‹ˆλ‹€.
  • κ±°μ§“ μ–‘μ„± (FP): λͺ¨λΈμ΄ μ–‘μ„± 클래슀λ₯Ό 잘λͺ» μ˜ˆμΈ‘ν–ˆμŠ΅λ‹ˆλ‹€ (제1μ’… 였λ₯˜).
  • κ±°μ§“ μŒμ„± (FN): λͺ¨λΈμ΄ μŒμ„± 클래슀λ₯Ό 잘λͺ» μ˜ˆμΈ‘ν–ˆμŠ΅λ‹ˆλ‹€ (제2μ’… 였λ₯˜).

ν˜Όλ™ 행렬은 정확도, 정밀도, μž¬ν˜„μœ¨ 및 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 μ§€μ›ν•˜κΈ°