A. 들어가며

데이터 분석에 대해 배우면서 가장 많이 접하게 되는 학문은 '통계학'이다. 교육과정에 확률과 통계가 있지만, 이해보다는 암기 위주로 공부했던 기억이 난다. 데이터 분석가 혹은 데이터 사이언티스트가 되고자 할 때, 통계에 대해 제대로 아는 것이 중요하다 판단된다. 이 기회에 확률과 통계에 대해 속속들이 파헤쳐보고자 한다.

지금부터 쓰일 글은 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. 기술 통계와 추론 통계의 통합적인 프로세스

통합적 프로세스

 

황세웅 저자가 기술 통계와 추론 통계에 대해 작성한 문장으로 마무리하고자 한다. 통계에 대해 처음 공부를 시작할 때 어떤 개념을 주로 공부해야하는지, 한 쪽 분야만 공부해도 되는 것인지 고민을 했던 내게 그 답을 해준 문장이다. 

추론 통계가 기술 통계보다 더 중요하다고 단정 지을 수 없다. 기술 통계가 있어야 추론 통계가 가능한 것이고 기술 통계를 확실히 했을 때보다 정확한 인사이트를 얻을 수 있다. 첫 단추를 잘못 끼우면 결국 마무리도 제대로 딜 수 없다. 물론 추론 통계가 데이터 과학의 주축을 맡고 있지만 기술 통계는 그 기반과 같은 요소다.

 

 

'Today I Learned' 카테고리의 다른 글

[TIL] GA 이론  (1) 2024.12.06
[TIL] 시계열 데이터  (2) 2024.09.25
[TIL] 메모리 관리  (1) 2024.09.24
[TIL] Tableau 실습  (0) 2024.09.03
[TIL] BI (Tableau 기초)  (6) 2024.09.02

A. 계정 탐색하기

왼쪽 사이드 바 구성요소는 아래와 같다.

홈: 가장 먼저 표시되는 페이지로, 나와 내 속성과 관련된 정보가 표시된다. 

보고서: 사용자가 분석하고자 하는 앱 혹은 웹사이트와 상호 작용하는 방식에 대한 일반적인 질문의 답을 찾을 수 있는지 미리 준비된 보고서로 확인할 수 있다.

탐색 분석: 표준 보고서 외에 고객 참여에 대한 보다 심층적인 통계를 제공하는 고급 분석 기법을 사용할 수 있다.

광고: 온라인 광고 활동을 분석, 이해, 개선할 수 있는 정보를 제공한다.

관리: 계정, 속성, 이벤트, 사용자 설정을 관리한다.

 

페이지 상단의 속성 선택기: 계정 또는 속성이 두 개 이상인 경우 모든 페이지에서 계정 또는 속성 간에 전환할 수 있다.

 

B. 이벤트 관리

이벤트는 페이지 조회수, 버튼 클릭수, 사용자 액션처럼 웹사이트 또는 앱에서 발생하는 활동에 대한 통계 정보를 제공한다. 대부분의 일반적인 이벤트는 Google Analytics에 웹사이트나 앱을 연결하면 자동으로 수집된다.

데이터 스트림 설정에서 향상된 측정을 사용 설정한 경우, 코드를 추가하지 않아도 속성에서 더 많은 이벤트를 자동으로 수집한다.

1) 자동수집 이벤트

자동수집 이벤트는 앱 또는 사이트와의 기본적인 상호작용에 의한 트리거로 발생한다. 별도로 명시되지 않는 한 애널리틱스는 Android 및 iOS앱의 이벤트를 수집한다. 이러한 이벤트의 이름과 매개변수는 원시 이벤트 데이터에 엑세스할 때 유용하다. 다음 링크를 통해 각 이벤트 매개변수와 Google 애널리틱스에서 각 매개변수가 측정기준 또는 측정 항목을 업데이트하는 방식을 알아볼 수 있다. https://support.google.com/analytics/answer/9234069

 

[GA4] 자동 수집 이벤트 - 애널리틱스 고객센터

도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요

support.google.com


2) 추천 이벤트와 맞춤 이벤트

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 사용 전 관련 이론적 배경에 대해 알아보았다. 다음에는 직접 실습하며 그 툴을 다뤄볼 예정이다.

'Today I Learned' 카테고리의 다른 글

[TIL] 통계란 무엇인가  (0) 2025.01.16
[TIL] 시계열 데이터  (2) 2024.09.25
[TIL] 메모리 관리  (1) 2024.09.24
[TIL] Tableau 실습  (0) 2024.09.03
[TIL] BI (Tableau 기초)  (6) 2024.09.02

A. 시계열 데이터(Time Series Data)

1. 정의

시간에 따라 정렬된 데이터로, 주기적으로 기록되어 이를 동일한 시간단계(timestep)로 분포한다고 정의한다.

시계열은 추세, 계절성, 잔차로 분해된다.

 

2. 추세(Trend)

지속적이고 일관된 방향으로 변화하는 장기적 패턴을 의미한다.

시계열에서 느리게 움직이는 큰 변화를 나타낸다. 시간이 지남에 따라 시계열이 점진적으로 증가하거나 감소하는 현상을 말한다.

 

3. 계절성(Seasonality)

일정한 시간 주기에 따라 반복되는 패턴으로, 일반적으로 시간에 관련된 고정된 주기를 가지고 있으며 특정시점에서 데이터가 규칙적으로 상승하거나 하락하는 현상을 말한다. 사계절을 의미하는 것이 아니라 순환하는 현상을 이야기한다.

 

4. 주기성(Cycles)

경제적, 사회적, 정치적 요인에 의해 발생하는 불규칙한 변동 패턴으로 장기적으고 불규칙한 패턴이다.

계절적 구성요소는 시계열의 계절적 패턴, 주기는 일정 기간 동안 반복적으로 발생한다.

개념 계절성 주기
규칙성 일정한 간격으로 반복 불규칙적으로 발생
발생 원인 계절적 요인(기후 등) 경제, 사회적인 요인(경기순환)
시간 범위 1년 이내 수년 이상

 

5. 잔차(Residual)

시계열 데이터에서 추세와 계절성을 제거한 후 남는 무작위적 변화량을 의미한다. 특정 패턴을 가지지 않으며 주로 백색소음(White Noise)처럼 랜덤한 요소이다.

 

6. 시계열 예측 vs 회귀 예측

  머신러닝 모델 시계열 모델
종속변수(Y) 수치형, 범주형 주로 수치형
독립변수(X) 다중 변수 가능 단일 변수(주로 시간)
모델 유형 선형회귀, 의사결정나무, 신경망 등 ARIMA, Prophet 등
장점 여러 변수간의 관계를 분석 가능
비선형 패턴 학습 기능
시간의 흐름 포착 기능
이해와 해석이 용이
단점 시간에 따른 의존성 무시(추세, 계절성)
과적합 위험
다변량 분석 제한
비선형 모델링 제한
https://snowgot.tistory.com/120

 

B. 확률 보행(Random Walk) 프로세스

1. 확률보행 정의

평균과 분산이 시간이 지나도 일정하지 않은 비정상 시계열로, 시간이 지남에 따라 무작위로 이동하는 경로를 설명하는 수학적 모델이다. 공식은 아래와 같다.

현재 값은  과거 값, 상수, 백색소음의 입력값으로 결정된 함수이며, 현재 값이 과거 정보와 랜덤한 변동의 영향을 받는다.

 

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축 값이 일정하지 않았기 때문에 그래프가 계속 널뛰는 것처럼 보였던 것이었다. 그래프를 그리면 축 확인하자.

해당 데이터는 분산 안정화를 시켰을 때 정상성을 갖는 것으로 보인다. 그 이유가 궁금해진다.

'Today I Learned' 카테고리의 다른 글

[TIL] 통계란 무엇인가  (0) 2025.01.16
[TIL] GA 이론  (1) 2024.12.06
[TIL] 메모리 관리  (1) 2024.09.24
[TIL] Tableau 실습  (0) 2024.09.03
[TIL] BI (Tableau 기초)  (6) 2024.09.02

A. 금일 학습내용

1. 메모리란 무엇인가

프로젝트를 하면서 가장 많이 본 에러문구는 Out Of Memory(OOM) 이다. 긴 시간 셀을 실행시켜 나온 메모리에러를 볼 때마다 절망적이었다. 그러나 빅데이터를 다루는 사람이라면 메모리 관리도 하나의 능력이다.

 

1) 메모리의 정의

'메모리(Memory) = 기억장치' 이다. 크게 RAM 과 Disk(SSD)로 나눌 수 있고, Disk(SSD)는 우리가 익히 잘 아는 저장공간을 의미한다. 장기적으로 데이터를 보관하는 공간으로 전원이 꺼져도 데이터는 사라지지 않는다.

 

2) RAM의 정의

'Random Access Memory' 로 사용자가 자유롭게 읽고 쓰고 지울 수 있는 기억장치를 의미한다. '주 기억장치'로 분류되며, '책상', '도마' 등으로 비유된다. 램이 많으면 한 번에 많은 일을 할 수 있으며, 이는 책상이 넓으면 그 위에 여러가지 물품을 올려놓을 수 있고, 그 물품을 다시 회수하면 물품이 있었다는 기록은 사라지기 때문이다. 

램은 성능이 좋을수록, 용량이 클수록 더 많은 일을 빠르게 수행할 수 있기 때문에 다다익램이라고도 한다.

 

2. 데이터가 메모리에 저장되는 방법

메모리에는 수 많은 비트(0 혹은 1)가 저장되고 각각의 비트는 고유한 식별자(Unique identifier)를 통해 위치를 사용할 수 있다. 

1) 정수(Integers)

컴퓨터에서는 이진법으로 표현하며, 얼마나 많은 메모리를 할당할 것인지를 말한다. 더 많은 메모리를 할당할 수록, 더 큰 숫자를 담을 수 있다.

  • int8:-128 ~ 127
  • int16: -32768 ~ 32727
  • Int32: -2,147,483,648 ~ 2,147,483,647
  • Int64: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

부호를 위해 메모리의 단위(1비트)를 사용하지만, 담을 수 있는 숫자를 표현하자면 위와 같다.

 

- 오버플로(Overflow) : 크기에 맞지 않는 데이터를 넣어 의도하지 않은 결과가 나오는 것

파이썬의 데이터타입은 기본적으로 동적(Dynamic)하기 때문에 자동으로 데이터 형이 바뀐다. 이에 큰 숫자를 다루는 것에 큰 주의를 기울여야한다.

아래와 같이 메모리 데이터 타입을 지정하는 방법이 있다. 

int32_cols = ["review_likes"]
int8_cols = ["review_rating"]
cate_cols = ["app_name", "author_app_version"]

memory_usage_before = df.memory_usage().sum()

df.info()
for col in int32_cols:
    assert abs(df[col].max()) < 2_147_483_647 
    df[col] = df[col].astype(pd.Int32Dtype())
    
df.info()
for col in int8_cols:
    assert abs(df[col].max()) < 127
    df[col] = df[col].astype(pd.Int8Dtype())
    
df.info()
for col in cate_cols:
    assert df[col].nunique() < 10_000
    df[col] = df[col].astype("category")
    
df.info()

memory_usage_after = df.memory_usage().sum()
reduction_ratio = 1 - (memory_usage_after / memory_usage_before)

print(f"Memory Usage: {memory_usage_before:,} -> {memory_usage_after:,} ({reduction_ratio*100:.2f}% reduced)")
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 28154385 entries, 0 to 28154384
Data columns (total 8 columns):
 #   Column              Dtype  
---  ------              -----  
 0   review_id           object 
 1   app_name            object 
 2   author_name         object 
 3   pseudo_author_id    object 
 4   author_app_version  object 
 5   review_rating       float64
 6   review_likes        int64  
 7   review_timestamp    object 
dtypes: float64(1), int64(1), object(6)
memory usage: 1.7+ GB
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 28154385 entries, 0 to 28154384
Data columns (total 8 columns):
 #   Column              Dtype  
---  ------              -----  
 0   review_id           object 
 1   app_name            object 
 2   author_name         object 
 3   pseudo_author_id    object 
 4   author_app_version  object 
 5   review_rating       float64
 6   review_likes        Int32  
 7   review_timestamp    object 
dtypes: Int32(1), float64(1), object(6)
memory usage: 1.6+ GB
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 28154385 entries, 0 to 28154384
Data columns (total 8 columns):
 #   Column              Dtype 
---  ------              ----- 
 0   review_id           object
 1   app_name            object
 2   author_name         object
 3   pseudo_author_id    object
 4   author_app_version  object
 5   review_rating       Int8  
 6   review_likes        Int32 
 7   review_timestamp    object
dtypes: Int32(1), Int8(1), object(6)
memory usage: 1.4+ GB
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 28154385 entries, 0 to 28154384
Data columns (total 8 columns):
 #   Column              Dtype   
---  ------              -----   
 0   review_id           object  
 1   app_name            category
 2   author_name         object  
 3   pseudo_author_id    object  
 4   author_app_version  category
 5   review_rating       Int8    
 6   review_likes        Int32   
 7   review_timestamp    object  
dtypes: Int32(1), Int8(1), category(2), object(4)
memory usage: 1.1+ GB
Memory Usage: 1,801,880,772 -> 1,182,813,738 (34.36% reduced)

 

데이터에 맞는 데이터 타입을 부여하였을 때 30%가 넘는 메모리 감소를 확인할 수 있다. 

 

2) 그 외 타입

정수가 아닌 타입으로는 문자열(String, Category), Datetime 등의 데이터 타입이 존재한다. 이는 정수와 마찬가지로 알맞은 메모리를 할당을 통해 메모리 최적화를 유지할 수 있다.

 

B. 마무리

데이터를 다룰 때는 반드시 메모리 최적화를 생각해야겠다. 시간도, 비용도 절감할 수 있는 좋은 방법이 있는데 그걸 하지 아니할 이유가 어디 있겠는가.

'Today I Learned' 카테고리의 다른 글

[TIL] GA 이론  (1) 2024.12.06
[TIL] 시계열 데이터  (2) 2024.09.25
[TIL] Tableau 실습  (0) 2024.09.03
[TIL] BI (Tableau 기초)  (6) 2024.09.02
[TIL] 데이터베이스 구축  (0) 2024.08.23

A. 금일 학습내용

1. Tableau 실습하기

1) 선 그래프

 

2) 막대그래프

\

- 태블로 막대 그래프 필터 및 행렬 데이터 셋

 

- 맵 그래프

4) 하이라이트 그래프

'Today I Learned' 카테고리의 다른 글

[TIL] 시계열 데이터  (2) 2024.09.25
[TIL] 메모리 관리  (1) 2024.09.24
[TIL] BI (Tableau 기초)  (6) 2024.09.02
[TIL] 데이터베이스 구축  (0) 2024.08.23
[TIL] 군집분석(과제)  (0) 2024.08.21

A. 금일 학습 내용

비즈니스 인텔리전스를 통해 데이터 분석 및 시각화 서비스를 제공하는 Tableau 툴에 대해 학습하였다.

1주차

  1. BI 소개
    1. 지표를 선택하는데 매우 깊은 고민이 필요하다.
    2. 대시보드 구축에 필요한 업무 미팅
    3. Ad-hoc 업무 발생 → 다양한 팀들의 의사결정을 서포트하는 역할
    4. 전사 지표를 취합한 하나의 대시보드를 만들기도 함
  2. BI 워크 프로우
    1. 데이터 레이크 → 데이터 웨어하우스 → 데이터 마트 → BI 툴
      1. 데이터 레이크: 모든 raw data(정형 데이터, 로그 데이터, 테이블 등) 저장할 수 있는 스토리지
      2. 데이터 웨어하우스: 데이터를 장기적인 보존용으로 통합, 정제, 분석하여 정리한 저장소 (AWS Redshift, Snowflake, Google Bigquery
      3. 데이터 마트: 부서별, 목적별 분석용으로 만든 데이터 웨어하우스의 데이터 일부분
    2. 왜 Tableau 일까?
      1. 장점
        1. 다양한 형식의 파일을 대시보드로 만들어 쉽게 공유 가능
        2. 손쉬운 Drag & Drop으로 인터랙티브한 대시보드와 그래프 시각화 가능
        3. 최근 가장 많으 회사가 사용함
        4. 무료로 활발한 글로벌 커뮤니티, 템플릿, 강의를 참고 가능
      2. 단점
        1. 데이터 용량이 크거나 개발된 대시보드의 양이 많아지면 대시보드 로딩 속도가 느려짐
        2. 비쌈

2주차

  1. 데이터 원본 연결 형태
    1. 라이브 VS 추출
      1. 라이브: 원본 파일이 바뀌면 연동이 됨. 새로 고침 버튼을 클릭하면 실시간으로 데이터가 업데이트할 수 있음
      2. 추출: 라이브 연결을 끊고 현재 데이터만 로컬로 가져오는 형태로, 원본 데이터 파일이 클 때 사용하기 좋음
  2. 병합 방식
    1. 관계: 하나의 테이블로 병합x, 관계를 설정해서 뷰에서 필드를 사용할 수 있다. 조인보다 유연하고 동적인 방법, 효율적, 실무에서 조인보다 많이 사용
    2. 유니온: SQL의 UNION과 비슷한 개념, 테이블 구조가 같은 형식인 경우
    3. 조인: SQL 조인과 비슷함, 테이블은 항상 하나의 테이블로 병합
    4. 블랜딩: 물리적으로 테이블을 병합하지 않고, 워크시트 화면에 두 테이블이 같이 있음, 하나의 테이블을 병합하는 것이 아니라 서로 다른 데이터 베이스에서 데이터를 불러오고 임시로 분석할 때 사용함
    5. 관계와 조인의 차이점: https://help.tableau.com/current/online/ko-kr/datasource_relationships_learnmorepage.htm?source=productlink
  3. 커넥터 연동: 구글 빅쿼리 → 이런 것도 있다.
  4. 차원 VS 측정값
    1. 차원(dimension): 측정 기준 또는 분석의 기준
    2. 측정값(metric): 측정하는 값 또는 항목 → agg함수로 통계함수 사용
  5. 연속형 vs 불연속형
    1. 연속형: 하나로 연결되어 이어진 데이터
    2. 불연속형: 이어지지 않고 각각 구분되는 개별적인 데이터
  6. 계산된 필드
    1. 기존 컬럼을 계산해서 새로운 컬럼 생성, 계산된 필드를 사용하면 대이터 워본에 있는 데이터에서 새로운 필드를 만들 수 있음
    2. 지표에 대한 작업을 하기에 잘 알아두기!!!

3주차

  1. 데이터 시각화: 데이터를 그래프 형식으로 나타내어 직관적으로 이해하기 쉽게 만든다. 그래프를 활용하여 데이터의 추세, 분포, 상관 관계 등을 시각적으로 표현할 수 있음
  2. 효과적인 차트 고르기
    1. 비교
      1. 막대, 선 차트
    2. 관계
      1. 스케터 차트
      2. 버블 차트
    3. 분포
      1. 히스토그램
    4. 구성
      1. 스택 플랏
      2. 파이차트, 워터풀 차트
  3. 데이터 시각화의 장점
    1. 데이터를 빠르게 이해하고 의사결정 가능
    2. 실무에서 협업할 때, 효과적으로 커뮤니케이션 할 수 있음
    3. 직관적인 데이터의 이해를 통해 인사이트를 도출 가능
  4. 기본 그래프
    1. 선 그래프(LINE PLOT)
      1. 간단하고 사용하기 쉬움
      2. 시계열 데이터를 시각화할 경우, 변화량과 트랜드를 한눈에 보기에 용이함
      3. 연속적 데이터에 사용하기 적합, 연속형 데이터: 온도, 시간 등
    2. 막대 그래프(BAR PLOT)
      1. 간단하고 사용하기 쉬움
      2. 범주 간의 차이나 분포를 시각적으로 이해하기 쉬움
      3. 범주형 데이터에 사용하기 적합함
    3. 맵 차트(MAP CHART)
      1. 지도를 활용해서 지리적 위치를 살펴볼 수 있음
      2. 각 지역별 데이터의 분포 및 비중을 한 눈에 확인할 때 주로 사용
      3. 기능
        1. 뷰 툴바: 확대 축소
        2. 백그라운드 레이어: 투명도설정, 해안선, 건물 표시 등 지도 배경에 대한 다양한 기능이 있음
    4. 파이 차트(PIE CHART)
      1. 각 부분의 크기가 상대적인 비율이기 때문에 각 부분이 전체에서 차지하는 비중을 쉽게 이해할 수 있음
      2. 데이터의 구성 비율과 분포를 한눈에 파악할 수 있음
      3. 다양한 변수를 다루기에는 적합하지 않을 수 있음. 변수가 적을 때 직관적으로 사용하기 용이함
    5. 트리맵 차트(TREEMAP CHART)
      1. 데이터를 계층적으로 표현하는데 사용
      2. 카테고리별로 특정 데이터 집합이 전체 데이터에서 차지하는 비율을 면적으로 표현하여 카테고리별 구성 요소를 한눈에 파악할 수 있음
  5. 심화 그래프
    1. 도넛 차트(DONUT CHART)
      1. 파이 차트와 비슷한 형태로 가운데 구멍이 뚫린 경우를 도넛 차트라고 부름
      2. 각 부분의 크기가 상대적인 비율이기 때문에 각 부분이 전체에서 차지하는 비중을 쉽게 이해할 수 있음
      3. 태블로에서는 대시보드의 KPI 카드로 많이 활용함
    2. 히트맵 차트(HEATMAP CHART)
      1. 태블로에서 하이라이트 테이블이라고도 부름
      2. 색상을 활용해서 데이터 값을 시각적으로 강조할 수 있음. 색상의 그라데이션을 통해 측정값을 한 눈에 비교할 수 있음
    3. 영역 차트(AREA CHART)
      1. 영역 차트는 선 아래 영역을 색을 채워서 데이터의 영역 크기를 파악
      2. 시간에 따른 데이터 추이를 시각적으로 나타냄
      3. 데이터의 변화 및 흐름을 쉽게 파악할 수 있음.
    4. 스택 플랏(STACKED PLOT)
      1. 100% 누적 그래프: 기준을 비교하기 쉬움
      2. 단순 누적 그래프: 기준선이 일정하지 않기 때문에 비교하기가 어려움
      3. 상대적인 비율을 직관적으로 시각화 가능
      4. 시간에 따라 데이터가 어떻게 변하는지 시각적으로 알 수 있음
  6. 시각화 레벨업
    1. 이중 축(콤보차트)
      1. 하나의 차원을 두 개 이상의 측정값으로 동시에 파악하고 싶을 때 활용
      2. 두 가지 서로 다른 데이터 집합을 한 번에 비교 가능
      3. 축에 서로 다른 단위나 기준을 가지고 있는 경우, 그래프를 볼 때 한눈에 알아보기 어려움
    2. 평균선/참조선
      1. 분석 패널에서 평균선 라인/상수라인/참조선을 추가해서 의사결정을 빠르게 할 수 있음
  7. 데이터 분석하기
    1. 박스 플랏(BOX PLOT)
      1. 데이터의 분포와 이상치를 시각적으로 파악할 때 사용하는 그래프
    2. 파레토 차트(PARETO CHART)
      1. 파레토 법칙: 전체 결과의 80%가 전체 원인의 20%에서 일어난다는 마케팅 기법 (다수의 결과는 소수의 원인에 의해 생겨남)
    3. 상관관계(SCATTER PLOT)
      1. 지표간 어떤 선형적인 관계가 있는지 알아보기 위해 상관분석을 자주 활용함
      2. 피어슨 상관관계
    4. 시계열 예측
      1. 태블로에서 지수 평활법을 활용해서 예측 모델링을 함.
      2. 과거 데이터에 기반하여 미래를 예측하는 시계열 예측

4주차

  1. 텍스트 레이블
    1. 데이터 형태
      1. 행과 열로 이루어짐
      2. 데이터 구조화 형식에는 대표적으로 2가지 형식의 WIDE FORMAT TABLE과 LONG FORMAT TABLE이 있다.
      3. 태블로의 표현 방식에서 텍스트 테이블로 표현해 활용 가능
      4. WIDE FORMAT TABLE
        1. 옆으로 넓은 형태로 데이터가 쌓임. 하나의 열에 여러 개의 데이터를 나란히 나열하는 형태
        2. 데이터 분석을 할 경우 많이 사용되는 형태로 표를 비교하거나 그래프 시각화 하기 쉬움.
        3. 상관관계를 분석하거나 각 변수의 분포를 비교할 때 적합
      5. LONG FORMAT TABLE
        1. 아래로 쌓이는 긴 데이터 셋
        2. 한 개의 특성을 나타내는 열을 가진 여러 개의 행
        3. 시간에 따른 변화와 카테고리 간 비교를 시각화하기에 적합함
      6. 총계
        1. 분석탭에서 열과 행의 총합계 계산 가능
    2. 태블로 작동 원리
      1. 필터별 작동원리 (순서 중요함)
        1. 추출 필터 : 데이터 소스에서 추출된 데이터 필터링(데이터 연결을 추출로 선택했을때만 사용가능)
        2. 데이터 원본 필터: 데이터 원본 소스에서 일부 데이터만 필터링
        3. 컨텍스트 필터: 특정값에 대한 데이터만 필터링
        4. 차원 필터: 차원을 기준으로 데이터 필터링
        5. 측정값 필터: 측정값을 기준으로 데이터 필터링
        6. 테이블 계산 필터: 특정 계산 결과를 기준으로 데이터 필터링
      2. 계산과 필터의 작동 순서
        1. 쿼리 파이프 라인: 계산과 필터의 태블로 작업 순서
        2. 필터를 추가할 때 해당 필터가 항상 작업 순서에 따라 설정된 순서대론 실행
      3. 필터 활용법
        1. Top N : 컨텍스트 필터를 활용하여 작동 순서를 바꿀 수 있음
      4. 기본 계산식 활용
        1. 계층과 드릴 업다운
          1. 날짜 형태는 자동으로 되어 있음
        2. 퀵테이블 계산
      5. 태블로 함수 (SQL과 대강 비슷함)
  2. LOD 식 (세분 수준 식)
    1. 계산할 세분 수준을 제어할 수 있음
    2. LOD식은 세분화된 수준(INCLUDE), 덜 세분화 된 수준(EXCLUDE), 완전히 독립적인 수준(FIXED)로 나뉨
    3. 구조
      1. {[FIXED | INCLUDE | EXCLUDE] [ 차원1], [차원2] : AVG([측정값])}
    4. FIXED
      1. 뷰에 있는 차원과 상관없이 계산된 필드에서 FIXED 계산식을 고정시켜 지정된 차원 계산
    5. INCLUDE
      1. 뷰에 지정된 차원 뿐만 아니라 모든 차원을 포함해서 계산
    6. EXCLUDE
      1. 차원을 제거해서 계산
  3. 대시보드 설계와 구성
    1. 대시보드 구축 프로세스
      1. 대시보드 뷰어 및 목적 선정
      2. 문제 정의
      3. 필요한 데이터 선정 및 데이터 마트 구축 (실무)
      4. 지표 선정
      5. 스케치
      6. 시각화
      7. 대시보드 완성
      8. 대시보드에서 이끌어내는 액션
      9. 완성된 대시보드 게시 또는 대시보드팀 뷰어 권한 부여
      10. 실무에 필요한 지표 정의 및 선정 (실무)
    2. 지표 정의 및 선정
      1. 비즈니스별 지표 선정 : 메트릭 하이라키
    3. 대시보드 기능
      1. 컨테이너(가로, 세로)와 뷰가 있음
      2. 바둑판식 기능과 부동 기능으로 구성됨
        1. 바둑판식 기능 : 컨테이너와 뷰가 서로 겹치지 않으며, 전체 대시보드 크기에 따라 크기가 자동 조정이 됨
        2. 부동 기능: 시계열 예측처럼 다른 뷰와 겹칠 수 있음
        3. 피그마와 부동기능
          1. 피그마 툴과 태블로 부동기능을 활용하면 조금 더 전문적이고 깔끔한 대시보드를 만들 수 있음
        4. 대시보드 레이아웃
          1. 일관된 레이아웃
            1. 그리드 표시
          2. 레이아웃 크기 설정
            1. 뷰어 유형에 따라 3가지 버전 중 크기 선택 가능
              1. 데스크톱 버전, 태블릿 버전, 모바일 전화 버전
    4. 대시보드 설계
      1. 대시보드 구성
        1. 대시보드 게층 구조화
          1. 상단: 주요 지표
          2. 하단: 그래프 시각화
        2. 대시보드 스케치
          1. 스케치와 디자인 구성이 중요함
        3. 전주의적 속성
          1. 어떤 것을 보자마자 뇌에서 바로 알아차릴 수 있도록 강조하기 위한 시각화 속성으로 이를 활용하면 대시보드 사용자가 인사이트를 발굴할 수 있도록 함
          2. 핵심정보가 한눈에 파악할 수 있도록 방향, 길이, 너비, 색상 요소들을 활용해서 강조할 수 있음
        4. 컬러 선정
          1. RGB 색상 및 컬러 조합을 맞춰 시각화하면 뷰어 관점에서 직관적으로 한눈에 들어옴
    5. 대시보드 만들기

 Tableau의 기초 내용에 대하여 알아보았다.

 

B. 마무리

지금까지 공부한 EDA, 머신러닝과 달리 드래그앤드롭 방식의 툴로 코딩을 하지 않아도 된다.

지금까지 배운 내용만으로도 충분히 데이터 시각화를 할 수 있다 생각할 수 있지만 해당 툴을 이용하면 데이터에 관심이 없는 사람이어도 한눈에 정보를 파악하고 이해할 수 있다. 

이는 데이터분석가가 궁극적으로 추구하는 목표이다. 정보의 효과적인 전달이 가능하고 의사결정에 더욱 큰 도움이 된다는데 사용하지 않을 이유가 무엇인가.

비록 처음 사용하는 툴이라 어색하기는 하지만 잘 사용하고 싶다. 

'Today I Learned' 카테고리의 다른 글

[TIL] 메모리 관리  (1) 2024.09.24
[TIL] Tableau 실습  (0) 2024.09.03
[TIL] 데이터베이스 구축  (0) 2024.08.23
[TIL] 군집분석(과제)  (0) 2024.08.21
[TIL] 선형회귀분석(과제)  (0) 2024.08.20

A. 금일 학습 내용

프로젝트를 시작했다.

데이터 웨어하우스를 만들게 되었다.

데이터 병합 순서에 따라 얼마나 많은 시간과 비용이 변할 수 있는가에 대해 뼈져리게 느꼈다.

 

B. 데이터베이스 구축

여러 테이블을 merge해서 하나의 큰 테이블을 만들어야 할 때가 생긴다. 하나의 기준에 맞춰서 계속 left join을 해서 하나의 테이블을 구축하였다고 하더라도, 그 테이블이 제대로 만들어진 것인지 확인해야할 필요가 있다.

 

관계를 갖는 테이블끼리 join 후 전체 데이터에 merge 하는 방법을 추천한다.

'Today I Learned' 카테고리의 다른 글

[TIL] Tableau 실습  (0) 2024.09.03
[TIL] BI (Tableau 기초)  (6) 2024.09.02
[TIL] 군집분석(과제)  (0) 2024.08.21
[TIL] 선형회귀분석(과제)  (0) 2024.08.20
[TIL] 로지스틱 회귀분석(분류분석)  (0) 2024.08.16

A. 금일 학습 내용

1. iris 데이터 불러오기

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

- scikit-learn에서 iris dataset를 가져온다.

 

2. k-means clustering 학습하기

kmeans = KMeans(n_clusters = 2, init = 'k-means++', max_iter = 300, random_state = 42)
kmeans.fit(iris_df)

- 2개의 군집으로 나누어 k-means clustering 학습한다.

 

3. 산점도 확인하기

kmeans.labels_
iris_df['target'] = df['species']
iris_df['cluster'] = kmeans.labels_

plt.figure(figsize=(9,6))
sns.scatterplot(data=iris_df, x='sepal_length', y='sepal_width', hue = 'cluster', palette='viridis')
plt.title('Clustering')
plt.show

4. 평균 실루엣 계수 확인하기

silhouette_score(iris_df, labels)

 

5. 최적의 군집 개수 시각화

from kmeans_visaul import visualize_silhouette
visualize_silhouette([2,3,4,5], iris_df) #k=3

 

6-1. 실루엣 분석을 통한 최적의 k찾기

silhouette_scores = []
for k in range(2,11):
    kmeans = KMeans(n_clusters=k, random_state=42)
    kmeans.fit(iris_df)
    score = silhouette_score(iris_df, kmeans.labels_)
    silhouette_scores.append(score)

 

6-2. 실루엣 분석 시각화

plt.plot(range(2,11), silhouette_scores, marker='o')

 

7-1. 엘보우 방법을 통한 최적의 k 찾기

sse = []
for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, random_state=43)
    kmeans.fit(iris_df)
    sse.append(kmeans.inertia_)

- 엘보우 방법은 SSE 값을 통해 최적의 군집 개수를 구하는 방법이다.

- inertia_ 속성을 활용하여 SSE 값을 구한다.

 

7-2. 엘보우 방법의 시각화

plt.plot(range(1,11), sse, marker='o')
plt.show()

- 엘보우처럼 꺾이는 부분이 최적의 군집 개수이다.

 

8. 결과

- iris 데이터의 경우, 다양한 방법을 통해 최적의 군집 개수가 3개임을 알 수 있다.

'Today I Learned' 카테고리의 다른 글

[TIL] BI (Tableau 기초)  (6) 2024.09.02
[TIL] 데이터베이스 구축  (0) 2024.08.23
[TIL] 선형회귀분석(과제)  (0) 2024.08.20
[TIL] 로지스틱 회귀분석(분류분석)  (0) 2024.08.16
[TIL] map( ), 문자열 나누기  (0) 2024.08.14

A. 금일 학습 내용

Diabetes 데이터 회귀 분석 진행하기

Diabetes 데이터셋 이용
해당 데이터의 특징과 문제 해결 유형을 정리하라.
- Linear Regression 모델과 Polynomial Regression 모델을 학습한 후 MSE로 성능을 계산한 후 비교하라.

- 해당 문제에서는 Accuracy를 사용하면 어떻게 될지 고민 할 것.

 

1. 데이터 불러오기

import pandas as pd
from sklearn.datasets import load_diabetes
diabetes = load_diabetes()

X1, y1 = diabetes.data, diabetes.target
diabetes_df = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)

diabetes_df['target'] = diabetes.target
diabetes_df.head(3)

-  scikit-learn(일명 사이킷런)에서 diabetes dataset를 불러온다.

 

2. LinearRegression 모델 생성 및 훈련

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 비교

print('LinearRegression_train_mse: ',train_mse)
print('PolynomialFeatures_train_mse: ',train_mse2)

print('LinearRegression_test_mse: ',test_mse)
print('PolynomialFeatures_test_mse: ',test_mse2)

 

 

5. 결과

 학습 데이터의 결과, 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를 사용했다면 이러한 과적합 문제를 제대로 감지하지 못했을 가능성이 크다. 

A. 금일 학습 내용

1. 타이타닉 데이터 확인하기

import pandas as pd
titaninc_df = pd.read_csv('D:/BootCamp/machine_learning/ML/titanic/train.csv')
titaninc_df.head(3)
titaninc_df.info()
titaninc_df.describe()

- 데이터 모양 확인하기

- 데이터 타입 및 결측치 등 정보 확인하기

- 타이타닉 데이터의 기술 통계 확인하기(수치형만 사용하기로 한다.)

 

