-
<TIL> 2024-03-21내일배움캠프(데이터 분석 부트캠프 1기)/TIL & WIL 2024. 3. 21. 22:44
- 오늘 진행한 일
- 개인 프로젝트 대시보드 작성
- A/B 테스트 관련 내용 검색 및 학습
- SQL 코드테스트
https://jinhyunbae.tistory.com/168
한 달 전쯤 프로젝트를 시작하기 전에 개인 프로젝트 용으로 찾아놨던 데이터에 대해서
간단하게 EDA를 하고 전처리 한 뒤 통계 분석까지 했던 것을 이제 대시보드화 하기 위해서
다시 훑어보기 시작했다.
지난 번에는 이상치를 단순히 Z-score를 기준으로 잘라서 제거를 하는 방식으로 진행을 했는데
위 블로그를 참고해서 여러 방식으로 이상치에 대한 대처를 고민해보고 이를 반영하였다.
def z_score_outlier_remover(df:pd.DataFrame, threshold:float) -> pd.DataFrame : total_outlier_count = 0 iteration = 0 outlier_df_list = [] if threshold <= 0: raise ValueError("Threshold must larger than zero") while True: iteration += 1 m = df['sum_gamerounds'].mean() s = df['sum_gamerounds'].std() ser_outlier_bool = ((df['sum_gamerounds']-m)/s).abs() > threshold outlier_count = ser_outlier_bool.sum() print(f'{iteration}회차 반복 : outlier의 개수는 {outlier_count}개 입니다.') if outlier_count > 0: outlier_df_list.append(df[ser_outlier_bool]) total_outlier_count += outlier_count df = df[~ser_outlier_bool] else: if total_outlier_count > 0: print(f"The number of outliers(z-score > {threshold}): {total_outlier_count}") break return df, outlier_df_list
이상치 처리에 있어서 반복문을 이용해서 Z-score 3 기준으로 이상치를 정제 한 뒤 이상치를 확인하는 방식으로
데이터를 정제하였다.
print(cookie_cats['sum_gamerounds'].mean()) print(outlier_df['sum_gamerounds'].mean())
51.8724567297564 199.43998356518168
이렇게해서 정제한 데이터의 평균과 기존 데이터의 평균을 비교해 보았을 땐 상당히 큰 차이가
있는 것을 알 수 있었다.
이렇게 이상치를 제거한 상태에서 통계분석한 결과로 대시보드를 작성하였다.
아래는 간단하게 틀만 잡은 대시보드이다.
분석은 지난 번과 동일하게 gate30과 gate40 집단의 Sum_GameRound의 평균차이와
retention_1, retention_7의 여부 독립성 검정으로 수행하였다.
분석 결과 세 분석 모두 통계적으로 유의한 것으로 나타나였다.
다시 말해 gate30의 Sum_GameRound보다 gate40의 Sum_GameRound가 낮았으며
retention_1과 7의 여부는 gate의 차이와 독립적이지 않았다. 즉 연관이 있었다.
다음주 내로 위 내용을 좀 더 잘 정리한 다음에 A/B 테스트에 대한 포트폴리오를 작성하고자 한다.
'내일배움캠프(데이터 분석 부트캠프 1기) > TIL & WIL' 카테고리의 다른 글
<TIL> 2024-03-28 (1) 2024.03.28 <TIL> 2024-03-26 (1) 2024.03.26 <TIL> 2024-03-20 (0) 2024.03.20 <TIL> 2024-03-18 (0) 2024.03.18 <WIL> 2024년 3월 둘째 주 회고 (1) 2024.03.15 - 오늘 진행한 일