ailys의 AI 데이터 분석 시스템, DAVinCI Labs를 돌려보자!
백문이 불여일견! 우리의 자랑 다빈치랩스 구현과정을 구경해보시죠~
Lending Club가 제공한 오픈데이터는 Kaggle이나 Github와 같은 데이터 분석 플랫폼에서 적극 활용됩니다. 데이터사이언티스트들 뿐만 아니라 데이터 꿈나무들에게도 두고두고 유용하게 쓰이고 있죠. 이 Lending Club 데모 데이터를 다빈치랩스에 적용시켜 결과를 살펴봅시다.
다빈치랩스의 특성은 지도학습을 통해 결과값 예측을 한다는 것입니다. 정형 데이터(tabular data)인 CSV형식의 파일을 업로드하면 목표변수(우리는 '타겟필드'라는 표현을 씁니다)를 산출하며, 가장 적합한 알고리즘, 그리고 변수들의 상관성 또한 파악해줍니다. 차근차근 H20.ai와 비슷하고도 다른 방식으로 다빈치랩스를 돌려보시죠.
1. 데이터 세트 업로드
기계를 공부시키기 위한 첫번째 과정
우선 원하는 결과값을 얻기 위해서는 기계를 학습시키는 과정이 필요합니다. A는 ㄱ, B는 ㄴ의 결과가 나온다 식의 공식을 학습시켜야 하는 거죠. 무에서 유를 창조할 수는 없으니까요. Lending Club 데이터셋을 엑셀 파일 형식으로 업로드해 보겠습니다.
◆ 하나의 데이터셋을 8:2의 비율로 나누어놓습니다. 이 비율은 예측 모델링을 할 때 일률적으로 적용되는 수치로, 각각 훈련(train)과 테스트(test)의 비중에 해당합니다. 예를 들어 하나의 문제집을 8:2 비율로 나누어 8로는 공부를, 나머지 2로는 시험을 보는 것이죠. 추가적인 내용은 '2. 모델 생성'에서 보완하겠습니다.
문제집 한 권이 100쪽이라면 80쪽으로 공부를 하고 남은 20쪽으로 시험을 본다!


하나의 csv파일을 8:2로 쪼개어 저장해놓습니다. 학습과정에는 이 train 파일을 사용할게요!
우선 사용할 원본 데이터 파일(lendingclub_train)을 업로드해야겠죠? 미리보기로 본인이 고른 파일을 검토할 수 있습니다. 잘 입력됐네요.
파일이 잘 올라갔으면 이제 공식의 종속변수가 무엇인지 설정해줘야합니다. 우리가 예측하고자 하는 내용은 '과연 고객이 대출금을 성실하게 갚을 것인지, 고스란히 꿀꺽 삼킬 것인지'이기 때문에 위에서와 같이 loan_status를 타겟 필드(종속변수)로 선택합니다.

우리의 타겟필드(종속변수이자 y값)는 loan_status(채무 이행 여부)!
그 다음은 무시변수 설정입니다. 우리에게는 'dti(총부채 상환 비율)', '연간소득'같은 중요정보부터 '사용자 아이디', '주소지'같은 부수적인 정보까지 포함한 총 26개의 입력 변수가 있어요. 이 중 중요하지 않아 학습과정에서 제외시킬 변수들은 '무시변수'로 설정해줍니다. 예를 들어 밑 그림에 나오는 'desc'는 description의 줄임으로서, 고객들의 요청사항을 길게 줄글로 표현한 것에 불과하죠. 전혀 모델구축에 도움을 주지 않으므로 참고사항에서 제외시킵니다.


