강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

열심강의듣기님의 프로필 이미지
열심강의듣기

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

사이킷런을 이용한 K-Means 군집화 실습 - 03

안녕하세요. 강의 들으면서 업무에 적용하고 싶은 수강생입니다.

해결된 질문

작성

·

49

·

수정됨

0

강사님의 강의들을 잘듣고 있습니다.

정말 실무에 도움이 될까하고 듣고있는데 아직 다듣지는 못하고 있지만 도움이 될것 같습니다.

하지만 실무에서 접하는 내용은 또 강의와 깊이가 다를수 있기에 이렇게 실례를 무릅쓰고 문의 드립니다. 제가 있었던 기업에서 전에 쓰던 기법이였는데 그때는 그냥 그렇게 넘어갔지만 강사님의 강의를 듣고 그때 그런 것이 맞았나 복기하고 공부하고 싶어서 질문드립니다.

 

먼저

대략은 머신러닝 알고리즘을 두개를 돌리는데

하나는 기초 속성을 가지고 lightgbm으로 분류 작업 (1,0) 속성으로 예측을 합니다. 그리고 그 결과중 y_proba를 가지고 k-means 군집화를 하여 군집 클러스트링을 만들려고 합니다.

 

0) 여러 학습을 할 속성을 전처리해서 가지고 옵니다. 속성을 많은데 뒤에 예측을 하는 20개의 결과 값을 속성과 함께 자지고 온뒤 나중에

원본값은 대략 저렇고

속성 1----- 속성30 , y_test 1, ... y_test 20

.

.

나중에 y_test 1 부터 y_test20 까지 20개의 예측을 하려고 모델을 만듧니다.

 

1) LightGBM 으로 분류작업을 합니다. (for 문을 돌아 20개의 예측 즉 모델을 만듭니다.)

                    x_tr1   

   속성1   속성2   속성3 ...... 속성30 y_test1

       0         1          1      .....       0. 1

                     .

                     .

                    .

                    x_tr15 

   속성1   속성2   속성3 ...... 속성30. y_test20

       1        0          1      .....       1

                     .

                     .

                    .

2)  Y_test1.          y_pred1          y_proba1

        0                    1                 0.91

        1                     1                 0.43

        1                     1                 0.73

        0                    1                 0.80

                              .

                               .

                               . 

Y_test15.          y_pred20          y_proba20

        0                    1                 0.34

        1                     1                 0.35

        1                     1                 0.73

        0                    1                 0.91

                              .

                               .

                               . 

3)  군집화(k-means) 를 위한 데이터를 만듭니다.

Y_proba1. .........   Y_proba20

   0.91       ....         0.34

   0.43.      ....        0.35

   0.73       ....        0.73

   0.80       ....       0.91

 

4) 제가 재기하는 문제는 다음입니다.

군집화를 위한 데이터를 분류의 결과값중 하나인 y_proba를 써도 되는 건지?

왜냐하면 y_proba는 그 맞는지에 대한 확률 값이 아니고 그 값을 예측하기 위한 신뢰도 아닐까요?

(

예전 현업들은 그 값(y_proba)들을 최종 확률 [즉 맞는 확률 예를 든다면, 암에 걸릴 최종 확률] 로 알고 있더군요.

)

즉 1 = 예측  0 = 정답 y_proba = 0.9 라는 의미는 0.9의 신뢰혹은 확신으로 예측을 했으니 결과로 틀렸다. 라는 개념인데

이것을 마치 (암에 걸릴 확율이 90% 야)의미 있는 값의 나열로 보고 군집을 하려는게 과연 의미있는 결과로 군집이 될지 의문입니다.

저희가 붓꼿꽂데이터로 클러스트링으로 군집을 하지만 그 속성들로는 너비같은 관련이 있는 속성을 쓰잖아요.

하지만 제가 보내드린 예는 속성이  0.91이라는게 예측이 틀리건 맞건 그냥 그 예측을 위한 신뢰확률성인데 말이죠.

 

즉 군집화를 위한 기초 값들이

y_proba1. y_proba2 .... y_proba 20

0.91 0.43 0.80

.

.

.

y_proba1. y_proba2 .... y_proba 20

0.32 0.62 0.65

 

있다면

의 값의 의미는 예를 들어 하나의 로의 하나의 로 의 의미가 0.91 이라 한다면 이건 앞서 lightgbm 예측이 틀린 경우와 맞는 경우를 구분할수 없는 숫자들의 나열 아닌가요?

 

