데이터 분석/머신러닝(19)
-
2024 KBO MVP를 선수 스탯을 통해 머신러닝으로 예측해보기
서론올해로 4년째 해보는 토이 프로젝트이다. 먼저 결론부터 쓰자면 2024 KBO MVP는 김도영이 될 것으로 머신러닝 예측 결과가 나왔다. 2021년부터 계속해온 MVP 예측 결과를 정리하면 아래와 같다.연도예측결과2021미란다미란다2022(잊음)이정후2023페디페디2024김도영??? 2022년에는 잊고 있어서 빼먹었고, 2021, 2023년은 MVP 발표가 된 후 예측했던 거라 감흥이 적었다면 올해는 MVP 발표가 되기 전이라 결과가 기대된다. 아래부터는 어떻게 예측했는지를 설명하고자 한다. 데이터 수집 및 정제당연한 소리지만 우선 데이터를 수집해야한다. 투, 타 모두 연도별로 선수 성적 데이터를 가져오는데 전체 데이터를 가지고 오면 MVP가 매우 적은 불균형한 데이터가 된다. 이를 막기 위해 연도별..
2024.10.12 -
분류 모델의 shap value를 확률값으로 확인하기
1. 배경 상황shapley value는 설명 가능한 AI(XAI) 중 하나로 모델이 "왜" 그렇게 예측을 했는지를 설명해주는 방법이다. python의 `shap` 라이브러리를 이용하여 계산할 수 있다. shapley value는 분류 모델과 회귀 모델 둘 다 계산할 수 있는데, 이 중 분류 모델의 경우 아래와 같이 확률 예측 범위(0~1)를 벗어난 값을 보여준다.위는 소득 분류 데이터를 XGBoost로 학습하여 class가 1인 데이터에 대한 이미지다. 이 이미지를 해석하면전체 데이터에 대한 기댓값 -1.443에 비해 특정 데이터에 대한 예측 값은 -0.223이었고, 그렇게 되는데 영향을 주는 건 relationship, marital-status 순이다. 그 둘은 양의 영향을 주었다. 난 분명 이진 ..
2024.05.27 -
shap 명목형 변수 표기 방법 바꾸기
1. 배경 상황테이블 형태 데이터를 가지고 예측 모델을 만들 때 보통 명목형(object) 변수를 라벨 인코딩 혹은 원-핫 인코딩을 수행하여 모델이 학습할 수 있도록 변환한다. 이후 shap을 시각화하면 각 컬럼이 어떤 값이어서 영향을 줬는지에 대한 해석이 어려워진다.예를 들어, 모든 컬럼값이 명목형 변수인 버섯 데이터의 식용 여부를 예측하는 모델을 만들고 shap value를 계산했을 때 아래처럼 확인이 된다.더보기from sklearn.preprocessing import LabelEncoderfrom sklearn.model_selection import train_test_splitdf_encoded = df.copy()for column in df.select_dtypes('object'): ..
2024.05.21 -
선형회귀로 시계열 예측 모델 만들 때 조심할 점
1. 데이터 선정 데이터 수도 많고 트렌드와 주기성도 매우 잘 보이는 Mauna Loa CO2 daily means 데이터를 이용하였다. Global Monitoring Laboratory - Carbon Cycle Greenhouse Gases (noaa.gov) 2. 데이터 전처리 선형적으로 증가하는 트렌드도 보이고 1년 주기로 증감을 반복하는 패턴이 보인다. 트렌드와 패턴을 고려한 x인자를 만들자. $y = c_0 + c_1 x + c_2 x^2 + c_3 x^3 + c_4 \sin(\frac{2\pi x} {T}) + c_5 \cos(\frac{2\pi x} {T}) + c_6 \sin(\frac{4\pi x} {T}) + c_7 \cos(\frac{4\pi x} {T}) \text{ where ..
2024.04.16 -
AutoML, Autogluon vs mljar-supervised
AutoML? Auto+ML로 머신러닝에 필요한 데이터 전처리, 모델 튜닝, 학습 등 여러 수행사항들을 쉽고 간단하게 코드 몇 줄을 통해 자동으로 알아서 해주는 도구이다. 간단하기만 할 뿐만 아니라 성능도 잘 나온다. AutoML의 필요성 - 기존 방식: 데이터를 가공(결측치 처리 등)하여 어떤 알고리즘을 사용할지 선택하고 필요 시 하이퍼파라미터를 튜닝하며 학습 및 평가를 진행한다. 만약 결과가 좋지 않으면 다른 알고리즘으로 새롭게 테스트하는 과정을 무한 반복 … 이걸 코드로 옮겨 적으면 수십~수백 줄에 달하는 노동 집약적인 과정이며 시간 소요도 크다. - 하지만 automl 패키지를 사용하면 `model.fit()` 몇 줄로 가공부터 학습까지 모든 과정이 끝난다. - 따라서 데이터 분석가/사이언티스트가..
2024.02.29 -
Regression - IBUG 알고리즘 논문 읽기
1. 소개 - arxiv.org/pdf/2205.11412v2.pdf - GitHub - jjbrophy47/ibug: Instance-based uncertainty estimation for gradient-boosted regression trees - IBUG = Instance-Based Uncertainty estimation for Gradient-boosted regression trees - Boost 계열의 regression tree 모델(XGBoost, LightGBM, CatBoost 등)의 예측값을 확률로 보여주기 위한 알고리즘 2. 요약 1. 앙상블 tree 계열 모델로 데이터를 학습 2. 내가 찾고자 하는 데이터 X가 각 트리의 어느 리프에 있는지, 그리고 어떤 데이터들이 그..
2024.02.27 -
상관 관계의 종류 및 python 코드 구현
상관 관계의 의미 두 변수 간에 어떤 관련성이 있는지를 나타내는 것으로 상관 관계가 낮으면 두 변수 간 관련성이 거의 없거나 약하다고 할 수 있다. 예) 수학 성적과 과학 성적의 상관 관계, 수학 성적과 스포츠 경기 시청률의 상관 관계 그러나 상관 관계가 높다고 반드시 인과 관계가 있는 것이 아니다. 다른 제 3의 변수에 의해 영향을 받을 수도 있으며 인과 관계가 모호하기도 하고 우연으로 나타나는 것일 수도 있기 때문에 추가적인 분석이 필요하다. 예) 아이스크림 판매량과 선풍기 판매량의 상관 관계 - “기온”이라는 제 3의 변수가 있음 예) 폭행 사건과 폭력적인 영상물 시청의 상관 관계 - 폭력적인 영상을 시청해서 폭행을 한 건지, 원래 폭력적인 사람이기 때문에 폭력적인 영상물을 많이 본 건지 알 수 없..
2024.02.19 -
두 개의 분포를 보이는 데이터에 적합한 회귀 모델 만들어보기 (python)
1. 상황 가정 회귀 예측 문제를 해결하다 보면 y가 아래와 같은 분포를 가질 때가 있다. 두 종류의 제품이 섞여있는 품질 데이터라던가, 서로 다른 연도에 벌어졌던 리그의 득점 데이터가 그 예가 될 수 있겠다. 이런 상황에서 아래와 같은 가정을 해보았다. - 중심을 기준으로 데이터를 좌우로 나누는 예측을 해볼 수 있지 않을까? - 좌우로 나누는데 성공했다면 개별 분포 내에서 회귀 예측을 하면 더 정확하지 않을까? 물론 이건 가정일 뿐, 실제 실험을 해보아야 하며 데이터마다 다른 결과를 낼 수 있다는 점은 유의해야 한다. 2. 모델 만들기 나누는 기준(중심) 부근에서 어떻게 모델을 만들지 두 가지 전략을 정했다. - 중심 기준으로 정직하게 좌우로 나눠서 좌우를 분류하는 모델과 좌우 각각에서 모델을 만드는 ..
2024.02.07 -
MultilabelPredictor 만들어보기 (python)
0. 왜 필요해? 동일한 테이블 데이터셋에서 예측하고 싶은 값이 여러 개일 때가 가끔 생긴다. 예를 들면, 기상 상태와 등장하는 선수의 스탯 등으로 야구 경기를 예측하는데 안타 수와 홈런 수를 동시에 예측해보고 싶을 수 있다. 그러면 데이터는 하나인데 각각의 모델을 별개로 만들어줘야한다. 물론 어려운 게 아니기 때문에 모델 각각 만들어서 예측하거나 혹은 scikit-learn의 `MultiOutputRegressor` 등으로도 만들 수 있지만 전자는 번거롭고 후자는 커스텀이 아쉽다. 그래서 번거로움을 줄일 수 있으면서 내가 직접 커스텀할 수 있는 `MultilabelPredictor` 클래스를 만들어보았다. 1. `MultilabelPredictor` 클래스 1-1. 라이브러리 호출 본인의 입맛에 맞게 ..
2024.02.06 -
머신러닝에서의 Estimator와 Predictor의 차이
머신러닝 모델은 Estimator? Predictor? 데이터 분석, 특히 scikit-learn의 모델을 갖고 놀다보면 estimator와 predictor를 혼용해서 쓰곤 한다. 어떤 예제에서는 `estimator.fit()`을 하고 어떤 예제에서는 `predictor.predict()`를 한다. 분명 둘의 차이가 있고 느낌은 오는데 명확하게 답하기가 어렵다. 그래서 scikit-learn 공식 문서와 다른 글들을 참고하여 정리해보았다. Estimator 추정기 가지고 있는 데이터로 값 또는 데이터 사이의 관계 등을 추정하는 것 예시 표본 평균은 모평균을 “추정”하는 값 머신러닝의 모델을 학습/생성하는 과정 딥러닝의 weights를 업데이트 하는 과정이 추정(관계를 추정) 일반적으로 `.fit()` ..
2024.02.01