desc(부가설명), zip_code(우편번호),add_state(거주 주)등의 변수는 채무 이행과 상관이 없으므로 '무시함'으로 설정합니다.
2. 모델 생성
학습한 내용을 바탕으로 공식틀을 만들어보자!
다빈치랩스는 Stabilized Deep Net부터 LightGBM까지 총 11가지 알고리즘을 제공합니다. 각 알고리즘을 모두 가동시켜 가장 정확도가 높은 것을 고를 수 있습니다. 모든 알고리즘을 시도해 그 중 무엇이 적합한지 살펴보겠습니다.
다빈치랩스는 이러한 분석 알고리즘들을 전부 제공합니다. 이 중 무엇이 가장 적합한지도 알려주죠! 다 체크해볼게요.
◆ 모델링에 본격적으로 착수하기 전 짚고 갈 체크사항!
보통 하나의 데이터 세트에서 80%는 트레인(train)으로, 20%는 테스트(test)로 분배를 합니다. 위에서 거친 데이터 분할 과정 기억하시죠? 그런데 다빈치랩스에서는 그것만으로 끝이 아닙니다. 일반적으로 과적합(overfitting)을 최소화하기 위해 트레인 데이터 중에서도 검증(validation)이라는 과정을 거치는데요,
사진 출처: https://en.wikipedia.org/wiki/Training,_validation,_and_test_sets
다빈치랩스는 비전문가들도 편하게 트레인 모델을 구축할 수 있도록 UX/UI가 디자인되어 있습니다. 굳이 조정 없이도 안내사항대로 클릭만 하시면 이러한 파레토 비율이 적용됩니다! 트레인 데이터 중 랜덤으로 데이터를 추출해 검증을 거치면 더욱 견고해진 예측모델을 생성할 수 있게 되는 것이죠.

개발(train): 검증(validation) = 8:2로 데이터분할이 이미 최적상태로 구비 완료!

열심히 학습 중!
학습을 완료한 기계가 다양한 알고리즘 중 Ridge Regression, 즉 릿지 회귀라는 분석 알고리즘이 0.9996의 정확도를 가지고 있어 가장 적합하다고 추천해주고 있네요. 사용되는 수학적 알고리즘을 이해하지 못하더라도 기계가 추천해주는 방식을 선택하면 척척 진행되니 모델 구현이 한결 편해집니다. (이걸 수기로 작성해가며 하나하나 파악한다고 상상하면...)

학습 결과 릿지 회귀가 가장 적합하다고 나오네요. 이 알고리즘으로 검증세트를 돌려봐야겠어요.
타겟필드인 loan_status에 있어 가장 중요 연관성을 가진 상위 5개 변수도 알 수 있습니다. is_bad라는 필드가 거의 100%에 근접한 중요도를 가지고 있네요.

어떤 상위 5개 변수가 가장 상관성이 높은지를 체크하는 '필드별 중요도'
3. 테스트
기계여 공부했으니 시험을 보거라
학습을 시켰으니 테스트를 해서 원하던 '대출상환여부(체납여부)'를 알아내야죠! 앞부분에 등장한 'lendingclub_train'을 기억하시나요? 문제집의 80%로 학습을 한 뒤 남은 20%으로 시험을 볼 차례가 온 것입니다. 추천받은 알고리즘 '릿지 회귀'로 테스트를 해 볼건데요, 이전에 준비해두었던 20%의 테스트 데이터를 밑의 그림처럼 업로드해줍니다!
이번에는 train이 아니라 test 자료 업로드! 결과가 어떻게 나올까 떨린ㄷr
그렇게 테스트를 돌린 결과는!
여러 알고리즘을 적용하여 나온 경우를 모두 알아볼 수 있습니다. 밑의 첨부그림은 테스트 알고리즘 11가지 중 Ridge Regression을 적용한 결과에 해당합니다.
혼합 매트릭스는 예측값과 실제값간의 일치 정도를 보여줍니다. 결측치가 하나도 없이 전부 예측과 실제값이 맞아떨어지네요.
해당 알고리즘을 적용하여 모델을 돌린 결과, 채무자들의 예측 행동을 한 번 살펴볼까요?
그렇게 원하던 타겟필드! 다행히 첫 열 고객은 전부 대출을 상환할것이라고 뜹니다.


