데이터 분석에 대해 배우면서 가장 많이 접하게 되는 학문은 '통계학'이다. 교육과정에 확률과 통계가 있지만, 이해보다는 암기 위주로 공부했던 기억이 난다. 데이터 분석가 혹은 데이터 사이언티스트가 되고자 할 때, 통계에 대해 제대로 아는 것이 중요하다 판단된다. 이 기회에 확률과 통계에 대해 속속들이 파헤쳐보고자 한다.
지금부터 쓰일 글은 https://recipesds.tistory.com/(친절한 데이터 사이언티스트 되기 강좌, 히언님의 tistory)과, 황세웅 저자의 '데이터 분석가가 반드시 알아야 할 모든 것' 이란 책이 그 배경지식이 될 것이다.
B. 확률과 통계가 무엇인가?
1. 사전적 의미
1) 확률: 일정한 조건 아래에서 어떤 사건이나 사상(事象)이 일어날 가능성의 정도, 또는 그런 수치 (출처: 네이버 사전).
수학적으로는 1을 넘을 수 없고, 음이 될 수도 없다. 확률 1은 항상 일어남을 의미하고, 확률 0은 절대로 일어나지 않음을 의미한다.
2) 통계: 집단적인 현상이나 수집된 자료의 내용에 관한 수량적인 기술.
대상이 되는 집단을 일정한 시점에서 파악하는 것을 정태 통계, 일정한 기간에서 파악하는 것을 동태 통계라 하며, 사회나 자연현상을 정리·분석하는 수단으로 쓰기도 한다.
3) 확률분포: 확률변수의 분포 상태.
어떤 시행에서 일어날 수 있는 사건마다 그 확률값을 대응하게 한 것이다.
4) 확률변수: 한 시행에서 표본 공간을 정의역으로 하는 실수 함수.
확률 공간의 점인 근원 사건에 수를 대응하게 하는 함수.
* 정의역: 두 변수 x, y 사이에 y가 x의 함수로 나타내어질 때에 x가 취할 수 있는 값의 범위
* 하나의 시행에서 n개의 사건 가운데 하나가 일어나며 두 개가 동시에 일어나는 일은 없을 때, 그 각각의 사건을 이르는 말
2. 통계와 확률 간의 관계
1) 통계는 표본을 통해서 모집단을 추론하고 확률을 이용해서 계산하고, 결과를 표현한다.
2) 모집단의 특성을 설명하는 수를 모수(parameter)라 부르며, 모평균, 모분산, 모표준편차, 모비율, 모상관관계등을 의미한다.
친절한 데이터 사이언티스트 되기 강좌_확률과 통계의 관계
3. 그래서 결론은?
1) 표본을 통해서 평균과 분산을 추론할 수 있다면 모집단도 어느정도 확률 분포로 설명할 수 있다.
2) 표본 평균을 통해 모집단의 평균을 추정할 때 표본 평균은 모집단의 분포와 상관없이 Gaussian을 이룬다.
3) 그렇기 떄문에 확률로 모수를 표현할 수 있다.
4) 모수를 추론하기 위해 표본을 뽑게 되는데, 이 표본에서 나오는 여러 수치들을 통계량(=확률변수) 이라 한다.
5) 모집단의 정체를 알 수 없을 때 표본을 가지고 모집단을 확률로 예측하는 것이다.
친절한 데이터 사이언티스트 되기 강좌_ 모집단과 표본
C. 기술통계와 추론통계
1. 기술통계 (descriptive statistics)
1) 정의 : 문자 그대로 주어진 데이터의 특성을 사실에 근거하여 설명하고 묘사하는 것 = 전체 데이터를 쉽고 직관적으로 파악할 수 있도록 설명해주는 것
2) 기법 : 평균(가중평균, 기하평균, 조화평균 등), 중앙값, 최빈값 등
3) EDA : 데이터 요소들을 수치적으로 설명할 필요가 있을 때 사용되는 방법으로, 해당 과정을 통해 날것의 데이터를 의사결정을 위한 정보로 탈바꿈하는 것이다.
4) 시각화 : 단순한 수치 보다는 그림이나 그래프를 통해 표현하는 것이 훨씬 효율적으로 시각화하여 많이 사용한다.
2. 추론 통계 (inferential statistics)
1) 정의 : 표본 집단으로부터 모집단의 특성을 추론하는 것
2) 예시 : A학급의 평균 키가 170cm 라고 했을 때, '학교 전체 학생의 평균 키가 167~173cm 구간 내에 존재할 확률이 어느 정도다.' 라는 식의 추론이 가능하다. 신뢰 구간을 구하는 것이 추론통계라 할 수 있다.
3) 방법 : 머신러닝 모델을 만들고 예측이나 분류를 하는 것
4) 필요 개념: 편향, 분산, 확률분포, 가설 검정, 유의도(p-value)
3. 기술 통계와 추론 통계의 통합적인 프로세스
통합적 프로세스
황세웅 저자가 기술 통계와 추론 통계에 대해 작성한 문장으로 마무리하고자 한다. 통계에 대해 처음 공부를 시작할 때 어떤 개념을 주로 공부해야하는지, 한 쪽 분야만 공부해도 되는 것인지 고민을 했던 내게 그 답을 해준 문장이다.
추론 통계가 기술 통계보다 더 중요하다고 단정 지을 수 없다. 기술 통계가 있어야 추론 통계가 가능한 것이고 기술 통계를 확실히 했을 때보다 정확한 인사이트를 얻을 수 있다. 첫 단추를 잘못 끼우면 결국 마무리도 제대로 딜 수 없다. 물론 추론 통계가 데이터 과학의 주축을 맡고 있지만 기술 통계는 그 기반과 같은 요소다.
보고서: 사용자가 분석하고자 하는 앱 혹은 웹사이트와 상호 작용하는 방식에 대한 일반적인 질문의 답을 찾을 수 있는지 미리 준비된 보고서로 확인할 수 있다.
탐색 분석: 표준 보고서 외에 고객 참여에 대한 보다 심층적인 통계를 제공하는 고급 분석 기법을 사용할 수 있다.
광고: 온라인 광고 활동을 분석, 이해, 개선할 수 있는 정보를 제공한다.
관리: 계정, 속성, 이벤트, 사용자 설정을 관리한다.
페이지 상단의 속성 선택기: 계정 또는 속성이 두 개 이상인 경우 모든 페이지에서 계정 또는 속성 간에 전환할 수 있다.
B. 이벤트 관리
이벤트는 페이지 조회수, 버튼 클릭수, 사용자 액션처럼 웹사이트 또는 앱에서 발생하는 활동에 대한 통계 정보를 제공한다. 대부분의 일반적인 이벤트는 Google Analytics에 웹사이트나 앱을 연결하면 자동으로 수집된다.
데이터 스트림 설정에서 향상된 측정을 사용 설정한 경우, 코드를 추가하지 않아도 속성에서 더 많은 이벤트를 자동으로 수집한다.
1) 자동수집 이벤트
자동수집 이벤트는 앱 또는 사이트와의 기본적인 상호작용에 의한 트리거로 발생한다. 별도로 명시되지 않는 한 애널리틱스는 Android 및 iOS앱의 이벤트를 수집한다. 이러한 이벤트의 이름과 매개변수는 원시 이벤트 데이터에 엑세스할 때 유용하다. 다음 링크를 통해 각 이벤트 매개변수와 Google 애널리틱스에서 각 매개변수가 측정기준 또는 측정 항목을 업데이트하는 방식을 알아볼 수 있다. https://support.google.com/analytics/answer/9234069
Google Analytics에서 자동으로 수집하는 이벤트 외에 나의 비즈니스와 관련된 다른 이벤트도 수집할 수 있다. 추천이벤트란 Google Analytics는 업종에 따라 비즈니스에 유용할 수 있는 일반적인 이벤트를 추천한다. 맞춤 이벤트의 경우, 처음부터 만들 수도 있다. 추천 이벤트와 맞춤 이벤트는 모두 웹사이트 태그 또는 앱에 대한 추가적인 구현단계가 필요하다는 공통점이 있지만 아래와 같은 차이점이 있다.
구분
추천이벤트
맞춤이벤트
차이점
사용자가 구현하지만, Google Analytics에서 이미 인식한 이름과 매개변수가 사전에 정의되어 있다. 다음의 이벤트를 웹사이트나 모바일 앱에 추가하여 추가활동을 측정하고 더 유용한 보고서를 생성할 수 있다.
내가 정의하는 이름과 일련의 매개변수로 구성되는 이벤트이다. 맞춤 이벤트를 사용하면 애널리틱스에서 자동으로 수집하거나 추천하지 않는 특정 비즈니스 데이터를 수집할 수 있다.
3) 측정기준 및 측정항목
Google Analytics는 측정기준과 측정항목을 사용하여 이벤트, 이벤트 매개변수, 사용자 속성에서 모든 데이터를 수집하고 보고서로 컴파일(compile, 소스코드를 바이너리 코드로 변환하는 과정)한다. 측정기준은 '누가 무엇을 어디에서?' 란 질문에 답하지만 측정항목은 '얼마나 많이?' 란 질문에 답한다. 자동 수집되는 이벤트 및 매개변수는 보고서에 이미 생성되어 사용할 수 있는 관련 측정기준 및 측정항목이 있다.
웹사이트나 앱에서 새 이벤트 및 맞춤 이벤트와 관련 매개변수를 구현하면 이러한 새로운 데이터를 Analytics로 전송한다. 이 경우 보고서에서 확인하고자 한다면, 데이터에 해당하는 측정기준과 측정항목을 만들어 사용하면 된다. 이는 사용자가 직접 만들었다는 점을 제외하면 기본 측정기준 및 측정항목과 동일하다. 자체적인 맞춤 측정 기준과 측정항목을 만들 때는 범위를 정확하게 알고있어야 한다.
★ 이벤트 범위 측정 기준: 사용자가 수행하는 액션에 대한 정보를 제공한다. 예를 들어, 누군가 웹사이트에서 게시글을 조회한 경우 게시글 제목이 이벤트 범위측정 기준일 수 있다.
☆ 사용자 범위 측정 기준: 액션을 수행한 사용자에 대한 정보를 제공한다. 예를 들어, 게시글을 본 사용자의 기기가 사용자 범위 측정기준일 수 있다.
★ 상품 범위 측정 기준: 사용자가 상호작용한 제품 또는 서비스에 대한 정보를 제공한다. 예를 들어, 누군가가 장바구니에 물병을 추가한 경우 물병의 색상이 상품 범위 측정기준일 수 있다.
자동으로 수집되는 측정기준과 측정항목에는 이미 범위가 지정되어 있다. 맞춤 측정기준을 새로운 이벤트와 매개변수로 생성할 경우에는 범위를 선택하여야 한다. 맞춤 측정항목은 이벤트 범위만 가능하다.
C. 수집한 데이터 관리 및 필터링
1) 교차 도메인 측정
보고가 중단되지 않도록 하기 위해 교차 도메인 측정을 구현한다. 두 웹사이트 모두의 사용자 여정에 대해 보고 가능하다.
2) 원치 않는 추천
웹사이트 트래픽의 소스를 분석하여 고객이 어디에서 본인의 웹사이트로 이동했는지에 대한 정보를 소스, 즉 추천이라 한다. 원치 않는 추천이란 웹사이트 및 고객 거래를 관리하는데 사용하는 서드 파티 도구처럼 데이터에 포함시키고 싶지 않은 소스를 거쳐 웹사이트에 도달한 트래픽 세그먼트를 말한다. 데이터 스트림, 태그 설정 구성, 원치 않는 추천나열 등의 메뉴를 활용하여 관리 규칙을 만들 수 있다.
3) 데이터 필터
웹사이트에서 보고 싶은 데이터만 확인하고 싶을 때 데이터 필터를 사용할 수 있다. 데이터 필터를 사용하면 수신되는 이벤트 데이터를 Google Analytics에서 처리하지 않도록 제외할 수 있다. 이 설정은 이전 데이터에는 영향을 않지만, 필터를 만든 이 후의 이벤트 데이터는 영구적으로 표시되지 않는다. 추후 복구 또한 불가능하다. 필터를 삭제한면 그 이후 데이터는 처리되지만, 이미 제외된 데이터는 복구할 수 없다. 그렇기에 신중히 데이터 필터를 사용하여야 한다. 필터는 아래의 두 옵션 중 선택한다.
★ 개발자 트래픽: 디버그 모드를 사용하는 개발자의 활동을 제외한다.
☆ 내부 트래픽: 특정 IP 주소 또는 IP 주소 범위에 해당하는 사용자를 제외한다.
D. Google Analytics 전환 관리
전환이란 나의 비즈니스에 중요한 영향을 주는 사용자 액션을 말한다. 사용자가 내 매장에서 구매하거나 구독하는 경우를 예로 들 수 있다. 전환을 측정하려면 먼저 관련 사용자 상호 작용을 이벤트를 수집 중인지 확인하여야 한다. 이는 기존 이벤트 또는 자동 수집 이벤트이거나 맞춤 이벤트일 수 있다.
이벤트가 아직 발생하지 않은 경우 이벤트가 표에 곧바로 표시되지 않을 수 있다. 이러한 경우 '관리자' 탭으로 이동한 후 '전환'으로 이동하여, 새 전환 이벤트를 선택하고 전환으로 표시할 이벤트 이름을 입력하면 나타난다.
비즈니스에서 가장 중요한 이벤트의 하위 집합이라 볼 수 있다.
E. 보고서
보고서에서 주요 비즈니스 측정항목을 빠르게 확인한 후 더 알고 싶은 부분을 깊이 있게 탐구할 수 있다. Google Analytics 속성을 처음 설정할 때 비즈니스 목표를 선택하라는 메시지가 표시된다. 선택한 목표애 따라 특정 보고서가 생성된다.
보고서는 크게 2 종류로 나누어 볼 수 있다.
★개요보고서: 각기 다른 목표에 초점을 맞춘 여러 카드로 주제 관련 정보를 요약한다.
☆ 세부정보 보고서: 한 두가지 측정기준을 통해 데이터를 더욱 상세하게 살펴볼 수 있다.
개요 보고서를 구성하는 카드는 특정 목표에 초점을 맞춘다. 다음의 도구는 데이터를 조정할 수 있는 설정 중 일부이다. 측정기준 또는 측정항목 선택 도구는 카드에 표시되는 데이터를 변경할 수 있다. 이 경우 사용자 매체가 측정기준이 된다. 기간 선택기는 보고 기간을 선택할 수 있다. '사용자 획득 보기'는 관련 보고서와 연결되어 있다. 카드 주제와 관련하여 더욱 상세한 보고서 열람이 가능하다.
사용자 변동 추이는 선그래프로 나타나며 선택 기간 동안 웹사이트를 방문한 총 사용자 수를 일별로 볼 수 있다. 해당 도구를 사용하여 트래픽 증가로 구독의 증감여부를 확인할 수 있다. 사용자 매체별 신규 사용자는 막대그래프로 나타낼 수 있다. 이 차트는 자연유입, 추천, 이메일 등 사용자의 유입 경로를 알 수 있도록 매체별로 분류되어 있다. 신규 사용자를 다수 유입시켜 구독을 증가시킬 가능성이 있는 특정 매체가 있는지 확인할 수 있다.
탐색 메뉴의 '보고서'는 다양한 데이터 포인트와 유용한 정보를 대략적으로 보여주는 카드가 포함된 보고서 개요가 표시된다. 실시간 보고서를 활용하면 최근 30분 이내에 발생한 이벤트를 표시하여 이용자의 활동을 실시간으로 모니터링할 수 있다. 사용자가 현재 어떤 방식으로 나의 비즈니스와 상호작용하고 있는지에 관하여 알아보기 쉽도록 카드 기반의 레이아웃을 사용한다. 해당 보고서에서는 '1일 프로모션을 통해 사이트 또는 앱으로 트래픽이 유입되고 있는지를 확인', '블로그, 사회연결망 게시물 또는 트윗의 트래픽이 미치는 즉각적인 영향 모니터링', '추적 코드가 사이트 또는 앱에서 작동하고 있는지 확인' 할 수 있는 작업을 진행할 수 있다.
그 이외 기본 보고서는 모두 동일한 기본 형식을 따른다. 개요 보고서가 맨 위에 표시되고 이어 세부정보 보고서가 표시된다.
★ 획득: 고객이 어떤 경로로 유입되는가
☆참여도: 고객이 참여하는 콘텐츠는 무엇인가
★ 수익창출: 고객의 활동에는 어떤 것이 있나 ☆유지: 고객이 재방문하는가
★ 사용자 속성: 고객은 어떤 특성을 가지고 있는가
☆기술: 고객이 웹사이트나 앱에 엑세스하는 데 사용하는 것이 무엇인가
보고서 필터를 사용하면 보고서에 표시할 데이터를 관리할 수 있다. 필터를 사용하면 데이터를 이해하고, 전체 추이를 파악하고, 중요한 정보를 세부적으로 살피는데 도움이 된다. 또한 비교 규칙을 작성하여 데이터를 나란히 비교할 수 있다. 기본값 및 맞춤 측정기준을 적용한 비교를 추가할 수 있다. 하나의 비교에서 여러 개의 측정기준을 조합하는 것도 가능하다.
가장 중요한 것은 보고서는 측정기준 및 측정항목으로 구성된다는 사실이다.
보고서는 측정기준 및 측정항목으로 구성된다. 측정기준 값을 사용해 데이터를 필터링하고 맞춤설정하여 특정 통계를 얻을 수 있다.
GA 사용 전 관련 이론적 배경에 대해 알아보았다. 다음에는 직접 실습하며 그 툴을 다뤄볼 예정이다.
평균과 분산이 시간이 지나도 일정하지 않은 비정상 시계열로, 시간이 지남에 따라 무작위로 이동하는 경로를 설명하는 수학적 모델이다. 공식은 아래와 같다.
현재 값은 과거 값, 상수, 백색소음의 입력값으로 결정된 함수이며, 현재 값이 과거 정보와 랜덤한 변동의 영향을 받는다.
C. 정상성(Stationarity)
1. 정상성의 정의
시계열의 통계적 성질이 시간에 따라 변하지 않는 상태를 의미한다. 시계열 데이터에서 정상성을 가정하거나 내포하면 모델링과 예측 가능성이 좋아진다. 통계적 성질이란 데이터의 중앙값, 분포, 변동성, 상관성 등의 특성을 나타내며 데이터를 분석하는데 있어 중요한 역할을 한다.
Nelson-Plosser의 연 평균 물가상승률 데이터를 통해 알아보고자 한다.
# 연도별 평균 물가 상승률 계산import statsmodels.api as sm
import pandas as pd
import matplotlib.pyplot as plt
data = sm.datasets.macrodata.load_pandas().data
inflation_rate_df = pd.DataFrame({
'Year': data['year'],
'Inflation Rate': data['infl']
})
inflation_rate_yearly_avg = inflation_rate_df.groupby('Year').mean().reset_index()
# 데이터프레임 출력
display(inflation_rate_yearly_avg.loc[:5,:])
# 연도별 평균 물가 상승률 시각화
plt.figure(figsize=(10, 5))
plt.plot(inflation_rate_yearly_avg['Year'], inflation_rate_yearly_avg['Inflation Rate'], label='Average Inflation Rate')
plt.title('Average Inflation Rate per Year')
plt.xlabel('Year')
plt.ylabel('Inflation Rate')
plt.grid(True)
plt.show()
2. 정상성 시계열 조건
1) 시계열의 평균이 시간에 따라 변하지 않고 일정함
y_t의 기댓값이 시간t에 관계 없이 상수 μ로 일정함
시간이 변해도 데이터가 일정한 평균 주위를 중심으로 변동한다고 볼 수 있다.
2) 시계열의 분산이 시간에 따라 일정함
모든 시점에서 동일한 상수 분산을 나타냄
시간에 관계없이 일정한 변동성을 갖는다.
3) 시계열의 두 시점간 공분산이 시간(t)에 의존하지 않고 시간의 차(h)에만 의존함
시점 t와 t+h 사이의 공분산이 시차 h에만 의존하고, 특정 시점 t에는 의존하지 않음
공분산은 두 확률 변수의 선형 관계를 나타내는 값이며, 시점 t의 데이터와 t+h 시점의 데이터 사이의 공분산이 시간 t에 무관하게 일정하다는 의미를 갖는다.
3. 정상성 확보를 위한 데이터 변환 기법
1) 위의 데이터는 평균, 분산, 공분산이 모두 변동하고 있으며, 이는 비정상성을 띈다고 볼 수 있다.
2) 평균 안정화
- 차분(Diffencing)
추세, 계절성을 제거하기 위한 방법으로, 특정 시점과 그 시점 사이 발생하는 변화를 계산한다.
- 이동 평균 평활화(Moving Average Smoothing)
단기적인 변동성을 제거하고 전체적인 추세를 더 명확히 볼 수 있다.
3) 분산 안정화
- 로그 변환
분산을 줄이기 위한 변환으로, 데이터의 스케일이 너무 커지거나 변동성이 큰 경우 유용하다.
- 제곱근 변환
로그효과와 유사하게 분산을 줄이는 효과가 있으며 데이터가 극단적으로 변동하는 경우 유용하다.
D. 마무리
계속해서 비정상성을 나타낸다.
E. 20240926 내용 추가
정상성 확보를 위한 데이터 변환 기법을 사용하였음에도 불구하고 비정상성을 나타내는 것 같아 기존 그래프와 비교하였다.
1. 차분 적용
주황색 선을 보면 파란 선보다 일정하다.
2. 로그 변환
초록색 선이 파란 선보다 일정하다.
3. 제곱근 변환
보라색 선이 파란색 선보다 일정하다.
각 방법을 사용하였을 때 확실히 이 전보다 정상성을 갖는 것을 확인할 수 있다.
전에 그린 그래프의 Y축 값이 일정하지 않았기 때문에 그래프가 계속 널뛰는 것처럼 보였던 것이었다. 그래프를 그리면 축 확인하자.
해당 데이터는 분산 안정화를 시켰을 때 정상성을 갖는 것으로 보인다. 그 이유가 궁금해진다.
프로젝트를 하면서 가장 많이 본 에러문구는 Out Of Memory(OOM) 이다. 긴 시간 셀을 실행시켜 나온 메모리에러를 볼 때마다 절망적이었다. 그러나 빅데이터를 다루는 사람이라면 메모리 관리도 하나의 능력이다.
1) 메모리의 정의
'메모리(Memory) = 기억장치' 이다. 크게 RAM 과 Disk(SSD)로 나눌 수 있고, Disk(SSD)는 우리가 익히 잘 아는 저장공간을 의미한다. 장기적으로 데이터를 보관하는 공간으로 전원이 꺼져도 데이터는 사라지지 않는다.
2) RAM의 정의
'Random Access Memory' 로 사용자가 자유롭게 읽고 쓰고 지울 수 있는 기억장치를 의미한다. '주 기억장치'로 분류되며, '책상', '도마' 등으로 비유된다. 램이 많으면 한 번에 많은 일을 할 수 있으며, 이는 책상이 넓으면 그 위에 여러가지 물품을 올려놓을 수 있고, 그 물품을 다시 회수하면 물품이 있었다는 기록은 사라지기 때문이다.
램은 성능이 좋을수록, 용량이 클수록 더 많은 일을 빠르게 수행할 수 있기 때문에 다다익램이라고도 한다.
2. 데이터가 메모리에 저장되는 방법
메모리에는 수 많은 비트(0 혹은 1)가 저장되고 각각의 비트는 고유한 식별자(Unique identifier)를 통해 위치를 사용할 수 있다.
1) 정수(Integers)
컴퓨터에서는 이진법으로 표현하며, 얼마나 많은 메모리를 할당할 것인지를 말한다. 더 많은 메모리를 할당할 수록, 더 큰 숫자를 담을 수 있다.
import pandas as pd
from sklearn.datasets import load_iris
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score,silhouette_samples
# 전체 데이터의 평균 실루엣 계수 : silhouette_score # silhouette_samples의 평균과 같음
iris = load_iris()
X, y = iris.data, iris.target
Diabetes 데이터 회귀 분석 진행하기
Diabetes 데이터셋 이용
해당 데이터의 특징과 문제 해결 유형을 정리하라.
- Linear Regression 모델과 Polynomial Regression 모델을 학습한 후 MSE로 성능을 계산한 후 비교하라.
- 해당 문제에서는 Accuracy를 사용하면 어떻게 될지 고민 할 것.
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
- 필요 라이브러리 불러오기
# LinearRegression 모델 생성
model_lr = LinearRegression()
X = diabetes_df[['bmi']]
y = diabetes_df[['target']]
# train data, test data 분리
X_train, X_test, y_train, y_test = train_test_split(diabetes.data,diabetes.target, random_state=42,test_size=0.3)
# LinearRegression 모델 훈련
model_lr.fit(X=X_train, y=y_train)
# 예측값 구하기
y_pred =model_lr.predict(X_test)
y_train_pred = model_lr.predict(X_train)
# mse 평가
train_mse = mean_squared_error(y_train, y_train_pred)
test_mse = mean_squared_error(y_test,y_pred)
print(train_mse)
print(test_mse)
MSE 결과
3. Polynomial Regression 모델 생성 및 훈련
import pandas as pd
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
- 필요한 라이브러리 불러오기 (앞서 불러온 것은 다시 불러올 필요 없다.)
# 데이터 불러오기
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
diabetes_df = pd.DataFrame(data=X, columns=diabetes.feature_names)
diabetes_df['target'] = diabetes.target
# train data, test data 분리
X_train, X_test, y_train, y_test = train_test_split(diabetes.data,diabetes.target, random_state=42,test_size=0.3)
# 다항회귀분석 모델 생성
poly = PolynomialFeatures(degree=2)
# 다항식 특성을 갖는 x값 변환
X_poly_train = poly.fit_transform(X_train) #train 용 데이터 변환
X_poly_test = poly.transform(X_test) # test용 데이터 변환# PolynomialFeatures을 LinearRegression 모델 훈련
model_lr2 = LinearRegression()
model_lr2.fit(X_poly_train,y_train)
# 예측값 구하기
y_pred =model_lr2.predict(X_poly_test)
y_train_pred = model_lr2.predict(X_poly_train)
# mse 평가
train_mse2 = mean_squared_error(y_train, y_train_pred)
test_mse2 = mean_squared_error(y_test,y_pred)
print(train_mse2)
print(test_mse2)
4. Linear Regression 모델과 Polynomial Regression 모델의 MSE 비교
학습 데이터의 결과, Polynomial Regression의 학습 데이터에 대한 MSE가 Linear Regression보다 낮다. 이는 Polynomial Regression 이 학습 데이터에 더 잘 맞추어져 있다는 것을 의미한다.
테스트 데이터의 결과, Polynomial Regression의 MSE가 Linear Regression의 MSE보다 높다. 즉, 학습 데이터의 결과와 반대되는 결과가 도출된다. 이는 Polynomial Regression이 학습데이터에는 잘 맞았지만 테스트 데이터에 대해서는 성능이 떨어진다는 것을 의미한다.
두 데이터를 바탕으로 Polynomial Regression의 경우 학습데이터가 과적합되었음을 유추할 수 있다. 학습데이터에서는 더 복잡한 Polynomial Regression이 잘 작동하지만, 테스트 데이터에서는 일반화가 잘 되지 않으며 성능이 떨어짐을 알 수 있다. 그러나 Linear Regression은 학습데이터와 테스트 데이터 간의 MSE 차이가 크지 않아 비교적 안정적인 성능을 보인다.
6. Accuracy 사용에 대한 고민
회귀 문제에서 Accuracy 지표를 사용하는 것은 적절하지 않을 수 있다고 생각한다. Accuracy는 주로 분류 문제에서 예측의 정확성을 비율로 나타내며, 이산적인 결과를 다루기 때문에 중요한 역할을 한다. 그러나 회귀 문제는 결과가 연속적이므로 Accuracy가 회귀 문제의 특성을 충분히 반영하지 못할 가능성이 있다. 임의의 기준을 설정하여 Accuracy를 계산하는 경우, 이는 주관적일 수 있으며 모델의 성능을 왜곡할 위험이 존재한다. 회귀 모델은 예측값이 실제값에 얼마나 근접하는지를 평가하고, 이 차이를 최소화하는 것을 목표로 한다. 예측값이 실제값에서 크게 벗어난 경우에도 Accuracy 계산에서는 이러한 차이가 반영되지 않을 수 있다. 따라서 회귀 문제에서는 MSE(Mean Squared Error)나 MAE(Mean Absolute Error)와 같은 연속형 평가 지표를 사용하는 것이 더 합리적이고 정확할 것으로 보인다. 이 실험에서도 MSE를 사용하여 두 모델을 비교했으며, 그 결과 Polynomial Regression 모델이 학습 데이터에서는 과적합되었지만 테스트 데이터에서는 성능이 떨어졌다는 것을 정확히 파악할 수 있었다. 만약 Accuracy를 사용했다면 이러한 과적합 문제를 제대로 감지하지 못했을 가능성이 크다.