Table of Contents
IV: Information Value
Classification에서 "IV"는 일반적으로 Information Value를 의미합니다. Information Value는 변수와 목표 변수(종속 변수) 간의 관계를 평가하는 데 사용되는 통계적 측정치입니다. 이는 주로 신용 점수 모델링이나 이진 분류 문제에서 변수 선택 및 모델의 예측력을 평가하는 데 사용됩니다.
Information Value는 주어진 변수의 각 범주에 대해 좋은 사건(good)과 나쁜 사건(bad)의 비율 차이를 계산하여 그 변수의 예측력을 나타냅니다. IV 값이 높을수록 그 변수는 목표 변수를 잘 설명할 수 있음을 의미합니다.
IV 값의 해석은 다음과 같습니다:
- IV < 0.02: 매우 낮은 예측력
- 0.02 ≤ IV < 0.1: 낮은 예측력
- 0.1 ≤ IV < 0.3: 중간 예측력
- 0.3 ≤ IV < 0.5: 높은 예측력
- IV ≥ 0.5: 매우 높은 예측력
Information Value는 다음과 같은 수식으로 계산됩니다:
[ IV = \sum (WOE_i \times (P(Good)_i - P(Bad)_i)) ]
여기서,
- ( WOE_i )는 Weight of Evidence로, 각 범주에 대한 WOE 값을 나타냅니다.
- ( P(Good)_i )와 ( P(Bad)_i )는 각각 해당 범주의 좋은 사건과 나쁜 사건의 비율입니다.
WOE는 다음과 같이 계산됩니다:
[ WOE_i = \ln\left(\frac{P(Good)_i}{P(Bad)_i}\right) ]
이와 같은 방법으로 Information Value는 변수의 예측력을 정량적으로 평가하는 유용한 도구가 됩니다.
IV 파이썬 코드
Information Value (IV)를 계산하는 예시 코드를 Python으로 보여드리겠습니다. 이 예제에서는 Pandas와 NumPy 라이브러리를 사용하여 간단한 데이터셋에 대해 IV를 계산합니다.
import pandas as pd
import numpy as np
# 예제 데이터셋 생성
data = {'feature': [1, 2, 2, 1, 2, 3, 3, 3, 1, 2],
'target': [0, 0, 1, 0, 1, 1, 0, 1, 0, 1]}
df = pd.DataFrame(data)
# 변수와 목표 변수를 지정
feature = 'feature'
target = 'target'
# 범주별 데이터 계산
grouped = df.groupby(feature)[target].agg(['count', 'sum'])
grouped.columns = ['total', 'bad']
grouped['good'] = grouped['total'] - grouped['bad']
# 전체 좋은 사건과 나쁜 사건의 수 계산
total_good = grouped['good'].sum()
total_bad = grouped['bad'].sum()
# 각 범주에 대한 비율 계산
grouped['good_rate'] = grouped['good'] / total_good
grouped['bad_rate'] = grouped['bad'] / total_bad
# Weight of Evidence (WOE) 계산
grouped['WOE'] = np.log(grouped['good_rate'] / grouped['bad_rate'])
# Information Value (IV) 계산
grouped['IV'] = (grouped['good_rate'] - grouped['bad_rate']) * grouped['WOE']
information_value = grouped['IV'].sum()
print(f'Information Value for {feature}: {information_value}')
print(grouped)
이 코드는 다음과 같은 작업을 수행합니다:
- 간단한 데이터셋을 생성합니다.
- 각 범주별로 좋은 사건과 나쁜 사건의 수를 계산합니다.
- 각 범주에 대한 좋은 사건 비율(good_rate)과 나쁜 사건 비율(bad_rate)을 계산합니다.
- 각 범주에 대한 Weight of Evidence (WOE)를 계산합니다.
- Information Value (IV)를 계산하고 출력합니다.
코드를 실행하면 주어진 데이터셋에 대한 IV 값이 출력됩니다. 각 범주에 대한 WOE와 IV 값을 확인할 수도 있습니다.
IV값을 활용하는 방법: 파이썬 코드
Information Value (IV)를 계산한 후, 다음 단계에서는 IV 값을 활용하여 변수를 선택하고 모델을 개선하는 작업을 진행할 수 있습니다. IV 값은 각 변수의 예측력을 나타내므로, 이를 기반으로 변수를 선택하거나 모델링에 활용할 수 있습니다. 아래는 IV 값을 활용하는 몇 가지 방법입니다.
1. 변수 선택
IV 값을 기준으로 모델에 포함할 변수를 선택할 수 있습니다. 예를 들어, IV 값이 특정 임계값보다 낮은 변수를 제거하여 모델의 복잡성을 줄이고 성능을 개선할 수 있습니다.
예시
# IV 임계값 설정
iv_threshold = 0.1
# IV 값이 임계값 이상인 변수 선택
selected_features = [feature for feature, iv in iv_dict.items() if iv >= iv_threshold]
print(f'Selected features based on IV threshold: {selected_features}')
2. 변수 변환
IV 값을 활용하여 변수를 변환하거나 범주형 변수를 이진 변수로 변환하는 작업을 할 수 있습니다. 예를 들어, WOE 값을 사용하여 변수를 변환하면 모델의 성능을 향상시킬 수 있습니다.
예시
# WOE 값을 이용한 변수 변환
df['feature_woe'] = df['feature'].map(grouped['WOE'])
print(df)
3. 모델링
변수를 선택하거나 변환한 후, 이를 사용하여 예측 모델을 구축할 수 있습니다. 일반적으로 IV 값을 사용하여 변수를 선택한 후 로지스틱 회귀, 의사결정 나무, 랜덤 포레스트 등의 모델을 학습시킵니다.
예시
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
# 데이터 분할
X = df[['feature_woe']]
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 로지스틱 회귀 모델 학습
model = LogisticRegression()
model.fit(X_train, y_train)
# 예측
y_pred = model.predict(X_test)
# 성능 평가
print(classification_report(y_test, y_pred))
4. 피쳐 엔지니어링
IV 값을 기반으로 피쳐 엔지니어링을 통해 모델 성능을 개선할 수 있습니다. IV 값이 높은 변수를 조합하거나 상호작용 항을 추가하여 모델의 설명력을 높일 수 있습니다.
예시
# 새로운 피쳐 생성 (예: 상호작용 항 추가)
df['new_feature'] = df['feature_woe'] * another_feature_woe
# 다시 모델링에 사용
X = df[['feature_woe', 'new_feature']]
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 로지스틱 회귀 모델 학습 및 평가
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))
이와 같이 IV 값을 활용하면 변수 선택, 변수 변환, 모델링 및 피쳐 엔지니어링 등 다양한 방식으로 모델의 성능을 개선할 수 있습니다.
'Python' 카테고리의 다른 글
ImportError: cannot import name 'if_delegate_has_method' from 'sklearn.utils.metaestimators' (0) | 2024.07.15 |
---|---|
데이터셋 업데이트 하는 방법 (0) | 2024.07.15 |
[파이썬] 날짜 형식 datetime (0) | 2024.05.10 |
[파이썬] 누락된 일자데이터를 이전 날짜데이터로 채우기 (0) | 2024.05.10 |
3 x 3 행렬 numpy array배열을 만드려면? (0) | 2024.05.07 |
- Total
- Today
- Yesterday
- recursion #재귀 #자료구조 # 알고리즘
- #패스트캠퍼스 #패스트캠퍼스AI부트캠프 #업스테이지패스트캠퍼스 #UpstageAILab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- Transformer
- 해시
- nlp
- 리스트
- cnn
- 티스토리챌린지
- speaking
- Python
- Lora
- LLM
- PEFT
- RAG
- 오블완
- clustering
- #패스트캠퍼스 #패스트캠퍼스ai부트캠프 #업스테이지패스트캠퍼스 #upstageailab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- 파이썬
- Hugging Face
- LIST
- Numpy
- 코딩테스트
- #패스트캠퍼스 #UpstageAILab #Upstage #부트캠프 #AI #데이터분석 #데이터사이언스 #무료교육 #국비지원 #국비지원취업 #데이터분석취업 등
- English
- git
- Array
- Github
- classification
- 손실함수
- t5
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |