-
[Python] Feature 순위 매기기 (ANOVA F-검정)Python/Python 실습 2025. 8. 17. 21:10
ANOVA (분산분석) 정의
분산을 분석하여, 두 개 이상의 그룹의 평균을 비교하는데 사용되는 방법이다. AVOVA는 그룹 평균 간의 변동량과 그룹 내 변동량을 비교한다. 그룹 간 변동이 그룹 내 변동보다 크면, 그룹 평균이 다를 가능성이 높다는 것을 나타낸다. 예를 들어, 모든 치와와는 가볍고, 모든 세인트 버나드는 무겁다고 한다면, 무게 Feature가 치와와와 세인트 버나드 그룹을 분류하는데 유의미한 차이를 만든다는 것을 의미한다.
결론적으로 ANOVA-F 검정은 각 Feature가 Class 분류에 얼마나 유의미한 차이를 만드는지 통계적으로 측정하는 값이라고 할 수 있다.
ANOVA-F 검정 기반 Feature 순위 매기기 예제코드
from sklearn.datasets import load_iris from sklearn.feature_selection import f_classif import pandas as pd # 데이터 로드 X, y = load_iris(return_X_y=True, as_frame=True) feature_names = X.columns # ANOVA F-값 계산 f_scores, _ = f_classif(X, y) # 데이터프레임 생성 후 순위 정렬 df_anova = pd.DataFrame({ 'feature': feature_names, 'anova_f': f_scores }).sort_values('anova_f', ascending=False).reset_index(drop=True) print(df_anova)from sklearn.datasets import load_irisfrom sklearn.feature_selection import f_classifimport pandas as pdload_iris : scikit-learn의 Iris (붓꽃) 데이터셋을 불러오는 함수
f_classif : ANOVA F-검정을 수행하여 각 feature의 F-값과 p-값을 계산하는 함수
pandas : 표 형태 데이터 (DataFrame)를 다루기 위한 라이브러리
X, y = load_iris(return_X_y=True, as_frame=True)feature_names = X.columnsreturn_X_y=True : 데이터를 (X,y) 형태로 반환
X : 150 * 4 크기의 독립변수 데이터 (petal length, petal width, sepal length, sepal width)
y : 0,1,2 로 표시된 종 레이블
f_scores, _ = f_classif(X, y)f_classif(X,y) : 각 feature별 F-score와 p-값 반환
f_scores : 각 feature의 F값 (값이 클수록 클래스간 차이가 크고 분류에 유리)
_ : p-값은 여기서 활용하지 않으므로 무시
df_anova = pd.DataFrame({'feature': feature_names,'anova_f': f_scores}).sort_values('anova_f', ascending=False).reset_index(drop=True)pd.DataFrame : feature 이름과 해당 F-값을 테이블 형태로 생성하기 위해 사용
.sort_values('anova_f', ascending=False) : F-값 기준으로 내림차순 정렬
.reset_index(drop=True) : 기존 인덱스를 버리고 0부터 다시 번호 매김
F-값 (F-statistics), p-값 (p-value)
F-값은 다음 비율로 정의된다.
F = 집단 간 분산 / 집단 내 분산
- F가 크다. : 클래스간 평균 차이가 크고, 집단 내 데이터는 비교적 모여있다. -> 분류에 유용한 Feature
- F가 작다. : 클래스간 평균 차이가 작고, 집단 내 데이터가 비교적 떨어져있다. -> 분류하기 어려운 Feature
p-값의 의미 : 관찰된 F-값이 우연히 발생할 확률 (낮을수록 해당 Feature는 통계적으로 유의미함)
- p-값이 통상적으로 0.05 이하일 경우, 유의미한 것으로 본다.
결과
feature anova_f
0 petal length (cm) 1180.161182
1 petal width (cm) 960.007147
2 sepal length (cm) 119.264502
3 sepal width (cm) 49.160040petal length의 anova f-값이 가장 높으므로, 분류하기 가장 용이하다고 볼 수 있다.

'Python > Python 실습' 카테고리의 다른 글
[Python] Decision Tree 구성하기 (3) 2025.08.08 [Python] 파이썬 설치하기, VSCODE 가상 환경 구축 (1) 2025.07.26 [Python] p-value 의미와 사용 방법 (1) 2024.10.09