2. 가설 세우기

- 정확도(Accuracy) = 맞춘 개수 / 전체 데이터

- 생존을 맞추고자 한다.

 

2-1. 첫 번째 예측

- 여성은 모두 살았을 것이고, 남성은 모두 죽었을 것이다 라고 가정한다면 아래와 같은 계산을 할 수 있다.

(233+468)/891*100

- 값: 78.67564534231201

 

2-2. 두 번째 예측

- 가설: 비상 상황 특성 상 여성을 우선 배려하여 남성보다 많이 살아남음

- 수치형 변수: Age, SibSp, Parch, Fare

- 범주형 변수: Pclass, Sex, Cabin, Embarked

 

3. x변수 설정하기

- 로지스틱 선형회귀 모델을 사용할 예정이므로 수치형 변수인 Fare 값 1개만 x값으로 설정한다.

# x변수: Fare, y변수: Survived
X_1 = titaninc_df[['Fare']]
y_true = titaninc_df[['Survived']]

sns.histplot(titaninc_df, x='Fare')
sns.scatterplot(titaninc_df, x='Fare', y='Survived')

Fare의 분포를 나타내는 히스토그램

- 500이 넘어가는 수치가 있음을 알 수 있다.

- 해당 값을 어떻게 처리할지 고민해 보아야 한다.

