오늘의 issue

* 시간(time: 상대적인 시간) 컬럼을 어떻게 정의할 것인가?
구체적인 전처리와 EDA를 진행하기에 앞서서 컬럼에 대한 정의와 이해가 팀 적으로 동일하게 셋팅이 되어야 한다는 점을 오늘을 지나면서 깨닫게 되었다. 서로 다른 시간에 대한 이해로 인해서 추가적인 전처리를 진행하게 되었다.
각 피쳐를 어떻게 정의하느냐에 따라 분석의 내용도 달라질 수도 있고, 연결되어 생기는 파생컬럼도 다르게 계산될 수 있기 이에 대해 민감하게 반응할 수 밖에 없는 것 같다.
사실은 아직도 시간 컬럼에 대해서 이해가 완벽하게 되었다고는 말할 수는 없겠지만, 튜터링 시간에 정리된 내용을 입력값으로 받아 인지하고 그 방향대로 진행해야 한다.
* S.A님의 시간에 대한 해석
* T.K님의 시간에 대한 해석은 튜터님과 같다.
튜터링 시간에 정의된 시간(time)은 아래와 같다.
시간(time)은 "고객이 해당 프로모션에 반응하는 상대적인 시간"으로 프로모션이 시작되고서 바로 반응하는 사람은 0부터 시작할 수도 있고, 시간이 흐른뒤에 반응하는 사람은 가령 336 부터 시작할 수도 있는 것.
프로모션유효기간(일)을 24시간으로 곱하여 시간으로 환산하면 그 값은 "프로모션 만기까지의 시간"으로 볼 수 있을 것이고, 이를 시간(time)과 비교를 해야만 한다면, (비록 상대적인 값이지만) 시간(time)도 시간 단위로 보고 비교해야 하는 게 맞는 것 같다.(튜터님의 의견)
🤔 두 가지 모두 일리가 있고 이해는 가지만, 상대적인 시간을 어떤 단위로 두고 해야하는지는 계속 의문이긴 하다.
진행 사항
오늘도 나는 로지스틱 회귀분석을 진행했다. 하면서 알게 된 내용은 다음과 같다.
1.
처음에는 종속변수를 [전환여부]를 두고 로지스틱 회귀분석 결과를 뽑아냈으나, 클래스 불균형으로 R2나 수정된 R2 값이 상당이 높 (0.8) 나왔으며, ROC Curve 도 결과가 이상하게 나옴
▼ ROC Curve - Logistic Regression 그래프
2.
튜터님의 피드백으로 [거래여부]로 한번 뽑아보는 게 어떻겠냐는 의견이 있었고 팀원들과 논의 끝에 그렇다면 [프로모션_거래여부]를 종속변수로 두고 다시 해보자는 결론이 나왔음.
# 프로모션 관련 거래 건 정의
# 이벤트유형에서 거래가 이루어 진 것 & 프로모션유형에서 거래가 아닌 것들 ==> 프로모션 관련 거래
# 1. 종속변수: 프로모션_거래여부 : 이진화 (1과 0)
trans = df[df['이벤트유형'] == '거래'] # 약 12만 건
trans['프로모션_거래여부'] = np.where((trans['프로모션유형'] != '거래'), 1, 0)
trans.head()
3.
근데 지금 [프로모션_거래여부] 분포를 확인해보니 불균형이 심각해보임.
→ 이럴 경우, 로지스틱 회귀는 단순히 "거래 없음(0)"쪽으로 예측해도 높은 정확도를 보임
→ 모델이 실제 전환(1)을 거의 잡지 못하는 문제가 발생
4.
클래스 불균형이 심할 경우 class_weight='balanced' 로 불균형 조정(가중치 부여) 할 수 있음
log_reg = LogisticRegression(max_iter=1000, class_weight='balanced', solver='lbfgs', C=0.1)
회고
역시나 컬럼에 대한 정리와 이해는 어찌보면 팀 의사소통의 문제일 수도 있겠다. 커뮤니케이션스킬 정말정말 중요하다.
내일 할 것
시간에 대한 정리와 추가 전처리가 완료되면 팀원들과 의논해야 함.
'프로젝트' 카테고리의 다른 글
| [프로젝트 #3-6] 전처리는 절찬 진행 중, 통계 분석 (0) | 2025.11.06 |
|---|---|
| [프로젝트 #3-3] 회귀분석 odds ratio / R square (0) | 2025.11.04 |
| [프로젝트 #3-2] 탐색적 그리고 심층 EDA - 취합 및 방향 설정 (0) | 2025.11.03 |


