ml
Data Leakage
Data Leakage Data Leakage 훈련 데이터셋의 피처 집합에 레이블(정답) 정보가 들어있으나, 추론 시에는 이 피처 집합을 사용할 수 없는 문제를 데이터 누수 라고 함 A 병원의 데이터에서는 좋은 기계에서 사진을 찍은 사람이 암 발생률이 높음 그러나 추론하는 B 병원의 데이터에서는 이런 정보가 없는 경우 원인 주로 훈련 / 학습 데이터를 잘못 분리하는 경우 발생 시간 상관관계가 있는 데이터에서 이를 무시하고 무작위로 데이터를 분할한 경우 데이터를 분할 하기 전에 스케일링한 경우 훈련 데이터가 아닌 테스트 데이터를 이용해 결측값을 채운 경우 분할 전 데이터 중복을 제대로 처리하지 않아 train과 test 데이터에 같은 데이터가 있는 경우 같은 그룹에 있어야 하는 데이터가 train / test에 나뉘어져 들어가는 경우 데이터가 생성되는 과정에서 누수가 생긴 경우: 이 경우는 파악이 굉장히 힘듦 누수 검출 및 대응 찾고자 하는 label 에 대한 feature와의 상관 관계를 파악해야 함 만약 상관관계가 비정상적으로 높다면, 조사해 볼 필요가 있음 테스트 분할을 함부로 사용하면 안됨 특히 테스트 분할 시점을 hyperparameter로 두어 튜닝하는 끔찍한 방법은 절대 금지 References 칩 후옌 - 머신 러닝 시스템 설계 기타 2023-09-10 내용 중 모호한 부분을 이해를 바탕으로 수정
read moreml
Pandas TimeStamp to Time Zone
Pandas TimeStamp to Time Zone Pandas TimeStamp to Time Zone Pandas에서 Timestamp를 시간으로 바꾸는 경우, UTC+0 기준의 datetime이 설정됨 이렇게 바뀐 시간을 특정 time zone으로 바꾸고 싶다면, 다음과 같이 하면 됨 timestamp를 datetime으로 변경 datetime을 tz_localize를 통해 UTC 시간으로 변경 tz_convert를 통해 특정 timezone으로 변경 import pandas as pd df = pd.DataFrame({"some_timestamp" : [160000000]}) df["date_time"] = pd.to_datetime(df["some_timestamp"], unit="ms") df["converted_date_time"] = df["date_time"].dt.tz_localize("UTC").dt.tz_convert("Asia/Seoul") References https://stackoverflow.com/questions/42826388/using-time-zone-in-pandas-to-datetime
read moreml
LightGBM
LightGBM LightGBM 의사결정나무 기반의 Gradient Boosting 프레임워크로, Gradient Boosting Model의 경량화 버전 의사결정나무를 확장하는 데 있어, 기존과 달리 균형을 맞추지 않음 정보의 손실이 가장 큰 leaf를 하나씩 분할해 가며 확장하므로, 다른 모델보다 가벼움 다른 모델에 비해 빠른 학습 속도, 적은 메모리를 가짐 대용량 데이터를 처리 가능 Overfitting이 쉬우므로, 큰 데이터에 사용할 것이 추천됨 Kaggle에서 고득점에 많이 사용되는 알고리즘 References https://nurilee.com/2020/04/03/lightgbm-definition-parameter-tuning/ https://for-my-wealthy-life.tistory.com/24 https://mac-user-guide.tistory.com/79
read moreml
Pandas to_numeric
Pandas to_numeric Pandas to_numeric pandas에서 to_numeric 메서드는 값을 수치 값으로 변경 반환시 값을 float64 혹은 int64 dtype 으로 변경 downcast를 지정해주면 원하는 dtype 으로 설정 가능 downcast에는 integer, signed, unsigned, float가 올 수 있음 int64 범위 외의 정수값이 입력되는 경우, 웬만해서는 float64로 변환됨 errors를 지정해주면, 잘못된 값이 들어온 경우 반환될 값 / 행동을 정할 수 있음 raise: 예외 발생 coerce: 잘못된 값을 NaN으로 처리 ignore: 잘못된 값을 그대로 반환 References https://pandas.
read moreml
Data Sampling
Data Sampling Data Sampling 머신 러닝에서 데이터 샘플링은 여러 경우에 사용됨 전체 데이터에서 훈련, 검증, 테스트 데이터로 분리하는 작업 전체 데이터를 모두 사용하기 힘들어서 일부 데이터만 사용하는 경우 다음과 같은 샘플링 방법 존재 비확률 샘플링 확률이 아닌 기준에 의거해 데이터를 샘플링하는 방법 실제 데이터를 잘 표현하지 못할 수 있고, 편향이 생길 수 있음 단순 무작위 샘플링 모든 데이터의 샘플이 선택될 확률이 동일한 방법 구현이 쉬우나, 드물게 나타나는 데이터가 샘플링된 데이터에 나타나지 않을 수 있음 계층적 샘플링 데이터를 여러 상이한 성질의 그룹으로 나눈 뒤, 각 그룹에서 일정 비율로 샘플링하는 방법 무작위 샘플링과는 달리 드물게 나타나는 데이터가 반영됨 특정 샘플이 여러 그룹에 속하는 경우, 사용이 불가능한 방법 가중 샘플링 각 샘플에 가중치를 두어 샘플링하는 방법 특정 샘플이 더 중요한 경우 유용하며, 도메인 지식 사용 가능 저수지 샘플링 데이터가 계속 생성되는 스트리밍 데이터 등에서 사용 가능한 방법 저수지라는 곳에 데이터를 뽑아 놓고, 새 데이터가 들어오는 경우 난수를 이용해 데이터가 저수지에 들어올지 결정 저수지에 들어오게 된다면, 기존 데이터와 교체하게 됨 모든 데이터가 샘플링될 확률이 동일하게 보장됨 중요도 샘플링 확률 분포 P(x)에서 x를 샘플링해야 하는데, 이 비용이 크고 어려운 경우 x를 Q(x)에서 샘플링 한 후, 가중치를 P(x) / Q(x)로 둠 References 칩 후옌 - 머신러닝 시스템 설계
read moreml
Regression Metrics
Regression Metrics Regression Metrics 회귀 문제에서는 예측과 정답간의 차이를 평가하기 위한 평가 지표가 필요 MSE, MAE, RMSE 등이 존재 MSE: Mean Square Error 오차의 제곱의 평균 오차를 제곱하므로, 아웃라이어 하나가 있을 때 큰 영향을 받음 RMSE: Root Mean Square Error MSE의 제곱근 MSE값을 실제 값과 유사한 단위로 변환한다는 의미 존재 RMSLE: Root Mean Square Log Error log(예측값 + 1) 과 log(실제값 + 1) 의 차이의 제곱의 평균 log를 사용하므로, 아웃라이어에 덜 민감함 상대적 비율을 측정하는 의미가 있음 100과 10의 차이가 1000과 100의 차이와 같음 값이 0 이하가 되지 않는 경우에만 사용 MAE: Mean Absolute Error 오차의 절대값의 평균 MSE보다 아웃라이어에 덜 민감 References https://steadiness-193.
read moreml
LR Scheduler
LR Scheduler LR Scheduler 머신 러닝에서는 learning rate(lr)는 아주 중요한 존재, 이 값이 너무 크거나 작으면 학습이 안 됨 이 lr을 처음부터 끝까지 같은 값으로 사용할 수도 있음 그러나 변화의 폭이 큰 초반에는 큰 lr을, 폭이 작은 후반에는 lr을 작게 설정하는 것이 좋을 수 있음 혹은 계속 lr을 변화시키는 방법도 효과적일 수 있음 이렇게 learning rate를 계속 변경해주는 라이브러리로 learning rate scheduler 등장 pytorch에서는 매 epoch마다 scheduler.step()을 실행해 주면 됨 Optimizer과는 다른 개념!
read moreml
Modin (Pandas)
Modin (Pandas) Modin (Pandas) Pandas에서 코드 교체 없이 성능을 업그레이드 할 수 있는 라이브러리 이를 drop-in replacement라고 함 멀티 코어를 사용하게 함으로 인해, pandas의 성능을 높임 read_csv 등의 메소드 속도가 빨라짐 pip install modin[all]을 통해 설치 import modin.pandas as pd 로 import하는 부분만 바꾸면 됨 References https://github.com/modin-project/modin
read moreml
Feature Engineering Methods
Feature Engineering Methods Feature Engineering Methods Feature engineering에는 다음과 같은 방법 존재 결측값 처리 결측이 발생한 행 / 열 삭제 결측값 대치 (Imputation) 스케일링 각 feature를 유사한 범위로 스케일링 하는 행위 값을 [0, 1] 사이로 조정하는 min max 스케일링 방법 존재 데이터가 정규 분포를 따르는 경우, 표준화를 통해 평균이 0, 표준편차가 1인 표준 정규 분포를 따르도록 정규화 가능 Feature가 비대칭 분포를 따르는 경우, 로그 변환을 적용할 수 있음 그러나 이 방법은 모든 경우에 동작하지는 않음 이산화 연속된 데이터를 특정 범주들로 나누는 행위 도움이 되는 경우가 많지는 않음 데이터를 3000 미만, 3000 이상으로 나누면, 2999와 3000의 차이는 1과 99999999999 의 차이와 동일 범주 경계를 선택하기 어려우며, 도메인 지식을 사용해야 할 수도 있음 범주형 피쳐 인코딩 성별, 브랜드 등 범주형 피쳐를 처리하는 방법 범주가 일정한 경우에는 큰 문제가 없지만, 범주가 변하는 경우에는 다루기 어려움 한 가지 트릭은 Hashing을 사용하는 것 Feature 교차 둘 이상의 feature를 결합해 새로운 feature 생성 변수 간의 비선형 관계를 모델링 시 유용 위치 임베딩 단어의 위치를 임베딩 References 칩 후옌 - 머신 러닝 시스템 설계
read moreml
Feature Engineering
Feature Engineering Feature Engineering Feature Engineering이란 raw 데이터로부터 feature(특징)를 뽑아내는 과정 딥 러닝에서는 이런 feature를 뽑아내는 과정을 스스로 학습하면서 배울 수 있음 수작업으로 feature를 뽑아내지 않아도 됨 그러나 모든 feature를 자동화해서 뽑아내는 것은 아직 먼 일 도메인 지식을 바탕으로, 수동 작업이 여전히 필요 결측값 처리, 스케일링, 이산화, 범주형 feature 인코딩 등 전처리는 여전히 필요 References https://en.wikipedia.org/wiki/Feature_engineering 칩 후옌 - 머신 러닝 시스템 설계
read more