문득 초심으로 돌아보고 싶었다.
우선적으로 게임 데이터 시각화 프로젝트를 기획 단계에서 3번은 갈아엎은 것 같다. 피파는 애초에 시스템이 잘 되어있어 오히려 가공된 정보를 보며 인사이트를 얻는 것으로 끝났고, 에이펙스 레전드는 비공식 API에 호출하는 데에만 많은 시간을 요구하기에 드랍했다...
현재는 메이플스토리의 API를 살펴보며 관련 문의를 넣은 상태이다. 현재는 메이플스토리 API가 정상적으로 사용/작동된다는 메일을 받기만을 기다리며 지금은 예전에 공부했던 내용들을 정리하고 있다.
최근 정보처리기사 정리를 끝내고 예전에 정성껏 작성한 빅데이터분석기사 자료들을 보고 있는데, 데이터의 처리 과정에서 꽤나 큼직하면서도 우리가 간과하고 있는 이론이 눈에 띄었다.
데이터 분석하는 것은 좋다. 지도 학습? 좋다. 그중에 정말 여러 가지 회귀 분석을 진행하며 여러 모델을 공부했던 기억이 난다. 하지만 과연 회귀 분석의 여러 모델을 아는 것만이 전부일까?
State of the Art를 매일 배우는 것은 중요한 일이다. 하지만 이를 포함한 모든 회귀 분석에는 가장 큰 4가지의 데이터적 가정이 존재하여야 한다는 점을 명심하자.
회귀 분석을 진행할 데이터의 4가지 가정
지금부터 소개하는 4가지의 가정을 소개하고, 이를 필자가 예전에 진행했던 프로젝트의 전처리 과정과 비교해 보며 자체 피드백을 해보는 시간을 가져본다.
https://songmin9813.tistory.com/40(도보에 따른 칼로리 소모 비교 2. 데이터 전처리)
도보에 따른 칼로리 소모량 분석해보기 2. 데이터 전처리
이전 내용과 이어집니다. https://songmin9813.tistory.com/39(1. 데이터 인사이트) 각 데이터는 ‘날짜’라는 동일한 값을 가지고 있음을 파악했기 때문에 이를 primary key로 삼아 join을 진행하여 하나의 테
songmin9813.tistory.com
상기의 내용을 토대로 아래의 내용을 모두 만족하는지 살펴보도록 하자.
1. 선형성
독립변수(Feature, 특징, 피쳐)와 종속변수(Label, 클래스, 레이블)는 선형적인 관계를 띄어야 한다. 종속변수는 독립변수와 회귀계수의 선형적 조합으로 표현이 가능해야 하며, 이는 산점도 등을 통하여 선형성을 확인하여야 한다.
산점도를 이용한 그래프는 상기 표의 산점도에서 볼 수 있는데, 표를 보고 정직한 우상향=선형성을 만족한다 생각하여 모델링을 진행한 것으로 기억한다.
2. 독립성
만약 단순 회귀분석을 진행할 경우 잔차와 독립변수의 값이 서로 독립이어야 하고, 다중 회귀분석을 진행할 경우 독립변수 간의 상관성이 없이 독립이어야 한다. 이를 만족하지 않을 경우 각각의 독립변수가 서로를 설명할 수 있는 다중공선성 문제가 발생하여 제대로 된 모델을 만들 수 없다.
필자의 경우 distance 변수와 steps를 독립 변수로 넣고 다중 회귀분석을 진행한 바 있는데, 산점도에서도 그렇고 서로를 설명할 수 있는 다중공선성=즉 두 변수 간 독립성이 없었기 때문에 해당 변수로 정확한 모델을 만들 수 없음을 알게 되었다.
변수 제거를 진행한 뒤 p-value 값이 안정적으로 나오는 것을 보았고 이로써 독립성을 만족한다 생각하여 모델을 만들었던 것으로 기억한다. 후에 찾아보니까 독립성 검증을 위한 Durbin Watson 검정법도 존재한다는데, 필요하다면 나중 회귀분석 시 사용해 봐야겠다.
3. 등분산성
잔차의 분산이 독립변수와 무관하게 일정해야 한다.
잔차를 표시한 그래프도 포함을 시켰었다. 사실 이때까지만 해도 이 그래프가 왜 필요할까? 에 대한 질문을 스스로에게 하지는 않았던 것 같다. 단순히 0에 가까울수록 모델링이 잘 된 거다라고만 생각했지...
상기 그래프에서 몇몇 튀는 그래프를 제외하면(파랑, 보라) 비교적 고른 잔차의 분산을 볼 수 있다. 이 또한 검정법이 존재한다고는 하나, 그 조건이 매우 엄격하여 이분산이라고 판단하는 경우가 굉장히 많다고 한다. 해당 그래프를 보며 정성적인 방법으로 잔차를 확인하는 수가 Best일 것 같다.
4. 정규성
잔차항이 정규분포의 형태를 띠어야 한다.
이는 히스토그램이 정규 분포를 띄는지로 어림잡아 확인을 했던 것 같은데, 해당 방법 외에도 QQ Plot를 이용하여 확인이 가능하다고 한다. 바로 간단한 코딩을 통해 관련 내용을 확인해 보도록 한다.
import scipy.stats as stats
stats.probplot(np.array(norm_x['distance']),plot=plt)
plt.show()
상기 코드로 distance에 대한 qq plot를 만들 수 있었고, 그 결과는 아래의 그래프와 같았다.
빨간 선을 어느 정도 따라가는 것으로 보아 distance 변수는 정규성을 만족한다고 볼 수 있을 것이다.
마치며
회귀 분석을 진행하면 지켜야 하는 몇 가지 조건을 다시금 상기하게 되었다. 필자가 물 흐르는 듯이 했던 항목과 그렇지 못한 항목도 존재하여, 이 네 가지 항목을 지키며 회귀 분석을 진행하는 것이 조금 더 튼튼한 데이터의 가정을 만들 수 있을 것이라는 생각이 들었다.
여러분들도 회귀분석을 진행하고 싶다면 네 가지의 항목을 잊지 않고 있는지, 과연 내가 올바른 데이터를 가지고 있는지 먼저 생각하는 마음을 가져보도록 하자.
데이터가 올바르지 못하면 결과 또한 안 좋을 수밖에 없다.
'개발 > 데이터 분석' 카테고리의 다른 글
4종류의 게이머가 존재한다고? - 2. PCA (0) | 2023.02.14 |
---|---|
4종류의 게이머가 존재한다고? - 1. 인사이트 및 전처리 (0) | 2023.02.12 |
Kakao 버전 배틀그라운드 유저 데이터 분석해보기[통합] (2) | 2023.01.25 |
[Python/Analytic] 배틀그라운드 유저 데이터 분석 코드 공유 (8) | 2023.01.23 |
Steam 버전 배틀그라운드 유저 데이터 분석해보기 (2) | 2023.01.21 |