물론 열로 쭉 늘어 놓은 패턴으로서의 군집을 하려는 의미는 있을지는 모르겠으나... 전문가의 선생님의 의견을 꼭 듣고 싶네요.

주말에 이렇게 질문드려서 죄송해요. 그냥 열정이라고 생각해 주시면 좋겠어요, 더운데 몸 조심하세요.

답변 1

1

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

강의가 도움이 되어서 저도 기쁘군요 ^^

실무에서의 질문도 얼마든지 환영입니다.

업무 모델 상황을 글로 적어주셔야 하는 Q&A 게시판의 한계(?)가 있다보니, 질문을 제가 정확히 이해하지는 못했지만(예를 들어, 왜 이런 모델을 만드는지, 왜 예측값을 feature로 만드는지등)

질문하신 핵심 사항에 대해서 답변드리자면,

y_proba(그러니까 model.predict_proba() 값)는 모델 관점에서의 예측 확률입니다. 그러니까 말씀하신대로 모델이 해당 값(binary classification기준으로 0 또는 1로) 으로 확신(신뢰)하는 확률값 으로 보시는게 더 맞습니다. predict_proba()가 0.9이면 1(양성/Positive)를 모델이 90%로 확신한다는 것입니다. 특히나 머신러닝 모델은 loss값을 줄이기 위해서 over하여 확신하는 경향도 있습니다. 따라서 실제 통계학 기준의 암에 걸릴 확률과는 다를 수 있습니다.

하지만 머신러닝에서는 모델이 기준이 되기 때문에 업무적으로 받아들이는 상황에 따라서 이를 암에 걸릴 확률로도 사용될 수 있습니다. 의학적인 신뢰도 기준으로 받아들이는 것이 아니라, 업무에서 어떻게 사용될지에 따라 암에 걸릴 확률로 받아 들일 수도 있다는 의미 입니다(통계적인 신뢰도 관점의 확률로 받아들이자는 의미가 아닙니다)

예를 들어 질문하신 내용중에

=>이것을 마치 (암에 걸릴 확율이 90% 야)의미 있는 값의 나열로 보고 군집을 하려는게 과연 의미있는 결과로 군집이 될지 의문입니다.

이를 통계적으로 암에 걸린 확률이 90%가 아닌, 머신 러닝 모델 관점에서 암에 걸리는 확신을 90%라는 값을 업무적인 또는 분석 도메인 관점에서 의미 있는 값의 나열로 보고 군집화할 수도 있고, 그렇지 않을 수도 있다는 것입니다.

모델을 구성하는 다양한 feature 생성의 관점에서 보면 predict_proba() 결과 값이 feature로 사용될 수도 있고, 군집화 성능이 안나온다면 feature로서의 활용도는 떨어질 것입니다.

제가 개인적으로 궁금한 부분이(이해가 부족한 부분이) 왜, 군집화를 위한 feature들을 저런 형태로 만들었냐입니다만, 그건 해당 업무적으로 여러가지 요소를 감안해서 만드셨을 거라고 생각됩니다. 만약 군집화 성능이 안나온다면, 그건 해당 feature 들을 다시 재 검토해 봐야 될 것입니다.

 

요약 드리자면, predict_proba() 결과 값은 말씀하신대로 모델이 결과값을 확신하는 확률값입니다. 명확하게 통계적인 True probability가 아니지만, 머신러닝 쪽에서는 True Probability와 유사하게 통용해서 활용되기도 합니다. 머신러닝 모델 관점에서는 통계적인 true probability를 유사하게 만들수 있는 방법이 predict_proba() 입니다.

그리고 군집화의 Feature 속성으로 predict_proba() 값을 사용하는게 좋을지 아닐지는 제가 올려 주신 질문만으로는 판단하기 어렵습니다. 이게 좋은 feature인지 아닌지는 해당 feature들로 군집화 모델을 만들고 성능 결과로 판단해 봐야 알 수 있습니다.

올려 주신 질문 글로만으로는 답변 드릴 수준이 이정도 일것 같습니다. 제 생각엔 생각하신 더 좋은 feature들이 있으시다면, 해당 feature들을 직접 만들어 보시고 모델에 적용하면서 테스트를 해보시면 좋을 것 같습니다.

감사합니다.

 

 

감사합니다 잘 이해 했습니다

열심강의듣기님의 프로필 이미지
열심강의듣기

작성한 질문수

질문하기