Fare 와 Survived 간의 산점도 그래프

 

from sklearn.linear_model import LogisticRegression
model_lor = LogisticRegression()
model_lor.fit(X_1, y_true)

 

4. 모델 분석하기

def get_att(x):
    # x모델을 넣기
    print('클래스 종류', x.classes_)
    print('독립변수 갯수', x.n_features_in_)
    print('들어간 독립변수(x)의 이름', x.feature_names_in_)
    print('가중치',x.coef_)
    print('바이어스',x.intercept_)
    
get_att(model_lor)

결과

5. 모델의 정확도, 정밀도, 재현율 평가지표 확인하기 [머신러닝 분류모델 평가]

from sklearn.metrics import accuracy_score, f1_score

def get_metrics(true, pred):
    print('정확도',accuracy_score(true,pred))
    print('f1-score',f1_score(true,pred))

- accuracy_score 은 모델의 정확도를 평가하는 지표이다.

- f1-score 은 모델의 정밀도와 재현율의 기하평균 값으로, 모델의 정밀도와 재현율을 모두 고려한 평가 지표이다.

- f1-score 점수는 최소 0, 최대 1의 값을 가지고 높을 수록 좋은 성능을 나타낸다.

 

6. 데이터 넣어 예측값 확인하기

y_pred_1 = model_lor.predict(X_1)
get_metrics(y_true, y_pred_1)

- predict 메소드는 학습한 데이터를 바탕으로 새로운 데이터가 입력되면 그에 맞는 결과를 예측한다.

 

 

model_lor.predict_proba(X_1)

 

- predict_proba 메소드는 확률을 반환한다.

- 각 클래스에 대해 [살아남을 확률, 죽을 확률] 값을 array 형식으로 나타낸다.

 

B. 마무리

- 간단한로지스틱 회귀분석에 대해 알아보았다.

- 다음은 이상치, 결측치 처리 및 범주형 데이터를 인코딩하는 등 데이터 전처리 등의 방법을 이용하는 좀 더 복잡한 머신러닝 모델을 보고자 한다.

'Today I Learned' 카테고리의 다른 글

[TIL] 군집분석(과제)  (0) 2024.08.21
[TIL] 선형회귀분석(과제)  (0) 2024.08.20
[TIL] map( ), 문자열 나누기  (0) 2024.08.14
[TIL] 단순선형회귀모형 식 구하기  (0) 2024.08.13
[TIL] 알고리즘 코드카타_행렬  (0) 2024.08.12

+ Recent posts