분류 전체보기 27

[2022 빅콘테스트] 앱 사용성 데이터를 통한 대출신청 예측분석 - 고객 군집화

이번 공모전에서 내가 주도적으로 맡은 부분은 바로 고객 군집화 부분이다. 먼저 앱을 통하여 대출신청을 받으려는 사용자들을 군집별로 나누기 위해 먼저 log_data 테이블을 살펴보았다. log_data의 event 변수는 사용자들의 활동을 로그로 기록한 변수이며, 기록된 최종 활동이 고객의 특성을 예측하는 데에 사용될 수 있는 변수로 판단되어 이를 우선 Label encoding으로 변환하였다. event 변수의 데이터 고유값이 생각보다 다양하였기 때문에 직접 앱을 실행해서 어떤 화면이 어떤 event로 기록되는 지 살펴보았고, 다음과 같은 프로세스맵을 만들어낼 수 있었다. 빨간색 블럭으로 표시한 부분이 최종 행동일 것이라는 가설 하에 5개의 event를 제외한 나머지 event들은 삭제해 주었다. 또한..

[2022 빅콘테스트] 앱 사용성 데이터를 통한 대출신청 예측분석 - Modeling

모델에 넣고 성능을 확인하기 전, 상관계수를 분석하고 히트맵으로 시각화하는 과정을 통해 변수 간 상관관계를 분석하였다. 변수 간 상관관계가 높은 것이 있으면, PCA(차원축소)를 진행해 주어야 한다. 서로간의 상관관계가 높게 나온 변수들이 없으므로 PCA(차원축소)는 진행하지 않고 분석을 진행하였다. 모델 선택에 있어서 트리 기반 앙상블 모델인 XGBoost 모델과 LightGBM 모델을 놓고 고민하였다. 두 모델 모두 앙상블 학습으로 여러 개의 트리를 결합하여 분석하는 모델이다. 이전 개인회생여부와 개인회생납입여부의 결측치를 예측할 때 user_spec데이터를 train data로 사용하였을 경우 XGBoost 가 더 나은 성능을 보여준 바가 있다. 하지만 그때와는 달리 user_spec 과 loan_..

[2022 빅콘테스트] 앱 사용성 데이터를 통한 대출신청 예측분석 - 데이터 전처리 (2)

