*주의* 여기서는 삼성SDS의 브라이틱스를 사용해서 분석하고 해석하는 케이스를 설명하고 있습니다.
로지스틱 회귀분석
일반 선형 회귀가 y = a * x + b 의 형태의 선형 함수 관계라면, 로지스틱 선형회귀는 분석 대상을 0 과 1 또는 yes 와 no 등의 2개 집단으로 분류하는 결과를 만들어주는 회귀식입니다. threshold를 넘어선다면 1이 되고 넘어서지 못한다면 0이 되는 식으로 분석대상을 두 개의 집단으로 나눠줍니다.
브라이틱스의 Logistic Regression Train 함수에는 Inverse of Regularization 값을 세팅하는 부분이 있는데, L1 또는 L2 등의 패널티를 선택했을 때 이러한 패널티를 주는 걸 얼만큼 줄 지에 영향을 주는 부분인데 영향력을 줄이고자 하면 아주 큰 값을 줘야 합니다. 인버스이기 때문에 분모로 들어가는 값이고 영향력을 줄이고 싶으므로 10000같이 큰 숫자를 넣어줍니다.
위 함수의 결과로 나온 Logistic Regression Result 부분에서 0이라고 표시되어 있는 컬럼은 0이 아닐 확률일 때의 coefficients 를 뜻합니다. 즉 해당 값들을 사용해서 만든 회귀식의 결과는 분석대상이 0과 1 중 1일 확률이 나옵니다.
브라이틱스의 Logistic Regression Predict 함수에서는 prediction한 값이 사용자가 설정한 Thresholds를 기준으로 0인지 1인지를 판단하는데, 여기에 넣는 값이 만약 예를 들어 0.4일 때, 분석대상이 0일 확률이 0.4를 넘었다면 0이라고 판단하는 방식으로 동작합니다. 즉 thresholds 는 probability zero 기준입니다.
이제 로지스틱 회귀분석 모형을 평가할 차례입니다. 이를 평가할 수 있는 브라이틱스 함수에는 2 가지 종류가 있습니다. Evaluate Classification 함수, Plot ROC and PR Curves 입니다.
브라이틱스의 Evaluate Classification 함수는 Label은 실제 정답, prediction 은 우리의 모델이 예측한 값을 넣어주는 부분이고, average 부분은 결과를 표시할 때 다르게 표시되도록 세팅해줄 수 있는 부분입니다. 이 함수는 우리가 어느 쪽을 positive, 즉 1로 세팅했는지 명시해주지는 않아도 됩니다. 또한 우리가 직접 threshold를 세팅해주어서 결과를 판단하게 됩니다.
반면 Plot ROC and PR Curves 함수에서는 우리가 어느 쪽을 positive로 보는지를 명시적으로 세팅해줍니다. 바로 Probability Column 부분입니다. ROC Curve는 두 개의 그래프가 cross 되는 지점이 최적의 threshold 값이라는 뜻입니다. 최적의 기준선을 알려주는 것이 ROC Curve입니다. 이 점 또한 바로 위의 Evaluate Classification 함수와 다른 점입니다. AUC는 그 threshold 일 때의 값을 별표로 표시해줍니다. Area Under Curve의 약자가 AUC입니다.
Logistic Regression Predict 함수의 결과값을 Cross Table에 넣어서도 보면 좋습니다. 주의할 점은 Cross Table 함수에서 인풋 1번은 행 구분 2번은 열 구분입니다.
kNN ( k-Nearest Neighbor )
kNN기법의 장점과 단점에 대해 간략히 알아보겠습니다. 이 기법은 분포와 별로 관련이 없어서 어떠한 형태의 데이터에든 활용할 수 있습니다. 비모수적인 방법이기 때문입니다. 그러나 단점으로는 데이터의 표본의 크기가 충분히 크더라도 지역구조에는 민감합니다. 그래서 빽빽하게 들어있는 특정 영역에서만 잘 될 수 있습니다. 데이터가 성긴 구조의 지역에는 설명력이 떨어질 수 있습니다. k가 너무 작으면 과적합이 일어나고 k 가 너무 크면 분석을 대충하는 결과가 나오게 됩니다. 또한 이 기법은 데이터량이 너무 많으면 비용이 비싸지는 단점도 있습니다. 그리고 사용하기에 좋은 k값을 찾을 때 trial and error 방식으로 찾아야 합니다.
kNN에서의 거리(distance)기준에는 세 가지가 있습니다. 유클리디안, 맨하탄, 민코우스키입니다. 유클리디안 거리는 값을 빼서 제곱한 후 더하는 형태이고, 맨하탄 거리는 절대값으로 처리합니다. 유클리디안 거리는 대각선의 길이를 찾는 것과 유사한 아이디어이고, 맨하탄 거리는 움직인 거리의 총합을 구하는 개념입니다. 민코우스키 거리는 이 두 가지를 조합한 형태입니다. 거리의 계산은 모두 숫자 베이스로 이루어집니다.
브라이틱스에서 kNN 기법은 다른 기법들과 달리 train 함수를 사용하지 않는다는 점에 유의해야 합니다. 그럼 이제 브라이틱스에서 kNN 실습을 해보겠습니다. US Presidential Data가 예제에 사용되었습니다. 아래와 같은 데이터 입니다.
이 데이터는 정규화가 필요합니다. 어떤 컬럼은 소수점으로 되어 있고 어떤 컬럼은 정수로 되어 있어서 스케일에 차이가 크기 때문에 맞춰줘야 합니다. 그러면 아래와 같이 컬럼들이 추가가 됩니다.
브라이틱스의 kNN Classification 함수에는 train dat 와 test data 를 한꺼번에 둘 다 넣어줘야 합니다. 여기서 또 주의할 점은 feature columns 부분에 standardization을 한 것을 넣는지 아닌지에 따라 분석 결과가 달라지게 될 것입니다. 아래 캡쳐에는 정규화 안 된 데이터로 들어간 캡쳐입니다. 실제로 이후에 evaluate classification 함수를 넣어보면 accuracy에 차이가 발생한다는 것을 알 수 있습니다.
아래의 캡쳐에서 이웃의 숫자는 20으로 설정했습니다. 민코우스키를 디폴트값인 2로 놔두어서 돌려보았습니다. 2로 했다는 것은 유클리디안으로 설정했다는 뜻입니다. 돌렸을 때의 결과는 0일 때의 확률(loss)과 1일 때의 확률(win)을 비교해서 더 큰 쪽으로 prediction을 만들어줍니다.
Naive Bayes
조건부 확률에 관한 아이디어에서 출발한 기법입니다. train data set 으로 확률을 미리 계산해두고, log를 취해준 후, test data set 이 0이 될지 1이 될지 판단을 해주게 됩니다. 로지스틱 회귀분석과의 차이점은, 로지스틱 회귀분석에서는 우리가 threshold를 정해주었지만 나이브 베이즈 에서는 그냥 높은 쪽으로 판단해줍니다.
적용분야는 text classification에서 많이 사용되고 있습니다. 특히 스팸 필터링에 사용됩니다. 센티먼트 분석이나, 스피치 인식에도 사용됩니다.
나이브 베이즈에도 장점과 단점이 있습니다. 나이브 베이즈는 데이터 셋이 적더라도 퍼포먼스가 괜찮은 편이기 때문이고, 결과를 알려주는 케이스들이 늘어날수록 빠르게 정확도가 향상된다는 장점이 있습니다. 또한 데이터들의 노이즈에 영향을 덜 받는 편입니다. training 또한 확률 계산일 뿐이므로 복잡하지 않아서 빠릅니다. 단점으로는 과적합 리스크도 있고, violation of independence assumption도 단점입니다. 이것은 나이브 베이즈가 전제로 하는 내용이, 각 항목들이 모두 독립적이라는 가정하고 출발하게 되는데 이것은 현실과는 다릅니다. 현실적으로는 항목들이 독립적이지는 않으나, 결과가 괜찮은 편이므로 이런 단점에도 불구하고 나이브 베이즈를 많이 사용해줍니다.
나이브 베이즈도 전처리가 필요합니다. 나이브 베이즈는 연속형 데이터를 다루지 못합니다. 나이브 베이즈를 쓸 때는 문자형 데이터인 경우 숫자형으로 범주화 해주어야 합니다. 그리고 연속형 스타일의 숫자형 데이터는 yes / no 식의 판별로 설명할 수 있도록 바이너리 스타일로 0 또는 1 등으로 범주화 해주어야 합니다. 그렇게 해주는 방법으로 브라이틱스에서는 Bucketizer 라는 함수를 사용할 수 있습니다.
splits 부분은 어떤 숫자를 기준으로 나눌 것인지를 설정해주는 부분입니다. height_bucketed 라는 컬럼이 새로 추가되었고 input column에 넣은 필드인 height가 165 이상은 1 으로, 미만이면 0 으로 범주화되었습니다. bucket type을 바꿔주면 이상/미만, 초과/이하 를 바꿔줄 수 있습니다. closed는 포함하지 않고 open은 포함하는 것입니다.
Naive Bayes Classification Result 해석 시, theta_hair 는 hair가 f 에 얼만큼 영향을 주는지의 값입니다. 결과적으로 hair, time, height_bucked 가 f 에 얼만큼 영향을 주는지의 결론은 맨 앞의 컬럼 pi 에 있는 값입니다.
Naive Bayes Predict 함수에서, f일 확률과 m일 확률의 양 쪽 중 확률이 더 높은 쪽을 prediction으로 그냥 제시합니다. 예측 값을 그러면 이제 정답과 비교해보겠습니다. 여기서 label에 gender를 넣을지 gender_cd를 넣을지 주의해야합니다. 0과 1로 했으면 gender_cd로 하고 f 와 m 으로 바로 했으면 gender를 넣었어야 합니다.
Naive Bayes Predict 함수에 plot roc 함수를 해준다면, label 에 넣는 컬럼과 probabiltiey 컬럼 그리고 positive label에 넣어주는 값을 모두 맞춰줘야 합니다. 아까 젠더를 0과 1로 했었다면 positive lable에 0과 1로 넣어야 하고, 아래의 캡쳐처럼 f와 m으로 했다면 f 와 m 의 값으로 넣어줘야 한다는 점에 주의해야 합니다.
'IT,SW,Data,Cloud,코딩' 카테고리의 다른 글
빅데이터분석기사 필기 시험준비 - 나만의 암기포인트 (0) | 2021.09.30 |
---|---|
머신러닝 초보자를 위한 강의와 책 추천 (0) | 2021.08.26 |
개발자이직 알아볼 때 점핏(jumpit) 플랫폼 사용하면 편리해요! (0) | 2021.07.27 |
JAVA와 객체지향프로그래밍 (0) | 2021.05.31 |
Brightics 사용법 /초보자용 꿀팁 (0) | 2021.05.19 |
상관분석이란? 상관계수 결과 해석 (0) | 2021.04.19 |
평균 비교 검정/ Bartlett's Test - One Way ANOVA - Tukey's Range Test (0) | 2021.04.19 |
추론통계 기초 이해 및 Brightics를 사용한 t-test 결과 해석 (0) | 2021.04.19 |
댓글