Orange를 활용한 코딩 없는 AI 데이터 분석 - Lv.4 분류 머신러닝 분석 강좌의 맛보기 강의입니다.
이번 영상에서는 이진분류의 대명사라고 할 수 있는 조금 특이한 회귀분석이죠 로지스틱 회귀분석에 대해 함께 알아보도록 하겠습니다 머신러닝의 지도학습, 타겟이 존재하게 되는 머신러닝 지도학습에서 이 타겟 데이터는 수치형 데이터, numerical 데이터와 카테고리컬 데이터, 범주형인 숫자와 문자 데이터 둘 중에 한 가지의 형태를 띠게 됩니다. 뭐 문자형일 수도 있고 숫자형일 수도 있는 거죠. 그래서 우리가 어떤 수치형 데이터를 분석해내는 이러한 모델을 예측 모델, 다른 말로 회귀분석 모델, 회귀모델 이렇게 부르고 범주형 데이터, 문자 데이터를 타겟으로 하게 되는 그러한 분석을 우리가 분류 모델, classification 모델이라고 이야기를 하게 되죠. 지도학습에서의 두 가지 모델 종류이기 때문에 이 둘이 굉장히 배타적이라고 오해할 수 있지만 사실은 그렇지 않고 회귀와 분류라고 하는 것은 엄밀히 말하면 관계가 이런 관계다 라고 말할 수 있습니다 와인의 예를 들어서 이렇게 여러 피처를 가지고 우리가 원하는 타겟 Y를 추정한다고 할 때 이런 추정한 값이 수치로 떨어지게 되면 우리가 Y의 품질을 9.3, 5.6, 7.9 이런 식으로 숫자의 값으로 얻게 되는 거고 분류라고 하는 것은 사실상 이렇게 숫자로 얻은 값을 가지고 예를 들어서 9점이 넘으면 특상이라고 하겠다. 8점이 넘으면 상이라고 하겠다. 와 같이 어떤 연속된 변수를 적절하게 빈으로 나눠서 이산화, 이진으로서 클래스를 만들어 낼 수도 있다 라고 이야기했습니다. 숫자값이 분류가 될 수 있는 거죠. 회귀와 분류라는 건 그렇게 서로 배타적인 관계라기보다는 많은 알고리즘들이 회귀도 할 수 있고 그러니까 회귀라기보다 예측도 할 수 있고 수치적 예측도 할 수 있고 그리고 이 카테고리로 분류도 할 수 있다. 그래서 알고리즘들이 이것도 할 수 있고 저것도 할 수 있다 대부분 그렇다 라고 말씀을 드렸어요 로지스틱 회귀도 비슷합니다 로지스틱 회귀는 이진분류의 대표적인 어떤 알고리즘이다 그러한 모델이다 라고 하니까 뭔가 로지스틱 회귀를 계산하고 나면 그래서 A클래스입니다 그래서 B클래스입니다 라고 하는 결과가 이렇게 문자로 딱 나올 것 같다 라고 오해하신다면 그렇지 않습니다 일단 로지스틱 회귀가 어떻게 되는 것인가 라고 하면 예를 들어서 먼저 리니어 리그레이션 선형 회귀분석을 생각해 볼게요 X가 하나인 단순 선형 회귀분석 예를 들어 학생이 학습을 많이 할수록 공부를 많이 할수록 시험에 합격할 가능성이 높아진다 라고 하는 양의 상관관계가 있는 이러한 데이터가 있다 치겠습니다 공부를 많이 하면 시험 합격 가능성이 높아지는 거죠 그래서 우리가 이걸 가지고 Y는 AX 플러스 B라고 하는 형태의 회귀선을 만들어 낼 수가 있습니다 하지만 이걸로 추정하면 굉장히 이상한 상황이 벌어질 수가 있죠 예를 들어 학습시간이 하루에 4시간을 공부하면 그때의 합격 확률이 70%, 0.7이라고 치겠습니다. 그래서 하루에 6시간을 공부하면 그때의 합격 확률은 1이 돼요. 그러면 합격의 확률, 합격의 가능성이라고 하는 것은 100%가 넘어갈 수 있는가 라고 하면 뭔가 얘기가 이상해지는 거죠. 예를 들어서 공부를 더 많이 할수록 시험 합격 가능성이 높아져. 그러니까 6시간만 공부하면 합격 가능성이 100%인데 근데 나는 8시간을 공부했으니까 나의 합격 가능성은 그러면 130%가 될 거다 라고 하면 그런 일은 없는 거죠. 왜냐하면 확률이라는 건 아무리 낮아져도 0 아래로 떨어질 수 없고 아무리 높아져도 1 위로 올라갈 수가 없는 거죠 이게 바로 확률의 특징이죠 확률이라는 게 0%에서 100%까지 범위 안에서 존재를 하는 거지 이러한 양의 상관관계가 있다고 해서 무조건 마이너스까지 확률이 떨어지거나 1을 넘는 확률이 나올 수는 없다는 거죠 확률에 대해서 Y가 어떠한 확률일 때 이러한 확률에 대해서 반드시 이 Y값이 0부터 1 사이의 범위로 수렴하도록 조정을 해준 그러한 회귀분석 이게 바로 로지스틱 회귀분석입니다 무조건 이렇게 발산할 게 아니라 아무리 낮아져도 0에 가까워지도록 해라 아무리 높아져도 1에 가까워지도록 해라 그래서 이렇게 뭔가 S자 곡선처럼 만들어주는 이러한 모델링 방법이 로지스틱 회귀분석입니다 여러분께서는 앞서서 인공신경망의 활성화 함수에서 인공신경망에서 출력값을 결정하는 활성화 함수에서 시그모이드라던가 이런 것들에서 이런 S자 곡선을 보셨을 거예요. 같은 거다 라고 생각하시면 되겠습니다. 같은 겁니다. 로지스틱은 반드시 아무리 작아져도 0, 아무리 높아져도 1 사이에 값을 갖도록 하는 것이다 라는 겁니다 근데 이게 0이나 1의 값이 나오는 것이 아닙니다 이 계산의 결과가 무조건 0이 나오거나 1이 나오는 게 아니고 이것은 로지스틱 회귀분석의 결과는 0.398이 나올 수도 있고 0.7427이 나올 수도 있습니다 0 또는 1의 값이 나오는 게 아니고 0에서 1 사이의 어떤 값이 나옵니다 확률이기 때문에 0에서 1 사이의 어떤 값이 나와요 그런데 우리는 이것을 가지고 이러한 확률적인 것을 가지고 이 정도로 선을 그어서 구별을 해야 겠다 라고 임계치를 설정을 하게 됩니다 이건 우리가 정한 겁니다 분석하는 사람이 정하는 거예요 물론 뭐 그걸 정할 때 사용할 수 있는 몇 가지 기준들이 있지만 어찌 됐든 우리가 정합니다 예를 들어서 편의상 0에서부터 1 사이니까 0.5를 임계치로 정한다고 하면 이렇게 될 확률, 시험에 합격할 가능성이 50%보다 낮다? 그러면 이거를 불합격할 것 같다. 실패하는 경우로 예측하자. 마치 와인 품질은 연속형의 숫자로 나오는데 우리가 9점 넘으면 특상이라고 하자 8점 넘으면 상품이라고 하자라고 하는 것처럼 이러한 확률이 우리가 정한 선보다 기준선 어떤 기준선보다 낮으면 그거는 실패 0이라고 하고 이 기준선보다 높으면 성공이라고 하자와 같이 선을 중심으로 양쪽을 나눠주는 이러한 분류 2개의 클래스로 나눠주는 분류 이것이 로지스틱 회귀의 특징인 이진분류가 되겠습니다 로지스틱 회귀는 이러한 역할을 하는 함수인 거죠 이런 로지스틱 회귀 알고리즘이라고 하는 것은 성공 확률이 실패 확률보다 몇 배나 높으냐 라고 하는 오즈를 계산해서 오즈를 로그를 씌운 로짓을 만든 다음에 이 로짓을 각각의 피처들 우리가 예측하고자 하는 타겟에 영향을 미치는 수많은 X들 그 피처들을 가지고 그들의 영향력을 측정하는 방식으로 만들어서 최종적으로 이렇게 로지스틱 함수의 역함수를 만들어내는 방식으로 계산을 합니다 물론 우리가 이 과정을 사실 손으로 계산할 필요는 전혀 없습니다 이미 함수가 만들어져 있고 우리는 분석을 통해서 무엇을 알아내고자 하냐면 여기에 사용되는 각각의 X들의 영향력 베타 계수 값을 알아내는 것이 바로 로지스틱 분석에서의 핵심이다 라고 생각하시면 되겠어요 마치 직선 방정식은 데이터를 학습해서 적절한 A와 적절한 B가 얼마인지 알아내 봅시다 하는 것처럼 로지스틱 회귀는 로지스틱 회귀의 공식은 이루어져요 그렇다면 여기서 이때 적절한 베타0, 베타1, 베타2, 베타3, 베타N은 얼마인지 알아 봅시다 라는 방식으로 학습이 이루어지게 된다 라고 이해하시면 되겠어요 실제로 여러분께서 로지스틱 회귀분석을 머신러닝으로 가동을 시키시면 어떻게 되는가? 맨 처음에는 머신이 로지스틱 회귀분석의 수식에서 각각의 가중치, 베타0, 베타1, 베타2 같은 이런 가중치를 일단 초기화를 시켜줍니다. 이 가중치를 초기화시킨다 라고 하는 말은 이 가중치를 다 0으로 세팅을 해준다 라는 얘기예요. 일단 처음에는 베타가 얼마인지를 모르잖아요. 그러니까 베타를 다 0이다 라고 합니다. 베타가 0이다라고 하면 여기에 베타가 몇 개가 있건 모두 다 0이라고 하면 곱한 값을 다 더하면 결국 결론은 뭐예요? 0이죠. 그러니까 이 로지스틱 회귀는 항상 1 더하기 자연로그 e의 0제곱 지수법칙에 의하면 e의 0제곱이든 K의 0제곱이든 0제곱이라고 하는 것은 바로 1이죠. 지수법칙에서 모든 수의 0제곱이라고 하는 것은 1입니다. 그래서 항상 기본 초기 가중치를 0으로 설정해주는 거죠. 만약에 첫 번째 학생을 보면 왼쪽에 10명의 학생이 있고 10명의 학생이 공부를 몇 시간 했고 잠을 몇 시간 자서 합격을 했네 말했네 이런 데이터가 있다 치겠습니다 만약에 이런 데이터를 학습해서 로지스틱 회귀를 한다고 하면 일반 학습 모델 초기화 상태, 모든 가중치가 0인 상태에서의 최종적인 계산된 예측 확률, 확률값은 얼마가 돼요? 2분의 1이 되죠 당연히 2번 학생도 2분의 1, 0.5라고 적을게요 모두 다 0.5, 0.5, 0.5, 0.5라는 값을 얻게 될 거예요 어차피 여기가 다 0이니까 무조건 모든 학생들의 합격 가능성이라고 하는 값은 0.5로 계산이 되죠 근데 보시면 실제로 1번 학생의 합격 가능성은 실제 합격 여부는 어떻습니까? 예측한 값은 0.5입니다. 이때 이 둘 사이의 차이, 오차 로스 손실은 0.5가 됩니다. 동일한 방법으로 모두 합격하거나 합격하지 않았거나 하게 되는 거잖아요 그럼 이 오차들이 이 경우에는 다 0.5니까 오차들이 0.5로 10명이 있네요 그럼 오차의 총합 손실의 총합은 바로 5라고 계산이 되겠죠 근데 이 가중치를 0으로 하지 않고 조금만 조정을 한다라고 한다면 이 가중치의 값이 얼마로 각각 설정되느냐에 따라서 베타0, 베타1, 베타2 이런 값이 얼마로 설정되느냐에 따라서 예를 들어서 1번 학생의 합격 가능성은 0.2로 예상이 될 수도 있고 2번은 0.3으로 계산될 수도 있고 누구는 0.7로 계산될 수도 있고 이 값이 바뀔 여지가 생기게 되죠. 가중치가 변하게 되면서 이 값은 변화할 수가 있습니다. 학습하게 되는 데이터, 정답 데이터의 타겟값과의 오차의 합도 바뀌게 되겠죠. 손실의 합계가 달라지게 되는 거잖아요. 그러면 다시 경사하강법으로 넘어가게 되는 거죠. 이 손실 함수에서 이러한 로지스틱 회귀에서 현재는 가중치가 얼마인지 모른다. 각각의 가중치가 얼마인지 모르는데 일단 초기 세팅은 0이라고 한다. 그러면 여기서부터 이 가중치가 변화함에 따라서 실제 데이터와의 오차가 바뀌게 될 텐데 이러한 오차의 합계, 손실의 합계가 가장 작아지게 될 손실함수의 값이 가장 작아지게 될 가중치는 도대체 얼마인가라고 하는 것을 다시 경사하강법으로 계산해서 맞추게 되는 거죠. 회귀분석이 돌아가는 것과 기본적인 방법은 동일합니다. 다양한 상황에서 손실함수의 값이 가장 작아지는 것과 손실함수의 기울기가 가장 작아지는 점을 찾아서 그때의 가중치를 가지고 로지스틱 회귀함수의 가중치 값이 바뀌게 되는 거죠. 2 더하기 3x 더하기 얼마 이런 식으로 어떤 값이 들어오게 되고 이걸 가지고 x 값을 반영해서 예측 확률을 계산을 해내게 되는 이러한 구조입니다 그러면 최종적으로 우리는 예측의 확률 0에서 1까지의 값을 받게 되고 그 상태로 우리가 정한 임계치를 기준으로 그러면 너는 A 클래스라고 하자, 너는 B 클래스라고 하자 라고 결정하게 되는 거죠. 통상적으로는 50%, 0.5를 기준으로 해서 분류를 해주는 경향이 있습니다.