Accuracy (정확도)가 개발 세트는 0.9998, 검증 세트는 1 (이건 통계학적으로 사기입니다...과적합 중에서도 탑급)
모델 중 릿지 회귀라는 알고리즘을 적용한 결과의 정확도가 1에 아주 가까운 수준으로 산출이 됩니다. 이것은 고객정보가 기밀사항이므로 가공을 불가피하게 할 수 밖에 없었던 Lending Club의 데이터셋의 한계에서 비롯된 것으로 볼 수 있습니다. 과적합(overfitting),학습 데이터를 과하게 한 것의 대표적인 예라고 볼 수가 있겠습니다. 그럼에도 불구하고 추천 알고리즘을 통해 모델링을 하고, 높은 정확도까지 보장해준다는 것을 경험상 체크해볼 수 있어 유익합니다.
◆다빈치랩스의 특성 중 하나, 상관관계 차트!!!◆

loan_status는 is_bad와 상관성이 매우 높네요. 거의 쌍둥이수준이므로 중복 제거를 위한 데이터 가공을 할 필요도 있겠네요
서로 연관성을 지닌 변수들을 정리해주는 '상관관계 차트'.
타겟변수(loan_status)와 is_bad라는 변수의 상관성이 1로 나오네요. 풀어 설명하면 loan_status가 "Fully Paid"라면 is_bad의 결과값은 "No"으로 뜬다는 말입니다. 대출금을 잘 갚는 사람은 긍정적으로 인식하기 때문이죠. 반대로 채무 불이행 고객의 경우("Charged Off") is_bad의 값은 "Yes"로 뜹니다. 이렇게 완벽한 하나의 공식처럼 합치하는 경우, 변수상관성이 1로 나옵니다.
이렇게 다빈치랩스를 통해 공공데이터를 머신러닝 모델에 돌려보았습니다. 대표적인 다빈치랩스의 역할은 다음과 같다고 볼 수 있겠습니다:
1. 자동 기계학습을 통한 예측값 도출
-정형데이터를 통한 지도학습 모델을 거쳐