모델의 성능을 높이기 위해서 우리 팀은 외부 변수를 추가하기로 결정했다. 이 부분에서는 조금 더 많은 도메인 지식이 필요했다. 리서칭을 통해 은행대출과의 상관관계가 높은 수치나 데이터가 있는지 확인해 보았고, 유한수, 정재호, "주택시장에서의 매매가격지수와 소비심리지수의 관계", 부동산연구, vol.25, no.4, pp. 49-61, 한국부동산연구원, 2015 박연우, 방두완, "주택가격과 은행대출의 상관관계에 관한 연구", 금융연구, vol.26, no.1, pp. 107-141, 한국금융학회, 2012 위 두 논문을 통해 소비자 심리지수와 은행대출과의 상관관계가 높다는 배경적 이론지식을 확인하였다. 따라서 우리 팀은 소비자 물가지수를 파생변수로 추가하여 모델의 성능을 높이고자 하였다. a = {'2..

[2022 빅콘테스트] 앱 사용성 데이터를 통한 대출신청 예측분석 - 데이터 전처리 (1)

데이터 전처리 부분은 우리 팀에서 어느 정도 데이터 처리에 대한 지식이 있으신 인태 형님과 용훈 형님이 대부분 전담하게 되었다. 나는 선배들의 설명을 들으면서 흐름을 정리하고 파생변수 생성과 피쳐 선택에 도움을 줄 수 있는 도메인 지식을 수집하였다. 아래는 형님들께서 진행한 전처리 과정의 간략한 흐름이다. 먼저 user_spec 컬럼의 연속형 변수들의 이상치를 확인하였고, IQR 방식을 활용하여 이상치를 제거해 주었다. 결측치를 대치하거나 예측하는 과정에서 이상치의 존재는 불확실성을 더해주기 때문이다. def dr_outlier(df): quartile_1 = df.quantile(0.25) quartile_3 = df.quantile(0.75) IQR = quartile_3 - quartile_1 co..

[2022 빅콘테스트] 앱 사용성 데이터를 통한 대출신청 예측분석 - 문제 파악 및 데이터 살펴보기

2022 빅콘테스트 퓨처스부문에 참가하게 되었다. 데이터 분석에 대하여 아는 바가 거의 없었지만 맨땅에 헤딩하는 심정으로 참여하게 되었고, 감사하게도 같은 과 선배들이 팀원으로 받아들여주셨다. 대회 문제는 아래와 같다. 앱 사용성 데이터를 통한 대출신청 예측분석 가명화된 데이터를 기반으로 고객의 대출상품 신청여부 예측 (2022년 3~5월 데이터제공 / 2022년 6월 예측) 예측모델을 활용하여 탐색적 데이터 분석 수행 대출신청, 미신청 고객을 분류하여 고객의 특성 분석결과 도출 크게 두 가지의 문제로 나누어 볼 수 있는데, 하나는 고객의 대출상품의 신청여부를 예측하는 이진분류 문제, 다른 하나는 고객의 특성 분석결과를 도출하는 클러스터링 문제이다. 먼저 데이터테이블 정의서를 통하여 데이터를 탐색해보았다..

[백준/파이썬] 4673 셀프 넘버 : set, sort(), sorted()

문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다. 33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ... n을 d(n)의 생성자라..

Study/백준 2023.01.13

[백준/파이썬] 4344 평균은 넘겠지 : f-string 사용법

문제 : 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 입력 : 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다. 출력 : 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. C = int(input()) for i in range(C): arr = list(map(int, input().split())) t = 0 avg = sum(arr[1:]) / arr[0] for x in arr[1:]: ..

Study/백준 2023.01.13

느낀 점, 보완점

혼공머신으로 아주 간단한 머신러닝 기법들을 공부한 뒤, 빅콘테스트에 이어 모델들을 실제로 사용해 볼 경험으로 삼아 나가본 데이콘 대회. 실제 데이터를 받아보고 제공된 baseline 코드를 살펴보니, 정형 데이터임에도 불구하고 딥러닝 기반 학습을 이용한 방식이어서 놀랐다. 제공된 데이터 자체는 빅콘테스트보다 다루기 쉬웠다. 하지만 훈련에 제공된 feature와 test할 때의 feature가 다르다는 점, (feature가 일부로 제한됨) 과대적합 문제를 해결하기 어렵다는 점 등에서 모델링은 빅콘테스트보다 훨씬 어렵게 느껴진 것 같다. 실제로 공유된 코드를 살펴보면 데이터 전처리보다는 모델링에 신경을 많이 쓴 사람들이 많았다. 나는 이번에 결국 baseline 코드에서 하이퍼파라미터만 살짝 수정한 방식으..

Modeling (2) 과대적합 해결, 최종 제출본 완성

baseline을 이용하여 모델을 학습시켜 보니, train set에서는 f1 score가 79~ 80점대로 형성되는 반면, validation set에서는 f1 score가 50~51점대로 형성되는 것을 확인할 수 있었다. 이는 상당히 과대적합되어있다고 판단되어, 딥러닝 학습에서 over fitting을 해결하는 방법에 대해 탐색해 보았다. 또한 전처리 과정을 하나하나 넣어서 모델을 학습시켜보니 isolation forest기법을 이용한 이상치 처리는 데이터의 유실이 많아서 그런지 과소적합 현상이 발생하여 이상치는 따로 처리해 주지 않는 방향을 선택하였다. 3) Under/Over-fitting 해결방법 Overfitting Overfitting(과대적합)이란 모델이 Train set 에서는 좋은 성능..

Modeling (1) Baseline 분석

모델링은 DACON에서 제공하는 Baseline 코드를 활용하였다. Baseline 코드는 Knowledge Distillation 방법 중 가장 기본적인 방법을 적용하다. 즉, 모든 Feature가 주어지는 학습데이터로부터 Teacher 모델을 학습시키고 추론 시에는 제한된 Feature로 이루어지기 때문에, 제한된 Feature로부터 추론해야하는 Student 모델을 Teacher 모델의 결과를 바탕으로 지식 증류가 이루어진다. '지식 증류(Knowledge Distillation)'의 방식은 상당히 여러가지가 제안되어 있고, 참가자들의 가설과 실험에 의해 충분히 새로운 방법도 제안될 수 있다. import torch import torch.nn as nn import torch.nn.function..