메타코드에 새로 올라온 powerBI 강의! (이미지를 클릭하면 수강신청 링크로 이동한다.)
무료 수강 기간이 끝나서 아쉽지만 50% 세일 중이다.
5. 통계적 가설 검정-1
가설 1: 가격이 높은 차량에 대한 보험사기가 높을 것이다.
맨 처음에 어떻게 가설을 설정할 수 있을까?
도메인 전문가가 궁금해 하는 부분
조직 내에서 유사한 데이터분석 결과물을 냈던 자료
구글링, 논문, 외부 조직의 인사이트 등
여러가지 자료를 참고하여 현실성 있는 가설을 세울 수 있다.
그런데, 만약 아무런 전문가도, 자료도 없다면 어떻게 분석을 시작할 수 있을까?
일단 필요한 라이브러리와 데이터를 불러오자.
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import plotly.express as px
import plotly.graph_objects as go
from scipy.stats import chi2_contingency, ttest_ind, mannwhitneyu, ks_2samp, f_oneway
from sklearn.preprocessing import StandardScaler
from utils2 import *
from stat_utils import *
pd.set_option('future.no_silent_downcasting', True)
pd.set_option('display.max_columns', None)
여기에서 utils2와 stat_utils는 그래프를 그리는 함수를 코드로 적은 다음 미리 .py 파일로 저장한 것이다.
df = pd.read_csv('data/fraud_oracle.csv')
df.head()
이렇게 봐선 뭐가 중요한 변수이고 각 변수들끼리 어떤 연관성이 있는지 알기 어렵다.
컬럼을 카테고리화 하면 훨씬 내용을 이해하기 쉽다. 어떤 것끼리 묶을 수 있을지 고민해보자.
time_vars = ["Month", "WeekOfMonth", "DayOfWeek", "DayOfWeekClaimed", 'MonthClaimed', 'WeekOfMonthClaimed']
vehicle_vars = ["Make", "VehiclePrice", "VehicleCategory", "AgeOfVehicle"]
personal_vars = ["Sex", 'MaritalStatus', "Age", 'DriverRating', 'AgeOfPolicyHolder', 'NumberOfCars', 'PastNumberOfClaims']
policy_vars = ["PolicyType", 'Deductible', 'AgentType', "NumberOfSuppliments", "BasePolicy"]
accident_vars = ['Days_Policy_Accident', 'Days_Policy_Claim', 'PoliceReportFiled', 'WitnessPresent', 'AddressChange_Claim']
Liability인데 보험사기인 경우는 36건 뿐이다. 눈으로 보기에도 확연하게 너무 적은 것을 볼 수 있다.
비교가 무의미하게 표본 수가 적은 Liability를 제외하고 collision, all perils만 분석하겠다는 결론을 내릴 수 있다.
plot_count_plot(df, "BasePolicy", "FraudFound_P")
결정이 되었으니, 데이터프레임을 보험 종류별로 나눈다.
collision = df.loc[df['BasePolicy']=="Collision"]
liability = df.loc[df['BasePolicy']=="Liability"]
all_p = df.loc[df['BasePolicy']=="All Perils"]
기본적인 데이터 형태를 파악한다.
.shape - 행, 열 개수
.FraudFound_P.value_counts() - 보험사기 여부 각각 몇 건씩인지
보험사기로 나온 케이스가 전체의 몇 %를 차지하는지(비율)
각 보험 유형에 따른 결과는 아래 그림을 참고!
그런 다음, 컬럼들을 다 넣고 연관이 있는지 살펴본다.
statistical_tests_step1 함수는 주어진 데이터프레임에 따라(여기에서는 all_p), 보험사기 여부와 관련 있는 컬럼인지 아닌지 판단하여, 연관성이 있다고 나오는 컬럼만 출력하는 코드이다. (강사님이 만드신 코드, 강의자료에 있음!)
output, rel_cols_all = statistical_tests_step1(all_p, "FraudFound_P", [i for i in all_p.columns if i!='FraudFound_P'])
output, rel_cols_collision = statistical_tests_step1(collision, "FraudFound_P", [i for i in collision.columns if i!='FraudFound_P'])
두 보험 유형에서 공통적으로 유의미하다고 나오는 변수가 무엇인지 살펴보면, MonthClaimed, Fault, VehichlePrice, AddressChange_Claim이 있다. 여기에서 시간 관련 변수인 MonthClaimed(클레임이 들어온 달)는 별로 의미가 없을 것이라 생각해 제외하면, Fault(사고의 책임 여부), VehiclePrice(차량가격), AddressChange_Claim(주소변경) 세 가지 요인이 영향을 미칠 후보로 나온다.
[i for i in rel_cols_all if i in rel_cols_collision]
생각을 해보자... 흐으음... 보험사기를 예측하고자 하기 때문에 종속변수는 늘 보험사기가 될 것이다.
즉, ㅇㅇ변수가 보험사기를 높인다/낮춘다/영향을 준다는 식으로 기술되어야 할 것 같다!
여기에서 강사님은
가설1: 차량가격이 보험사기에 영향을 미친다.
(이후 나올) 가설 2: 주소지 변경이 보험사기에 영향을 미친다
라는 가설을 세우셨다.
이런 과정을 체계적으로 차근차근 따라하다 보면 충분히 초보자도 가설을 세울 수 있을 것 같다.
다음 글에서는 이렇게 설정한 가설을 어떻게 검증하는지, 이어서 정리하겠다. :)
그럼 이만, 화르륵 🔥
* 메타코드 서포터즈로서 강의를 제공받아 글을 작성하고 있다. 이미지 클릭 시 구매 사이트로 이동
'빅데이터분석' 카테고리의 다른 글
[머신러닝] 메타코드 강의 후기_머신러닝 입문 부트캠프 (2) 머신러닝에 사용되는 기본 수학 개념 (2) | 2024.10.13 |
---|---|
[머신러닝] 메타코드 강의 후기_머신러닝 입문 부트캠프 (1) 인트로, 용어정리 (0) | 2024.10.13 |
[powerBI] 메타코드 강의후기_(3) 기초통계 개념 (2) | 2024.10.06 |
구글코랩(Colab)에서 py파일 저장하고 불러오기! (2) | 2024.10.03 |
[powerBI] 메타코드 강의후기_(2) EDA 자동화 (1) | 2024.09.29 |