ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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_iris
    from sklearn.feature_selection import f_classif
    import pandas as pd

     

    load_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.columns

     

    return_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.160040

     

    petal length의 anova f-값이 가장 높으므로, 분류하기 가장 용이하다고 볼 수 있다. 

     

Designed by Tistory.