본문 바로가기
Dev/python

XGBoost는 과연 얼마나 정확했을까요?

by 혜옹쓰 2022. 8. 5.

역시 블로그에는 드립을 잔뜩 써줘야 속이 시원하지..

아직 초반이라 선 지키는거 조금 어색해 (2021년 05월 31일 글!)


3월 모의고사 채점하는 고3의 마음으로 맞춰보았습니다..

제가 지난 글에 포스팅했던 날씨, 요일, 홈구장에 따른 XGBoost 승부예측! 기억하시나요? 혹시, 정말 혹~시 안보셨던 분들을 위해 링크를 첨부합니다^_^ (https://hyeoz.tistory.com/31?category=965831)

K리그 주말 6경기에 대한 예측을 진행했는데, 주말이 지나 월요일이 된 오늘! 우리 애기…아니아니 제 xgb 모델이 얼마나 정확하게 예측했을지 한 번 확인해보겠습니다!

예측 모델 돌려서 나왔던 최종 결과물

실제 승부 결과를 데이터 프레임 맨 끝에 추가하여 적중한 팀에는 Correct!를, 그렇지 못한 팀에는 Wrong 을 달아주었습니당.틀려서 시무룩해 보인다면..맞습니다 ;(

이때 중간점검 느낌으로 정확도를 체크해보기 위해, Correct일 경우와 Wrong일 경우 반복문을 통해 하나씩 추가해주었습니당!

correct = 0
wrong = 0
for i in range(0,len(prediction)):
    if prediction.iloc[i]['Prediction'] == prediction.iloc[i]['Real_result']:
        prediction[i:i+1]['Accuracy'] = 'Correct!'
        correct +=1
        
    else:
        prediction[i:i+1]['Accuracy'] = "Wrong"
        wrong +=1

이렇게 반복문을 돌려주면, correct와 wrong의 갯수를 확인할 수 있습니다!

와! 75%의 정확도네요!

표본이 아주 작아서, 크게 신뢰할 수 있는 결과는 아니지만 제 예상보다 훨씬 높은 정확도를 보여서 아주 기특해요 ;) (우리 표본…작고 귀여워)

이보다 더 체계적인 정확도 확인을 위해, 추가로 Sklearn 패키지의 mean_squared_error를 사용하여 확인해보도록 합니다!

여기서 간단히 mean_squared_error를 설명하자면, 예측값과 실제값의 차이를 제곱하여 더한 후 평균 낸 값으로, 작을수록 좋은 모델이라고 할 수 있습니다! 각 모델별로 연속형 변수의 범위가 다르기때문에 절대적으로 어느 값이 좋은 값이라고 말할 수는 없지만, 범위에 따라 개인적으로 판단하면 될 것 같습니다.

값을 빼고, 제곱하는 계산과정을 다루는 측정이기 때문에, 일단 연속형 변수로 바꿔주어야 합니다! WIN은 3으로, DRAW는 1로, LOSE는 0으로 인덱싱 해줍니다. 컬럼 명은 result_R로 지정했습니다.

연속형 변수 result_R 생성

이렇게 연속형 변수가 생겼으면, 바로 성능 측정에 들어가보겠습니다!

from sklearn.metrics import mean_squared_error
mean_squared_error(prediction['result_R'],prediction['result_P'])

사용은 아주 간단해요! 패키지를 import 하고, 예측값과 실제값을 넣어주기만 하면 됩니다. 저는 예측값인 result_P와, 실제값인 result_R을 넣어주었어요! 이렇게 돌려보았더니 약 0.44 정도의 값이 나왔는데, 0~3까지의 범위를 가지고 있는 연속형 변수에서, 이정도면 꽤나 작은 값인 것…같죠?ㅎㅎ

너무 적은 input_variable 라서 사실 많이 걱정했는데, 이렇게 절반을 훨씬 넘는 팀의 승부를 정확히 예측해줘서 마음이 뿌듯합니다ㅎㅎ(건강하게만 자라다오-했던 자식이 공부까지 잘하는 느낌이네요..?)


가끔가다 글이 끝에 뚝 끊기는 느낌이 든다면 맞습니다...

회사 관련 글이 있어서 그냥 삭제하고 지우기때문입니다...

개가튼 회사였지 암~.~