Tabular data를 기계에 학습시키면 예측값 생성
2. 상관변수 차트를 통해 변수간 관계 알 수 있음
-좋은 고객이 가지고 있는 요건들이 무엇인지 알 수 있음
3. 다루는 데이터에 가장 맞춤형인 모델 알고리즘 추천
-11가지 알고리즘 중 가장 좋은 분석틀을 찾아줄게
지금까지 렌딩클럽의 공공데이터를 활용하여 x변수와 y변수의 내용, 기존 데이터 사용 예시, 그리고 마지막으로 다빈치랩스를 직접 돌려본 결과까지 보셨습니다. 통계학적 개념 중 어려운 부분이 있었지만 머신러닝이 실제로 작동하는 하나의 방식을 이해하시는 데에 도움이 되었으면 좋겠습니다.
Lending Club가 제공한 오픈데이터는 Kaggle이나 Github와 같은 데이터 분석 플랫폼에서 적극 활용됩니다. 데이터사이언티스트들 뿐만 아니라 데이터 꿈나무들에게도 두고두고 유용하게 쓰이고 있죠. 이 Lending Club 데모 데이터를 다빈치랩스에 적용시켜 결과를 살펴봅시다.
다빈치랩스의 특성은 지도학습을 통해 결과값 예측을 한다는 것입니다. 정형 데이터(tabular data)인 CSV형식의 파일을 업로드하면 목표변수(우리는 '타겟필드'라는 표현을 씁니다)를 산출하며, 가장 적합한 알고리즘, 그리고 변수들의 상관성 또한 파악해줍니다. 차근차근 H20.ai와 비슷하고도 다른 방식으로 다빈치랩스를 돌려보시죠.
1. 데이터 세트 업로드
기계를 공부시키기 위한 첫번째 과정
우선 원하는 결과값을 얻기 위해서는 기계를 학습시키는 과정이 필요합니다. A는 ㄱ, B는 ㄴ의 결과가 나온다 식의 공식을 학습시켜야 하는 거죠. 무에서 유를 창조할 수는 없으니까요. Lending Club 데이터셋을 엑셀 파일 형식으로 업로드해 보겠습니다.
◆ 하나의 데이터셋을 8:2의 비율로 나누어놓습니다. 이 비율은 예측 모델링을 할 때 일률적으로 적용되는 수치로, 각각 훈련(train)과 테스트(test)의 비중에 해당합니다. 예를 들어 하나의 문제집을 8:2 비율로 나누어 8로는 공부를, 나머지 2로는 시험을 보는 것이죠. 추가적인 내용은 '2. 모델 생성'에서 보완하겠습니다.
하나의 csv파일을 8:2로 쪼개어 저장해놓습니다. 학습과정에는 이 train 파일을 사용할게요!
파일이 잘 올라갔으면 이제 공식의 종속변수가 무엇인지 설정해줘야합니다. 우리가 예측하고자 하는 내용은 '과연 고객이 대출금을 성실하게 갚을 것인지, 고스란히 꿀꺽 삼킬 것인지'이기 때문에 위에서와 같이 loan_status를 타겟 필드(종속변수)로 선택합니다.
우리의 타겟필드(종속변수이자 y값)는 loan_status(채무 이행 여부)!
그 다음은 무시변수 설정입니다. 우리에게는 'dti(총부채 상환 비율)', '연간소득'같은 중요정보부터 '사용자 아이디', '주소지'같은 부수적인 정보까지 포함한 총 26개의 입력 변수가 있어요. 이 중 중요하지 않아 학습과정에서 제외시킬 변수들은 '무시변수'로 설정해줍니다. 예를 들어 밑 그림에 나오는 'desc'는 description의 줄임으로서, 고객들의 요청사항을 길게 줄글로 표현한 것에 불과하죠. 전혀 모델구축에 도움을 주지 않으므로 참고사항에서 제외시킵니다.
desc(부가설명), zip_code(우편번호),add_state(거주 주)등의 변수는 채무 이행과 상관이 없으므로 '무시함'으로 설정합니다.
2. 모델 생성
학습한 내용을 바탕으로 공식틀을 만들어보자!
다빈치랩스는 Stabilized Deep Net부터 LightGBM까지 총 11가지 알고리즘을 제공합니다. 각 알고리즘을 모두 가동시켜 가장 정확도가 높은 것을 고를 수 있습니다. 모든 알고리즘을 시도해 그 중 무엇이 적합한지 살펴보겠습니다.
◆ 모델링에 본격적으로 착수하기 전 짚고 갈 체크사항!
보통 하나의 데이터 세트에서 80%는 트레인(train)으로, 20%는 테스트(test)로 분배를 합니다. 위에서 거친 데이터 분할 과정 기억하시죠? 그런데 다빈치랩스에서는 그것만으로 끝이 아닙니다. 일반적으로 과적합(overfitting)을 최소화하기 위해 트레인 데이터 중에서도 검증(validation)이라는 과정을 거치는데요,
다빈치랩스는 비전문가들도 편하게 트레인 모델을 구축할 수 있도록 UX/UI가 디자인되어 있습니다. 굳이 조정 없이도 안내사항대로 클릭만 하시면 이러한 파레토 비율이 적용됩니다! 트레인 데이터 중 랜덤으로 데이터를 추출해 검증을 거치면 더욱 견고해진 예측모델을 생성할 수 있게 되는 것이죠.
개발(train): 검증(validation) = 8:2로 데이터분할이 이미 최적상태로 구비 완료!
열심히 학습 중!
학습을 완료한 기계가 다양한 알고리즘 중 Ridge Regression, 즉 릿지 회귀라는 분석 알고리즘이 0.9996의 정확도를 가지고 있어 가장 적합하다고 추천해주고 있네요. 사용되는 수학적 알고리즘을 이해하지 못하더라도 기계가 추천해주는 방식을 선택하면 척척 진행되니 모델 구현이 한결 편해집니다. (이걸 수기로 작성해가며 하나하나 파악한다고 상상하면...)
학습 결과 릿지 회귀가 가장 적합하다고 나오네요. 이 알고리즘으로 검증세트를 돌려봐야겠어요.
타겟필드인 loan_status에 있어 가장 중요 연관성을 가진 상위 5개 변수도 알 수 있습니다. is_bad라는 필드가 거의 100%에 근접한 중요도를 가지고 있네요.
어떤 상위 5개 변수가 가장 상관성이 높은지를 체크하는 '필드별 중요도'
3. 테스트
기계여 공부했으니 시험을 보거라
학습을 시켰으니 테스트를 해서 원하던 '대출상환여부(체납여부)'를 알아내야죠! 앞부분에 등장한 'lendingclub_train'을 기억하시나요? 문제집의 80%로 학습을 한 뒤 남은 20%으로 시험을 볼 차례가 온 것입니다. 추천받은 알고리즘 '릿지 회귀'로 테스트를 해 볼건데요, 이전에 준비해두었던 20%의 테스트 데이터를 밑의 그림처럼 업로드해줍니다!
그렇게 테스트를 돌린 결과는!
여러 알고리즘을 적용하여 나온 경우를 모두 알아볼 수 있습니다. 밑의 첨부그림은 테스트 알고리즘 11가지 중 Ridge Regression을 적용한 결과에 해당합니다.
해당 알고리즘을 적용하여 모델을 돌린 결과, 채무자들의 예측 행동을 한 번 살펴볼까요?

