ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [통계] 탐색적 데이터 분석
    Learn/통계 2022. 5. 11. 23:52

    -1장 읽고 정리하기-

     

    평균

    현실의 데이터에는 outlier가 낀 경우가 대부분이다. 

    늘 습관적으로 중간값을 쓰곤했는데 절사평균도 고려해보자. 

    절사평균은 scipy.stats의 trim_mean함수를 쓰면 된다. 

     

    Robust

    SE쪽에서 많이 쓰던 단어인데 여기서는 outlier에 민감하지 않은 것을 이렇게 부른다. 

     

    outlier

    outlier를 언급할 때 자주 비교되는게 noise이다. 

    outlier는 값이 잘못되었다는 뜻이 아니며 때로는 일반 값들보다 더 의미를 가진다. 

    사실 anomaly detection에서 noise와 outlier를 구분하는건 현실적으로 쉽지 않다. 

     

    분산과 표준편차

    표준편차는 분산에 루트를 씌운 값이다. 

    왜 이런걸 만들었을까 생각해본적이 없었는데

    루트를 씌우면 원래의 데이터와 같은 sacle이 되므로 해석하기가 쉽다고 한다. 

     

    자유도 (degrees of freedom)

    표본의 분산을 구할때는 n이 아닌 n-1로 나눈다. 

    사실 n이 크면 별 의미는 없다. 

    자유도에 대한 설명은 다양한 것이 많은데 이 책에서는 아래와 같이 설명한다. 

    표준편차는 표본의 평균에 따른다는 하나의 제약 조건을 가지고 있기 때문에 n-1의 자유도를 갖는다. 

     

    예를들어 5개의 데이터로 표본이 구성되었을때 표본 평균이 이미 알려져있다면, 

    마지막 1개 값은 평균을 맞추기위해 자동으로 정해진다. 

    그러므로 자유로울 수 있는 데이터는 n-1인 4개이다. 

     

    중위절대편차(MAD)

    median ( |x1 - m|, |x2-m|, ..., |xn-m| ) 

    위 처럼 각 값들에서 중간값을 빼고, 그 뺀값들의 중간값을 의미한다. 

    이 값은 outlier의 영향을 받지 않는다. (robust)

    분산과 표준편차가 outlier의 영향을 많이 받으니 현실 데이터는 이걸 써보자. 

     

    사분위범위(IQR)

    25번째 백분위수와 75번째 백분위수의 차이를 뜻한다. 

    box plot 나올 때 많이 언급되곤한다. 

     

    중요한건 데이터가 클 경우 median 포함 백분위를 구하기위해 정렬하는게 매우 부담이 된다. 

    실제로 feature engineering할때 median때문에 고생한 적이 있었다. 

     

    그래서 근사법을 쓰곤하는데 데이터 갯수가 너무 작은게 아니라면 큰 문제는 없다고 한다. 

    numpy.quantile은 선형보간법이라는 방법을 쓴다고 한다. 

     

    최빈값

    categorical 데이터에서 가장 자주 등장하는 값을 뜻하는데 의미는 직관적이다. 

    영어로 mode로 쓰니 이걸 기억하는게 중요

     

    bar chart    VS   histogram

    비슷하게 생겨서 잘못쓰는 경우를 많이 봤다. 

    bar chart는 categorical 데이터를, histogram은 numeric 데이터를 표현하는데 쓴다. 

     

     

    상관관계

    흔히 피어슨 상관계수를 많이 쓴다. 

    변수들이 선형적인 상관 관계를 갖지 않으면 의미가 없다. 

    파이썬은 보통 heatmap으로 시각화한다. 

     

    이변량 분석 - 육각형, 등고선

    Scatter plot은 데이터가 많으면 터진다. 

    점을 수십 수백 수천만개 찍으면 당연히 터진다. 

    안터져도 못알아본다. 

     

    육각형 구간 도표인 hexbin을 사용하면 쉽게 표현할 수 있다. 

    다만 outlier 제거는 필요하다. 

     

    등고선 도표도 사용할 수 있는데 꼭대기로 갈수록 밀도가 높다. 

    seaborn의 kdeplot을 사용하면 그릴 수 있다. 

     

    다변량 분석

    매지컬한 방법이 있는건 아니고 조건을 바꿔가며 여러 개의 도표를 그린다. 

     

    예시로 보는게 빠르겠다. 

    우편번호를 바꿔가며 hexbin을 그리는 코드이다. 

    (Finishe Suqare Feet과 Tax-Assessed Value간의 관계)

    zip_code = [98199, 98105, 98109, 98126]
    kc_tax_zip = kc_tax0.loc[kc_tax0.ZipCode.isin(zip_codes), :]
    kc_tax_zip
    
    def hexbin(x, y, color, **kwargs):
        cmap = sns.light_palette(color, as_cmap=True)
        plt.hexbin(x, y, griddsize=25, cmap=camp, **kwargs)
        
    g = sns.FacetGrid(kc_tax_zip, col='ZipCoe', col_wrap=2)
    g.map(hexbin, 'SqFtTotLiving', 'TaxAssessedValue', 
          extent=[0, 3500, 0, 700000])
    g.set_axis_labels('Finished Square Feet', 'Tax-Assessedd value')
    g.set_titless('Zip codde {col_name:.0f}')

     

     

    'Learn > 통계' 카테고리의 다른 글

    Analysis of Variance (ANOVA; 분산분석)  (2) 2022.11.03
    카이제곱분포, t분포, F분포  (4) 2022.10.11
    표본 분포(Sampling Distribution)  (0) 2022.10.10
    [통계] 데이터와 표본분포  (0) 2022.05.18

    댓글

Designed by Tistory.