Accuracy (정확도)가 개발 세트는 0.9998, 검증 세트는 1 (이건 통계학적으로 사기입니다...과적합 중에서도 탑급)
모델 중 릿지 회귀라는 알고리즘을 적용한 결과의 정확도가 1에 아주 가까운 수준으로 산출이 됩니다. 이것은 고객정보가 기밀사항이므로 가공을 불가피하게 할 수 밖에 없었던 Lending Club의 데이터셋의 한계에서 비롯된 것으로 볼 수 있습니다. 과적합(overfitting),학습 데이터를 과하게 한 것의 대표적인 예라고 볼 수가 있겠습니다. 그럼에도 불구하고 추천 알고리즘을 통해 모델링을 하고, 높은 정확도까지 보장해준다는 것을 경험상 체크해볼 수 있어 유익합니다.
◆다빈치랩스의 특성 중 하나, 상관관계 차트!!!◆
loan_status는 is_bad와 상관성이 매우 높네요. 거의 쌍둥이수준이므로 중복 제거를 위한 데이터 가공을 할 필요도 있겠네요
서로 연관성을 지닌 변수들을 정리해주는 '상관관계 차트'.
타겟변수(loan_status)와 is_bad라는 변수의 상관성이 1로 나오네요. 풀어 설명하면 loan_status가 "Fully Paid"라면 is_bad의 결과값은 "No"으로 뜬다는 말입니다. 대출금을 잘 갚는 사람은 긍정적으로 인식하기 때문이죠. 반대로 채무 불이행 고객의 경우("Charged Off") is_bad의 값은 "Yes"로 뜹니다. 이렇게 완벽한 하나의 공식처럼 합치하는 경우, 변수상관성이 1로 나옵니다.
이렇게 다빈치랩스를 통해 공공데이터를 머신러닝 모델에 돌려보았습니다. 대표적인 다빈치랩스의 역할은 다음과 같다고 볼 수 있겠습니다:
1. 자동 기계학습을 통한 예측값 도출
-정형데이터를 통한 지도학습 모델을 거쳐
Tabular data를 기계에 학습시키면 예측값 생성
2. 상관변수 차트를 통해 변수간 관계 알 수 있음
-좋은 고객이 가지고 있는 요건들이 무엇인지 알 수 있음
3. 다루는 데이터에 가장 맞춤형인 모델 알고리즘 추천
-11가지 알고리즘 중 가장 좋은 분석틀을 찾아줄게
지금까지 렌딩클럽의 공공데이터를 활용하여 x변수와 y변수의 내용, 기존 데이터 사용 예시, 그리고 마지막으로 다빈치랩스를 직접 돌려본 결과까지 보셨습니다. 통계학적 개념 중 어려운 부분이 있었지만 머신러닝이 실제로 작동하는 하나의 방식을 이해하시는 데에 도움이 되었으면 좋겠습니다.