아키텍처(Architecture) 란?  

  1. 시스템을 만들기 위한 물리 레벨의 조합(서버의 기능, 저장소와 네트워크 기기의 조합 등)
  2. 데이터베이스 설계에서 시스템의 구성
  3. 아키텍처 통해 시스템의 용도와 목적 추측 가능 

 

● IT 아키텍처(Architecture)

:  일정 기준과 절차에 따라 조직 전체의 정보화 구성요서를 통합분석 후 그 관계를 구조적으로 정리한 체제 이를 바탕으로 정보시스템을 효율적으로 구성하기 위한 방법 

 

 

● IT 시스템 아키텍처 예시

- 아키텍처 구성을 시스템의 목적에 맞게 결정하는 과정, 서버, OS, 미들웨어, 저장소 등 폭젋은 지식 필요 

- 적정 비용으로 필요 시스템 구축하기 휘해서도 매우 중요 

 

● IT 아키텍처의 역사 

단계 특징
Stand-alone - 1980년대까지 널리 이용
- 데이터베이스만으로 시스템 운용
클라이언트 / 서버  - 1990년대 ~ 2000년
- 클라이언트와 서버로 계층 분리
- 상호 네트워크 접속
WEB 3계층  - 2000년 ~ 현재
- WEB, WAS, DBMS로 구분
- 클라이언트 / 서버 단계를 발전시킨 현재의 주료 모델 

- 최근에는 클라우드 시대를 맞이하여 기존의 틀을 뒤엎은 다양한 IT 아키텍처가 등장

- 서버가 마치 존재하지 않는 것처럼 운영되는 서비스 개념도 존재

- 다양한 클라우드 서비스 업체가 경쟁

- 클라우드를 이해하기 위해서도 기존의 전통적인 방식의 IT 아키텍처의 지식 필수 

 

1. Stand - alone 단계(DBMS 관점) 

: DBMS 서버가 네트워크 접속 없이 독립적으로 작동, 20세기 현대적 컴퓨터의 최초 등장시기 

장점 단점
- 구축 과정이 간단함(소규모 작업 및 테스트를 빨리
   처리할 수 있음)
- 높은 보안(네트워크 연결 불가)
- 물리적 떨어진 장소에서 접근 불가
- 복수 사용자가 동시에 작업 불가(1명만 이용가능)
- 낮은 가용성(Availability) - 서버가 단 1대임
- 확장성 부족 

 

 

2. 클라이언트 / 서버 단계 (DBMS 관점) 

: 네트워크 연결을 통한 복수 사용자가 동시에 사용가능, DB 서버 한대에 복수 사용자가 접속하는 구성이 주를 이룸

장점 단점
- 원격지에서도 사용가능 
- 복수의 사용자가 동시에 사용 가능 
- 인터넷 환경에서 접속시 보안이 위험
- 각자의 사용자 PC에서 애플리케이션 설치
  (수정 및 배포의 어려움 존재

 

 

3. WEB3 계층 (DBMS 관점)

: 애플리케이션을 WAS 서버에서 관리 , 시스템을 3가지 계층의 조합으로 인식하기 시작(WEB, WAS, DBMS) 

장점 단점
- 직접적인 접속 요청을 웹서버 계층에 한정하여 보안이 향상
- 애플리케이션 계층에 비즈니스 로직이 집중
  (관리의 용이성 및 비용 절감) 
- Stand - Alone 및 클라이언트 / 서버 방식에 비해 크게
  단점이 존재하지 않음. 

 

 

● 가용성과 확장성 확보 

 

가용성이란 ? 

  1. 가용성이란 서버와 네트워크, 프로그램 등의 정보 시스템이 정상적으로 사용 가능한 정도를 말한다. 
  2. 가용성을 수식으로 표현할 경우, 가용성(Availability) 이란 정상적인 사용시간(Uptime)을 전체 사용시간                (Uptime + Downtime)으로 나눈 값을 말한다. 이 값이 높을수록 "가용성이 높다" 고 표현한다. 
  3. 가용성이 높은 것은 고가용성(HA, High Availiability) 이라고 한다. 

 

 

- 가용성이 100이라면 단 한번도 장애없이 동작한 시스템이다. 

 

 

확장성이란 ? 

  1. 화가작성(Scalability)는 IT 시스템에서 대규모적인 재설계 및 재설치가 필요없이 확장이 얼마나 쉽고 가능한지에 대한 용이성을 뜻한다.
  2. DBMS 설계자는 DBMS의 확산이나 거대한 성장을 도모해야한다. 
  3. 절대적인 사용자가 수가 증가하더라도 이를 수용할 수 있도록 확장성 있게 설계해야 함을 의미한다. 
  4. 최근의 클라우드 시스템이 각광받는 이유 중 하나가 바로 탁월한 확장성에 있다. 

 

● 가용성을 높이는 전략

고품질 - 소수 저품질 - 다수
- DBMS 서버의 고품질을 추구
- 소수의 DBMS 서버를 이용
- 소수의 DBMS 서버를 높은 견고함과 신뢰성으로 무장
- DBMS 서버가 품질이 떨어지더라도 다수의 DBMS를 사용하는 전략
- 클러스터링 전략(동일 기능의 DBMS 서버를 다수로 구축

 

● 저품질 - 다수 전략의 용이성

 

- 동일 기능을 하는 DBMS 서버를 여러 대 설치 및 운영하여 병렬화 시킴

- 여러 대의 DBMS 서버가 한 개의 시스템을 위해서 존재

- 다중화/여유도 확보

- 서버를 늘릴수록 장애 발생률은 확률적으로 자연 감소함

 

● 단일 장애 점(SPOF, Single Point Of Failure) 

 

- 단일 장애 점(SPOF, Single Point Of Failure)은 시스템 구성 요소 중에서, 동작하지 않으면 전체 시스템이 중단되는 요소를 말한다. 높은 가용성을 추구하는 네트워크, 소프트웨어 애플리케이션, 사용 시스템에 단일 장야점이 있는것은 바라직하지 않다. 

- 높은 신뢰성을 요구하는 시스템은 단일 컴포넌트에 의존하지 않는 것이 좋다(ex 금융권 시스템) 

 

● 신뢰성 vs 가용성

신뢰성 (Reliability) 가용성 (Availability)
- 하드웨어나 소프트웨어가 고장 나는 빈도 밑 고장 기간
- 컴포넌트 자체의 문제 
- 사용자 입장에서 시스템을 어느 정도 사요할 수 있는가
- 시스템 전체 수준의 문제 

- 신뢰성이 낮아도 여러 대의 서버를 구축하는 클러스터링 기법을 통해 가용성 확보가 가능하다. 

 

'빅데이터 > SQLD' 카테고리의 다른 글

[SQLD] 관계형 데이터베이스란  (0) 2020.12.06
[SQLD] 데이터베이스란  (0) 2020.12.06

관계형 데이터베이스(Relational Database)란

  1. 관계형 데이터베이스(relational DataBase)는 키(Key)와 값(Value)들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산정보 데이터베이스임 보통 RDB라고 불림.
  2. 2차원 표를 이용한 데이터 목록화 관리를 하는 것이 주목적(Excel, Google 스프레드 시트)
  3. 실세계를 그대로 반영함으로 직관적인 이해가 가능(주소록, 출석부, 가계부 등)
  4. 우리는 실생활에서 사용하는 모든 정보를 관계형 데이터베이스로 관리 가능  

 

● 관계형 모델 

  • 관계형 모델(relational model)은 집합론에 기반을 둔 일종의 데이터베이스 모델임 이 모델은 에드거 커드에 의해 최초로 제안되고 체계화 되었다. 
  • 컬럼(열)과 로우(행)를 이루는 하나 이상의 테이블이 존재 하고 테이블에 데이터가 저장
  • 각각의 테이블은 각각의 로우를 식별하는 기본키(Primay Key)가 있음
  • 컬럼은 필드(Field) 혹은 속성(Attribute)라고도 불림, 로우는 레코드 혹은 튜플(Tuple)로 불림

 

 

● 관계형 데이터 베이스의 혁신성 

특징 설명
역사적 혁신성 최초로 2차원 표를 이용한 데이터베이스 소프트웨어
기능적 혁신성 직관적인 바업으로 데이터를 추출할 수 있음
 - SQL 언어를 이용한 간편한 데이터 추출
 - 데이터베이스 사요아 층의 빠른 증가에 기여
 - 개발 및 업무 생산성 확대

 

SQL 기초 

● SQL 이란? 

  1. SQL(Structured Query Language)는 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계 된 특수 목적의 프로그래밍 언어이다. 
  2. 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다. 
  3. 많은 수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택하고 있다. 

● SQL의 용도 

 

● SQL의 장점

  • 일반 프로그래밍 언어에 비해 간결
  • 모국어 말하는 것처럼 데이터 조회 및 갱신 가능 즉 간단한 영어 문장을 사용
  • 간단한 기본 조장 명령어(SELECT, INSERT, UPDATE, DELETE)

● 테이블, 행, 열 

: 관계용 데이터베이스와 SQL의 용어, SQL의 기초를 학습하는데 있어서 반드시 이해고 넘어가야합니다.

함복 설명
테이블(TABLE) 관계형 데이터베이스의 2차원 표
데이터 관리하는 유일 단위
테이블 설계는 데이터베이스 설계의 중요 부분
행(ROW)  테이블의 가로축
텍스트 파일로 치면 한 개의 라인
열(COLUMN)  테이블의 세로축 

- 행과 열이 교차하는 부분을 셀(CELL)아라고 함 

 

 

관계형 데이터베이스 기초 

관계형 데이터베이스 소프트웨어(=DBMS)

  1. 관계형 데이터베이스를 사용하기 휘해서 DBMS를 설치
  2. 대표적인 관계형데이터베이스 소프트웨어 - Oracle , MySQL, SQL Server 등 

● 데이터베이스와 DBMS의 차이 

항목 특징
데이터베이스 추상적개념
DBMS 실체적개념
기능 및 구조 실현을 위한 구체적 소프트 웨어 

Oracle은 DBMS이고 데이터베이스 자체는 아닙니다. 

 

'빅데이터 > SQLD' 카테고리의 다른 글

[SQLD] 데이터베이스 아키텍처 (1)  (0) 2020.12.07
[SQLD] 데이터베이스란  (0) 2020.12.06

데이터베이스(DataBase) 란? 

  • 데이터 베이스는 컴퓨터 시스템에 전자적으로 저장된 체계적 데이터의 모듬
  • 컴퓨터가 초기 발명된 시점에는 과학적인 연구의 용도(수학적 계산)로 사용
  • 컴퓨터 과학이 발전하면 점점 더 대용량의 데이터를 저장하고 조회하는 요구사항 증가
  • 이러한 환경에서 데이터베이스의 개념 도입 

 

● 데이터 베이스 사용 이전 

 

- 일반 텍스트 파일 사용

- 데이터베이스 발명 이전에 데이터는 텍스트 파일 형태로 저장 및 관리 

- 파일 형태는 여러 사용자가 동시에 공유하기 어려움

- 파일을 서로 주고받으면서 데이터의 유실 등의 가능성 존재 

 

 

 

● 모든 것이 데이터 베이스로 관리되는 시대

 

- 현재 모든 것이 데이터 베이스로 관리 

- 주소록, 직원관리, 매출관리, 쇼핑몰, 영화 예매, 증권, 등등

- 텍스트, 그림, 동영상, 파일 등 모든 데이터가 데이터베이스로 관리 

 

 

데이터 베이스 관리 시스템이란? 

 

데이터베이스 관리 시스템(database managements system, DBMS)은 다수의 사용자들이 데이터베이스의 데이터를 접근할 수 있도록 해주는 소프트웨어 도구의 집합. 

 

② DBMS은 사용자 또는 다른 프로그램의 요구를 처리하고 적절히 응답하여 데이터를 사용하도록 함. 

 

데이터 베이스 시스템의 특징 

특징 설명
실시간 접근석(real time accessibility) - 데이터 베이스는 실시간으로 서비스 된다. 사용자가 데이터를 요청하면 몇 시간이나 몇 일 뒤에 결과를 전송하는 것이 아니라 수 초 내에 결과를 서비스 한다. 
계속적인 변화(continuous change) - 데이터 베이스에 저장된 내용은 어느 한 순간의 상태를 나타내지만, 데이터 값은 시간에 따라 항상 바뀐다. 

- 데이터베이스는 삽입, 삭제, 수정 등의 작업을 통하여 바뀐데이터 값을 저장한다. 
동시 공유(concurrent sharing) - 데이터 베이스는 서로 다른 업무 또는 여러 사용자에게 동시에 공유된다. 

- 동시는 병행 이라고도 하며, 데이터베이스에 접근하는 프로그램이 여러 개 있다는 의미이다. 
내용에 따른 참조(reference by content)  - 데이터베이스에 저장된 데이터는 데이터의 물지적인 위치가 아니라 데이터 값에 따라 참조된다. 

 

 

● 데이터 베이스의 기본 기능 

 

데이터 삽입, 삭제, 수정, 조회 기능 

 

 

- 동시성 제어 

ex) 영화 예매 

 

한 사람이 결제를 진행하고 있는 상태라면 같은 시간, 같은 좌선은 선택할 수 없다. 

동시성 제어의 중요성 

 

① 데이터 베이스의 동시성 제어가 보장되지 않는다면 같은 좌석에 대한 결제가 동시에 진행될 수 있다.

② 만약 같은 시간, 같은 자리, 간은 영화를 예매한다면 해당 좌석은 누구의 다리도 아닌 좌석이 된다. 

③ 영화관의 대혼란을 맞이한다.

④ 데이터베이스의 동시성은 한 기업의 비즈니스 성패를 좌우할 수 있을 정도로 중요하다.  

 

 

 

- 장애 대응 기능 

: 데이터베이스는 데이터 손실이 발생한 겨웅에 복원이 가능해야한다. 즉, 데이터의 보호와 장애에 대한 방안이 있어야한다. 

 

- 보안기능

  • 데이터베이스의 보안 기능은 사용자에게 보여줄 데이터만 보여주는 것
  • 보안에 위배되는 데이터는 데이터베이스 서버 내에서 관리
  • 사용자는 데이터베이스 내부를 알 필요가 없고 자신이 원하는 정보처리만을 수행
  • 개인 정보의 유출등 매우 심각한 문제가 되므로 데이터의 보안이 중요

 

● 데이터 베이스의 종류 

종류 명  설명
계층형 데이터베이스  계층 구조로 데이터 관리, 최초의 현대적 데이터베이스
관계형 데이터베이스 2차원 표 형식으로 데이터 관리, 가장 널리 사용됨
객체 지향형 데이터베이스  아직 널리 사용되지 않음
NOSQL 데이터베이스  Not Only SQL, 최근 각곽받고 있으며, 관계형 데이터베이스 기능 일부 삭제 

 

- 데이터베이스 세계 순위 

 

'빅데이터 > SQLD' 카테고리의 다른 글

[SQLD] 데이터베이스 아키텍처 (1)  (0) 2020.12.07
[SQLD] 관계형 데이터베이스란  (0) 2020.12.06

시계열 분석(Timeseries Analysis)      

 

: 어떤 현상에 대해서 시간의 변화에 따라 일정한 간격으로 현상의 변화를 기록한 시계열 데이터를 대상으로 미래의 변화에 대한 추세를 분석하는 방법, 시간 경과에 따른 관측 값의 변화를 패턴으로 인식하여 시계열 모형을 추정하고, 이 모형을 통해서 미래의 변화에 대한 추세를 예측하는 분석방법입니다. (시계열 자료 - 시간의 흐름에 따라 관찰된 데이터)

 

- 과거로 부터 현재까지의 변화를 통해서 향후 미래를 예측 (현상 이해 -> 미래 예측)

 

 

시계열 자료 분류

 

① 정상성(stationary) 시계열 

 

: 어떤 시계열자료의 변화 패턴이 평균값을 중심으로 일정한 변동폭을 갖는 시계열

  (시간의 추이와 관계 없이 평균과 분산이 일정) 

 

- 대부분의 시계열 자료는 다루기 어려운 비정상성 시계열 자료이기 때문에 분석하기 쉬운 정상성 시계열 자료로 변환

 

평균이 일정 : 모든 시점에 대해 일정한 평균을 가진다.

- 평균이 일정하지 않은 시계열은 차분(difference)을 통해 정상화

- 차분은 현시점 자료에서 이전 시점 자료를 빼는 것

- 일반차분 : 바로 전 시점의 자료를 빼는 것

- 계절차분 : 여러 시점 전의 자료를 빼는 것, 주로 계졀성을 갖는 자료를 정상화 하는데 상용 

 

분산도 시점에 의존하지 않음

- 분산이 일정하지 않은 시계열은 변환(transformation)을 통해 정상화

 

공분산도 시차에만 의존하지 않음 

 

 

② 비정상성 (non-stationary) 시계열 

: 대부분 시계열자료

 

- 시간의 추이에 따라서 점진적으로 증가하는 추세


- 분산이 일정하지 않은 경우

 

 

 

시계열 분석 특징


① y변수 존재 : 시간 t를 설명변수(x)로 시계열(Yt)을 반응변수(y)로 사용

                  - 설명변수(=독립변수), 반응변수(=종속변수)


② 미래 추정 : 과거와 현재의 현상을 파악하고 이를 통해서 미래 추정

                 - 현상 이해 -> 미래 예측


③ 계절성 자료 : 시간 축을 기준으로 계절성이 있는 자료를 데이터 셋으로 이용

                    - 계절성의 자료가 내포  


④ 모수 검정 : 선형성, 정규성, 등분산성 가정 만족


⑤ 추론 기능 : 유의수준 판단 기준이 존재하는 추론통계 방식

추론 통계 분석 : 가설설정 -> 유의수준 임계값 정의 -> 측정도구 결정 -> 데이터 수집  -> 데이터 분석

-> 최종결과 유의수준을 기준으로 판단 검증

추론통계 방식을 사용하는 이유 : 추론 통계의 접근 방식이 모집단을 대표하는 샘플 데이터를 통해 전체를 추정


⑥ 활용분야 : 경기예측, 판매예측, 주식시장분석, 예산 및 투자 분석, 교통수요 등

 

 

 

시계열 분석 적용 범위


① 기존 사실에 대한 결과 규명 : 주별, 월별, 분기별, 년도별 분석을 통해서 고객의 구매 패턴을 분석


② 시계열자료 특성 규명 : 시계열에 영향을 주는 일반적인 요소(추세, 계절, 순환, 불규칙)를 분해해서 분석한다.(시계열 요소 분해법)


③ 가까운 미래에 대한 시나리오 규명 : 탄소배출 억제를 성공 했을 때와 실패 했을 때 지구 온난화는 얼마나 심각해질 것인가를 분석한다.


④ 변수와 변수의 관계 규명 : 경기선행지수와 종합주가지수의 관계를 분석한다.(국가 경제와 주가지수 관계)


⑤ 변수 제어 결과 규명 : 입력 변수의 제어(조작)를 통해서 미래의 예측 결과를 통제할 수 있다.(판매 촉진에 영향을 주는 변수 값을 조작할 경우 판매에 어떠한 영향을 미치는가?)

 

 

 

시계열 데이터 특성

 

① 추세 변동(Trend variation: T) 
 - 인구 변동, 지각변동, 기술변화 등 상승과 하락의 영향(장기 변동요인) , 앞으로 나아갈 방향성 

 
② 순환 변동(Cyclical variation: C)
 - 2년~10년의 주기에서 일정한 기간 없는 반복적 요소(중․장기 변동요인)

 

③ 계절 변동(Seasonal variation: S)
 - 일정한 기간(월, 요일, 분기), 1년 단위 반복적 요소(단기 변동요인)

 

④ 불규칙변동(Irregular variation: I)
 - 어떤 규칙 없이 예측 불가능한 변동요인(설명할 수 없는 요인) - white noise 
 - 실제 시계열자료에서 추세, 순환, 계절 요인을 뺀 결과(회귀분석 오차)

 

 

시계열 분석 절차

 

정상성시계열로 변환 

 

비정상 시계열 -> 정상성 시계열 : 평균 정상화 : 차분

비정상 시계열 -> 정상성 시계열 : 분산 정상화 : 로그 -> 차분

 

 

 

 

모형 생성 : 시계열 모형 생성의 대표적인 방법(현재 가장 많이 이용)

 

- 정상성을 가진 시계열 모형
자기회귀모형(AR), 이동평균모형(MA), 자기회귀이동평균모형(ARMA)

 

- 비정상성을 가진 시계열 모형(차수 적용)

자기회귀누적이동평균모형(ARIMA)

 

 

 

 

1. 시계열 자료 확인

비정상성 시계열 -> 정상성 시계열 

 

① 데이터 셋 가져오기

data("AirPassengers") # 12년(1949~1960년)간 매월 항공기 탑승 승객 수를 기록한 시계열 자료.

str(AirPassengers) 
출력값 : Time-Series [1:144] from 1949 to 1961: 112 118 132 129 121 135 148 148 136 119 ...

View(AirPassengers)

< 승객 탑승 수 >

 

② 차분(Differencing) 적용 - 현재 시점에서 이전 시점의 자료를 빼는 연산으로 평균을 정상화하는데 이용 : 평균 정상화

x11()
par(mfrow=c(1,2))
ts.plot(AirPassengers)  - 비정상성 시계열 데이터
log <- diff(log(AirPassengers)) # 로그+차분 수행 
plot(log)

ts.plot( ) : 시계열 시각화 

diff( ) : 차분 적용

             비정상성의 시계열 데이터     ->    정상성의 시계열 데이터(차분+로그) 

 

 

 

 

2. 시계열 자료 시각화 

- 단일 시계열 자료 시각화 

① WWWusage 데이터 셋 가져오기 - R에서 기본 제공 데이터 셋으로 인터넷 사용 시간을 분 단위로 측정한 100개 vector로 구성된 시계열 자료

data("WWWusage")
str(WWWusage) # Time-Series [1:100] from 1 to 100:
출력값 : Time-Series [1:100] from 1 to 100: 88 84 85 85 84 85 83 85 88 89 ...

WWWusage

 

② 시계열 자료 추세선 시각화 


- 추세 : 어떤 현상이 일정한 방향으로 나아가는 경향. 주식시장분석이나 판매예측등에서 어느 기간동안 같은 방향으로 움직이는 경향을 의미


- 추세선 : 추세를 직선이나 곡선 형태로 차트에서 나타내는 선(어느 정도 평균과 분산 확인 가능)

X11()
ts.plot(WWWusage, type="l", col="red")

- 다중 시계열 자료 시각화 

 

①  데이터 셋 가져오기

data("EuStockMarkets") # 유럽(1991~1998년)의 주요 주식의 주가지수 일일 마감 가격.

head(EuStockMarkets) # DAX(독일) SMI(스위스) CAC(프랑스) FTSE(영국)

- 출력값 -
         DAX    SMI    CAC   FTSE
[1,] 1628.75 1678.1 1772.8 2443.6
[2,] 1613.63 1688.5 1750.5 2460.2
[3,] 1606.51 1678.6 1718.0 2448.2
[4,] 1621.04 1684.1 1708.1 2470.4
[5,] 1618.16 1686.6 1723.1 2484.7
[6,] 1610.61 1671.6 1714.3 2466.8

str(EuStockMarkets) - 레코드 : 1860개 , 컬럼 4개 

- 출력값 -
Time-Series [1:1860, 1:4] from 1991 to 1999: 1629 1614 1607 1621 1618 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:4] "DAX" "SMI" "CAC" "FTSE"

 

② 데이터프레임으로 변환

EuStock <- data.frame(EuStockMarkets)

head(EuStock)

- 출력값 -
      DAX    SMI    CAC   FTSE
1 1628.75 1678.1 1772.8 2443.6
2 1613.63 1688.5 1750.5 2460.2
3 1606.51 1678.6 1718.0 2448.2
4 1621.04 1684.1 1708.1 2470.4
5 1618.16 1686.6 1723.1 2484.7
6 1610.61 1671.6 1714.3 2466.8

 

③ 단일 시계열 데이터 추세선

X11()
plot(EuStock$DAX[1:1000], type = "l", col="red") # 선 그래프 시각화 

- 1000개의 데이터를 먼저 가져와서 시각화 

 

④ 다중 시계열 데이터 추세선 

plot.ts(cbind(EuStock$DAX[1:1000], EuStock$SMI[1:1000]), main="주가지수 추세선")

 

 

 

 

3. 시계열 요소 분해 시각화

시계열 요소 분해 시각화 

 

① 시계열 자료 준비 

data <- c(45,56,45,43,69,75,58,59,66,64,62,65,
          55,49,67,55,71,78,71,65,69,43,70,75,
          56,56,65,55,82,85,75,77,77,69,79,89)

length(data) 출력값 : 36

 

② 시계열자료 생성 : 시계열 자료 형식으로 객체 생성 

tsdata <- ts(data, start = c(2016, 1), frequency = 12) #시작 : 2016년 1월, 주기: 12

tsdata # 2016~2018

- 출력값 -
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2016  45  56  45  43  69  75  58  59  66  64  62  65
2017  55  49  67  55  71  78  71  65  69  43  70  75
2018  56  56  65  55  82  85  75  77  77  69  79  89

 

③ 추세선 확인

par(mfrow=c(1,1))
ts.plot(tsdata) # plot(tsdata)와 동일함.

④ 시계열 분해- stl( ) : 계절요소, 추세, 잔차 등 모두 제공

plot(stl(tsdata, "periodic")) # periodic : 주기 

각각의 특징을 시각화 하여 출력 

 

-> 기본 

 

 

-> 계절변동 (Seasonal variation: S)

- 1년 단위의 반복되어지는 특징을 가짐 

 

 

-> 추세변동 (Trend variation: T)) 

- 증가  

 

 

-> 잔차(오차) : 관측치와 예측치 사이의 오차 

 

 

 

 

 

⑤ 시계열 분해와 변동 요인 제거

m <- decompose(tsdata) # decompose()함수 이용 시계열 분해 

attributes(m) # 변수 보기 

- 출력값 -
$names
[1] "x"        "seasonal" "trend"    "random"   "figure"   "type"    

$class
[1] "decomposed.ts

plot(m) # 추세요인, 계절요인, 불규칙 요인이 포함된 그래프.

 

 

 

-> 기본 데이터 셋 

 

 

 

-> 추세 요인 

 

 

-> 계절 요인(년단위 주기의 특징)

 

 

 

-> 불규칙(white noise) 

 

 

 

 

plot(tsdata - m$seasonal) # 계절요인을 제거한 그래프.

                             - 계절요인 제거한 추세선 

 

⑥ 추세요인과 불규칙요인 제거 

plot(tsdata - m$trend) # 추세요인 제거 그래프 

plot(tsdata - m$seasonal - m$trend) # 불규칙 요인만 출력.

 

 

 

 

4. 자기 상관 함수/ 부분 자기 상관 함수

 

자기상관함수(Auto Correlation Function)

부분자기상관함수(Partial Auto Correlation Function)

- 자기상관성 : 자기 상관계수가 유의미한가를 나타내는 특성
- 자기상관계수 : 시계열 자료에서 시차(lag)를 일정하게 주는 경우 얻어지는 상관 계수 

 

- 시계열 변수의 시간에 따른 자기 상관 관계를 나타내는 것입니다. 계열 상관, 교차자기 상관이라고도 합니다. 상관이 특정 시간에 대한 변수간의 상관관계라면, 자기상관은 시간의 변화에 따른 변수 간의 상관관계 변화가 주 관심사입니다.

 

어떤 시계열 데이터가 일정한 패턴을 본인다면, 자기 상관이 있따는 것을 뜻합니다. 시간에 따라 변수의 값이 자기상관성을 가지고 변화하므로, 무작위가 아닌 일정한 패턴을 보여준다고 할 수 있습니다. 

 

- 자기 상관을 어떻게 활용할 수 있을까요? 바로 데이터의 무작위성을 파악할 수 있습니다.

자기상관 데이터가 ( - )에 가까울 수록, 무작위성이 있는 시계열 데이터로 판단할 수 있습니다. 0보다 큰값을 가질수록 자기상관을 강하게 가진다고 할 수 있습니다.

 

① 시계열자료 생성 

input <- c(3180,3000,3200,3100,3300,3200,3400,3550,3200,3400,3300,3700)
length(input) 출력값 : 12

tsdata <- ts(input, start = c(2015, 2), frequency = 12) # Time Series
tsdata

- 출력값 -
      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
2015      3180 3000 3200 3100 3300 3200 3400 3550 3200 3400 3300
2016 3700           

 

② 자기상관함수 시각화 

acf(na.omit(tsdata), main="자기상관함수", col="red")

 

 

 

 

 

- 첫번째의 값은 자기 자신과의 관계이므로 1이 나올 수 밖에 없다. 

 

- 파란선(임계치) 안에 들어오면 자기상관계에 의해서 데이터셋 자체는 자기 상관성과 관련해서 자기상관성이 없음을 보여준다. 

 

- 일정주기로 체크해봤을 때, 자기상관성이 없다.

 

 

 

 

 

 

③ 부분자기상관함수 시각화 

pacf(na.omit(tsdata), main="부분자기상관함수", col="red")

 

 

파란색 안에 들어오면 자기상관성이 없음. 

 

시계열 데이터 시간의 의존성 여부가 무작위성을 띄느냐 띄지 않느냐를 자기상관함수로 판단할 수 있다. 

 

무작위성을 띈다는 것은 random을 의미하고, 무작위성이 있다는 것을 이야기하고, 파란선(임계치)를 넘어가는 것을 의미한다. 

 

 

 

 

 

 

 

 

 

 

 

5. 추세 패턴 찾기 시각화 

추세패턴

:시계열 자료가 증가 또는 감소하는 경향이 있는지 알아보고, 증가나 감소의 경향이 선형인지 비선형인지를 찾는 과정

 

- 시계열 자료의 추세 패턴 찾기 시각화

 

① 시계열 자료 생성

input <- c(3180,3000,3200,3100,3300,3200,3400,3550,3200,3400,3300,3700)

# Time Series
tsdata <- ts(input, start = c(2015, 2), frequency = 12)

 

② 추세선 시각 

plot(tsdata, type="l", col="red")

③ 자기상관 함수 시각화 

acf(na.omit(tsdata), main="자기상관함수", col="red")

④ 차분 시각화 

plot(diff(tsdata, differences=1))

 

 

 

 

6. 평활법(Smoothing Method)  

: 수학/통계적 방법의 분석이 아닌 시각화를 통한 직관적 방법의 데이터 분석 방법

 

- 해석에 있어서 차이점이 발생할 수 있고, 주관적인 개입이 발생할 수 있다. 

- 단기 예측용으로, 1개(일변량) 

- 시계열 자료의 체계적인 자료의 흐름을 파악하기 위해서 과거 자료의 불규칙적인 변동을 제거하는 방법

  (불규칙성의 배제) 


- 이동 평균(Moving Average - ma) : 시계열 자료를 대상으로 일정한 기간의 자료를 평균으로 계산하고, 이동 시킨

  추세를 파악하여 추세를 예측하는 분석 기법 

 

- 지수 평활법 : 전체 데이터를 평균을 계산하고, 전체 평균에 가장 최근의 값을 기준으로 일정 가정치를 부여해 가면서    추적해가는 분석 기법 (최근 데이터의 비중이 높음) 

 

이동 평균 vs 지수 평활법 

 

- 모든 관측치에 동일한 가중치를 부여하여 이동평균법은 최근 관측치나 오래된 관측치나 동일한 가중치를 사용하므로    정보를 동리하게 이용하는 단점이 잇고 과거 추세 패턴을 인지함

- 최근 관측치에 가중치, 멀어질수록 지수적으로 가중치 값 감소시키는 방법인 미래 예측에 사용. 

 

① 시계열  자료 생성 

data <- c(45,56,45,43,69,75,58,59,66,64,62,65,
          55,49,67,55,71,78,71,65,69,43,70,75,
          56,56,65,55,82,85,75,77,77,69,79,89)
length(data) 출력값 : 36

tsdata <- ts(data, start = c(2016, 1), frequency = 12)

tsdata

- 출력값 - 
      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2016  45  56  45  43  69  75  58  59  66  64  62  65
2017  55  49  67  55  71  78  71  65  69  43  70  75
2018  56  56  65  55  82  85  75  77  77  69  79  89

 

② 평활 관련 패키지 설치 

install.packages("TTR")
library(TTR)

 

③ 이동평균법으로 평활 및 시각화 

plot(tsdata, main="원 시계열 자료") # 시계열 자료 시각화 
plot(SMA(tsdata, n=1), main="1년 단위 이동평균법으로 평활")
plot(SMA(tsdata, n=2), main="2년 단위 이동평균법으로 평활")
plot(SMA(tsdata, n=3), main="3년 단위 이동평균법으로 평활")

- 1년 단위 : 거의 그대로 유지 

- 2년 단위 : 급격한 변화들이 완만한 형태의 추세선으로 변화

- 3년 단위 : 확연히 차이가 나도록 완만한 형태의 추세선으로 변화 

  (불규칙성의 배제로 인한 완만하게 평균적 의미로 파악) 

 

 

 

 

7. ARIMA(Auto-regressive Integrated  Moving Average) 모형 시계열 예측

 

: ARIMA 모델은 시계열 분석 기법의 한 종류로, 과거의 관측값과 오차를 사용해서 현재의 시계열 값을 설명하는 ARMA 모델을 일반화 한 것입니다.  이는 ARMA 모델이 안정적 시계열(Stationary Series)에만 적용 가능한 것에 비해, 분석 대상이 약간은 비안정적 시계열(Non Stationary Series)의 특징을 보여도 적용이 가능하다는 의미입니다.

 

- 자기회귀누적이동평균모형(ARIMA)
- 형식) ARIMA(p, d, q) : 3개의 인수
- p : AR모형 차수, d : 차분 차수, q : MA모형 차수

[ARIMA(p,d,q) 모형 → 정상성 시계열 모형 식별] 
d=0이면, ARMA(p, q)모형이며, 정상성을 만족한다. 
q=0이면 IAR(p, d)모형이며, d번 차분하면 AR(p) 모형을 따른다. 
p=0이면 IMA(d, q)모형이며, d번 차분하면 MA(q) 모형을 따른다.

 

 정상성시계열의 비계절형 

 

① 시계열자료 특성분석

데이터 준비 
input <- c(3180,3000,3200,3100,3300,3200,3400,3550,3200,3400,3300,3700)


시계열 객체 생성(12개월:2015년 2월 ~ 2016년 1월)
tsdata <- ts(input, start = c(2015, 2), frequency = 12)
tsdata

- 출력값 -
      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
2015      3180 3000 3200 3100 3300 3200 3400 3550 3200 3400 3300
2016 3700                      


추세선 시각화(정상성시계열 vs 비정상성시계열) 
plot(tsdata, type="l", col='red')

② 정상성시계열 변환 

par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata)
plot(diff)

③ 모형 식별과 추정 

install.packages('forecast')
library(forecast)

arima <- auto.arima(tsdata) # 시계열 데이터 이용.
arima

auto.arima( ) : 통계학에서 정의하는 모형을 제공(모형에 대한 식별)  - 모형과 차수 제공

 

형식) ARIMA(p, d, q) : 3개의 인수 
p : AR모형 차수, d : 차분 차수, q : MA모형 차수

 

[ARIMA(p,d,q) 모형 → 정상성 시계열 모형 식별]
d=0이면, ARMA(p, q)모형이며, 정상성을 만족한다.
q=0이면 IAR(p, d)모형이며, d번 차분하면 AR(p) 모형을 따른다.
p=0이면 IMA(d, q)모형이며, d번 차분하면 MA(q) 모형을 따른다.

 

= ARIMA(1,1,0) - IAR(p, d)모형, d번 차분하면 AR(p) 모형을 따른다.

(*차분을 한번만 한다고 균일한 값을 찾아가는 것이 아니다)

 

결론 : 1번 차분한 결과가 정상성시계열의 AR(1) 모형으로 식별된 AIC(Akaike’s Information Criterion)/BIC(Bayesian Information Criterion) : 이론적 예측력을 나타내는 지표 

(값이 적은 모형 채택)

 

 

예측을 위한 모형 생성 

- 이전 단계에서 식별된 모형과 파라미터를 이용하여 시계열 모형 생성

model <- arima(tsdata, order=c(1,1,0))
model

 

⑤ 모형 진단(모형 타당성 검정)

잔차가 백색 잡음(white noise) 검정(모형의 잔차가 불규칙적이고, 독립적)

 

- 1)  자기상관함수에 의한 모형 진단

tsdiag(model)

 

 

 

 

 

 

-> 자기상관함수 

모두 파란선(임계치) 안에 들어있음 

= 자기 상관관계가 없음

= 규칙성이 없음 = 불규칙성

= p value값이 0 이상로 분포

(ARIMA모형은 매우 양호한 시계열 모형)

= 모델 적합 

 

 

 

 

 

- 2) Box-Ljung에 의한 잔차항 모형 진단(잔차 값을 통한 모형)

Box.test(model$residuals, lag = 1, type = "Ljung")

Box-Ljung 검정방법은 모형의 잔차를 이용하여 카이제곱검정 방법으로 시계열 모형이 통계적으로 적절한지를 검정하는 방법으로 p-value가 0.05 이상이면 모형이 통계적으로 적절하다고 볼 수 있습니다. 

 

p-value = 0.7252 > 0.05 모델 적합 (모형이 통계적으로 적절)

 

 

⑥ 미래 예측(업무 적용)

- 모형 진단을 통해서 적절한 모형으로 판단되면 이 모형으로 가까운 미래를 예측하는데 이용

- forecast 패키지에서 제공하는 forecast() 함수는 시계열의 예측치를 제공하는 함수로 기본 기간은 2년(24개월)

fore <- forecast(model) # 향후 2년 예측 
fore

par(mfrow=c(1,2))
plot(fore) # 향후 24개월 예측치 시각화 

model2 <- forecast(model, h = 6) # 향후 6개월 예측치 시각화 
plot(model2)

 

 

 

 

8. 정상성 시계열의 계절형

 

① 시계열자료 특성분석

 

1) 시계열자료 생성 

Aripassengers -  # 12년(1949~1960년)간 매월 항공기 탑승 승객 수를 기록한 시계열 자료.

tsdata <- AirPassengers

tsdata

- 측정값 - 

     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1949 112 118 132 129 121 135 148 148 136 119 104 118
1950 115 126 141 135 125 149 170 170 158 133 114 140
1951 145 150 178 163 172 178 199 199 184 162 146 166
1952 171 180 193 181 183 218 230 242 209 191 172 194
1953 196 196 236 235 229 243 264 272 237 211 180 201
1954 204 188 235 227 234 264 302 293 259 229 203 229
1955 242 233 267 269 270 315 364 347 312 274 237 278
1956 284 277 317 313 318 374 413 405 355 306 271 306
1957 315 301 356 348 355 422 465 467 404 347 305 336
1958 340 318 362 348 363 435 491 505 404 359 310 337
1959 360 342 406 396 420 472 548 559 463 407 362 405
1960 417 391 419 461 472 535 622 606 508 461 390 432

 

2) 시계열요소분해 시각화

ts_feature <- stl(tsdata, s.window="periodic")

plot(ts_feature)

 

 

 

 

 

 

-> 계절 요인 

 

 

 

-> 추세 요인 

 

 

-> 잔차 

 

 

 

 

 

 

② 정상성 시계열 변환

par(mfrow=c(1,2))
ts.plot(tsdata)
diff <- diff(tsdata) # 평균값으로 정상화 
plot(diff) # 차분 시각화

 

③ 모형 식별과 추정

library(forecast)
ts_model2 <- auto.arima(tsdata)  
ts_model2 # ARIMA(2,1,1)(0,1,0)[12]

[ARIMA(p,d,q) 모형 → 정상성 시계열 모형 식별]
d=0이면, ARMA(p, q)모형이며, 정상성을 만족한다.
q=0이면 IAR(p, d)모형이며, d번 차분하면 AR(p) 모형을 따른다.
p=0이면 IMA(d, q)모형이며, d번 차분하면 MA(q) 모형을 따른다.

 

④ 모형 생성

model <- arima(tsdata, c(2,1,1), seasonal = list(order = c(0,1,0)))
model

 

⑤ 모형 진단(모형 타당성 검정)

 

1) 자기상관함수에 의한 모형 진단

tsdiag(model)

 

 

 

 

 

 

 

 

-> 자기상관함수

모두 파란선(임계치) 안에 들어있음 

= 자기 상관관계가 없음

= 규칙성이 없음 = 불규칙성

= p value값이 0 이상로 분포

(ARIMA모형은 매우 양호한 시계열 모형)

= 모델 적합 

 

 

 

 

 

 

 

2) Box-Ljung에 의한 잔차항 모형 진단

 

Box-Ljung 검정방법은 모형의 잔차를 이용하여 카이제곱검정 방법으로 시계열 모형이 통계적으로 적절한지를 검정하는 방법으로 p-value가 0.05 이상이면 모형이 통계적으로 적절하다고 볼 수 있습니다.

 

p-value = 0.9879 > 0.05 모델 적합 (모형이 통계적으로 적절)

 

 

⑥ 미래 예측

- 모형 진단을 통해서 적절한 모형으로 판단되면 이 모형으로 가까운 미래를 예측하는데 이용

- forecast 패키지에서 제공하는 forecast() 함수는 시계열의 예측치를 제공하는 함수로 기본 기간은 2년(24개월)

par(mfrow=c(1,2))
fore <- forecast(model, h=24) # 2년 예측 
plot(fore)
fore2 <- forecast(model, h=6) # 6개월 예측 
plot(fore2)

연관분석 (Association Analysis)

 

: 연관분석은 군집분석에 의해서 그룹핑된 cluster를 대상으로 해당 그룹에 대한 특성을 분석하는 방법으로 장바구니 분석이라고 합니다. 즉, 유사한 개체들을 클러스터로 그룹화하여 각 집단의 특성 파악합니다. 예를 들어, 제가 마트에서 ’씨리얼’ 이라는 제품을 샀으면 그와 함께 먹을 우유도 같이 구매할 확률이 높을 것입니다. 이렇게 A라는 제품을 구매하였을 때, B라는 제품도 함께 구매하는 규칙의 패턴을 구하고자 하는 것이 연관규칙 분석의 목적입니다. 유튜브, 넷플릭스 등의 플랫폼들은 모두 이러한 알고리즘들을 기반으로 컨텐츠들을 추천해주고 있습니다.

 

 

연구 분석의 기본 개념

 

지지도(support)

: 전체 데이터에서 관광지 X, Y에 대한 방문을 모두 포함하는 비율 (2개 이상 컬럼) 

 

 - X -> Y 지지도 식 = X, Y 동시에 방문한 관광객 수 / 전체 관광객 수 

                          =  n(A, B) : 두 항목(X, Y)이 동시에 포함 수  / n : 전체 수


신뢰도(confidence) 

: 관광지 X를 방문하였을 때, Y를 같이 방문할 조건부 확률

 

 - X -> Y 신뢰도 식 = X,Y 동시에 방문한 관광객 수 / X 방문 관광객 수

                          = X와 Y를 포함한 수 / X를 포함한 수

 - 값이 클수록 X를 방문하였을 때, Y를 같이 방문하는 비율이 높음 ( X를 방문하였을 때, Y를 방문할 비율 )

 

향상도(Life)

: 관광지 X를 방문하였을 때, Y를 같이 방문하는 경우와 관광지 X의 방문여부에 상관없이 Y를 방문한 경우의 비율 ( 관광지 간의 독립성과 상관성을 나타내는 척도 )

 

 - 하위 항목들이 독립에서 얼마나 벗어나는지의 정도를 측정한 값 

 - 향상도 식 =  X,Y 를 동시에 방문한 관광객 비율 / (X를 방문한 관광객 비율 * Y를 방문한 관광객 비율)

                 = 신뢰도 / Y가 포함될 거래율 

 -  향상도가 1에 가까우면 : 두 상품이 독립
 -  1보다 작으면 : 두 상품이 음의 상관성(감기약과 위장약) - 공통점을 가지지만 다른 기능 
 -  1보다 크면 : 두 상품이 양의 상관성

 -  분자와 분모가 동일한 경우 : Lift == 1, X와 Y가 독립(상관없음)
 -  분자와 분모가 동일한 경우 : Lift != 1, X와 Y가 독립이 아닌 경우(상관있음)

 
- 규칙 생성에서 support 값을 높게 설정할 수록 적은 수의 규칙만이 생성이 됩니다.(즉, 발생빈도가 높은 규칙들만 생성이 된다는 의미입니다.)

- confidence  수치가 높으면 관광지 X를 방문하면 Y를 방문할 확률이 높아지는 것과 같습니다.

= confidence 확률식 

 

 

연관분석 추가 설명 

 

 - 데이터베이스에서 사건의 연관규칙을 찾는 무방향성 데이터마이닝 기법        

 

 - 마케팅에서 고객의 장바구니에 들어있는 품목 간의 관계 탐구

 

 - 어떤 사건이 얼마나 자주 동시에 발생하는가를 표현하는 규칙 또는 조건

 

 - y변수가 없는 비지도 학습에 의한 패턴 분석

     무방향성(x -> y변수 없음)

 

 - 사건과 사건 간 연관성(관계)를 찾는 방법 (예 : 기저귀와 맥주)
    예) 장바구니 분석 : 장바구니 정보를 트랜잭션이라고 하며, 트랜잭션 내의 연관성을 살펴보는 분석기법

 

 - 분석절차 : 거래내역 -> 품목 관찰 -> 규칙(Rule) 발견

 

 - 관련분야 : 대형 마트, 백화점, 쇼핑몰 판매자 -> 고객 대상 상품추천 

    1. 고객들은 어떤 상품들을 동시에 구매하는가?
    2. 라면을 구매한 고객은 주로 다른 어떤 상품을 구매하는가?


 - 활용방안 : 위와 같은 질문에 대한 분석을 토대로 고객들에게
    1) 상품정보 발송
    2) 텔레마케팅를 통해서 패키지 상품 판매 기획,
    3) 마트의 상품진열

 

 

1. 연관규칙 평가 척도

 

실습)  트랜잭션 객체를 대상으로 연관규칙 생성 

 

① 연관분석을 위한 패키지 설치 

install.packages("arules")
library(arules) #read.transactions()함수 제공

 

 

② 트랜잭션(transaction) 객체 생성

tran<- read.transactions("tran.txt", format="basket", sep=",") # 트랜잭션 객체 생성.
tran # 6개의 트랜잭션과 5개의 항목(상품) 생성

- 출력값 -
transactions in sparse format with
 6 transactions (rows) and
 5 items (columns)

read.transactions : 트랜잭션의 형태로 변형 - 필수 

 

 

③ 트랜잭션 데이터 보기 

inspect(tran) 

- 출력값 -
     items           
[1] {라면,맥주,우유}
[2] {고기,라면,우유}
[3] {고기,과일,라면}
[4] {고기,맥주,우유}
[5] {고기,라면,우유}
[6] {과일,우유}  

insect : 트랜잭션을 배열의 형태로 출력

 

 

④ 규칙(rule) 발견 - apriori 

rule<- apriori(tran, parameter = list(supp=0.3, conf=0.1)) # 16 rule
inspect(rule) # 규칙 보기

- supp, conf 가 높을수록 규칙성은 적어질 것이고, 낮을수록 규칙성은 많아질 것 입니다. 

맥주 -> 우유 vs 우유 -> 맥주 : 지지도는 같지만 신뢰도는 조건부 확률이므로 다르게 나타납니다. 

 

rule<- apriori(tran, parameter = list(supp=0.1, conf=0.1)) # 35 rule
inspect(rule) # 규칙 보기

 

2. 트랜잭션 객체 생성 

실습)  single 트랜잭션 객체 생성 

stran <- read.transactions("demo_single",format="single",cols=c(1,2)) 

inspect(stran)

- 출력값 -
    items         transactionID
[1] {item1}       trans1       
[2] {item1,item2} trans2       
 

single : 트랜잭션 구분자(Transaction ID)에 의해서 상품(item)이 대응된 경우

basket : 여러 개의 상품(item)으로 구성된 경우(Transaction ID 없이 여러 상품으로만 구성된 경우)
cols : single인 경우 읽을 컬럼 수 지정(basket은 생략)

 

- demo_single

 

실습) 중복 트랜잭션 제거

 

① 트랜잭션 데이터 가져오기

stran2<- read.transactions("single_format.csv", format="single", sep=",", 
                            cols=c(1,2), rm.duplicates=T) 

sep : 각 상품(item)을 구분하는 구분자 지정.
rm.duplicates=T : 중복되는 트랜잭션은 제외하고 출력.

 

② 트랜잭션과 상품 수 확인

stran2

- 출력값 -
transactions in sparse format with
 248 transactions (rows) and
 68 items (columns)

 

 

③ 요약 통계 제공

summary(stran2) # 248개 트랜잭션에 대한 기술통계 제공
inspect(stran2) # 트랜잭션 확인 

 

- inspect(stran2) 

 

 

실습) 규칙 발견(생성)

 

① 규칙 생성하기 

astran2 <- apriori(stran2) # supp=0.1, conf=0.8와 동일함 
astran2 <- apriori(stran2, parameter = list(supp=0.1, conf=0.8)) # 위의 코드와 동일

astran2 출력값 : set of 102 rules

attributes(astran2)

.

.

.

 

②  상위 6개 향상도 내림차순으로 정렬하여 출력 

inspect(head(sort(astran2, by="lift"))) # sort : 정렬 

 

실습) basket 트랜잭션 객체 생성

btran <- read.transactions("demo_basket",format="basket",sep=",")

inspect(btran) # 트랜잭션 데이터 보기

- 출력값 - 
     items        
[1] {item1,item2}
[2] {item1}      
[3] {item2,item3}

트랜잭션 구분자(Transaction ID) 없이 상품으로만 구성된 데이터 셋을 대상으로 트랜잭션 객체를 생성할 경우 format="basket" 속성 지정

 

- demo_basket

 3. 연관규칙 시각화

 

Adult 데이터 셋 

더보기

Adult 데이터 셋
arules 패키지에서 제공되는 Adult는 성인을 대상으로 인구소득에 관한 설문 조사 데이터를 포함하고 있는 AdultUCI 데이터셋을 트랜잭션 객체로 변환하여 준비된 데이터 셋이다. AdultUCI 데이터 셋은 전체 48,842개의 관측치와 15개 변수로 구성된 데이터 프레임이다.
Adult 데이터셋은 종속 변수(Class)에 의해서 년간 개인 수입이 $5만 이상인지를 예측하는 데이터 셋으로 transactions 데이터로 읽어 온 경우 48,842개의 transaction 과 115 개의 item 으로 구성된다.

위의 데이터 셋을 활용하여 살펴보도록 하겠습니다. 

 

 

실습) 다양한 신뢰도와 지지도 적용  

지지도를 20%로 높인 경우 1,306개 규칙 발견
ar1<- apriori(Adult, parameter = list(supp=0.2))  

지지도 20%, 신뢰도 95% 높인 경우 348개 규칙 발견
ar2<- apriori(Adult, parameter = list(supp=0.2, conf=0.95)) # 신뢰도 높임

지지도 30%, 신뢰도 95% 높인 경우 124개 규칙 발견
ar3<- apriori(Adult, parameter = list(supp=0.3, conf=0.95)) # 신뢰도 높임

지지도 35%, 신뢰도 95% 높인 경우 67 규칙 발견
ar4<- apriori(Adult, parameter = list(supp=0.35, conf=0.95)) # 신뢰도 높임

지지도 40%, 신뢰도 95% 높인 경우 36 규칙 발견
ar5<- apriori(Adult, parameter = list(supp=0.4, conf=0.95)) # 신뢰도 높임

 

 

실습) 규칙 결과보기

 

① 상위 6개 규칙 보기

inspect(head(ar5)) 

 

② confidence(신뢰도) 기준 내림차순 정렬 상위 6개 출력

inspect(head(sort(ar5, decreasing=T, by="confidence")))

 

③ lift(향상도) 기준 내림차순 정렬 상위 6개 출력

inspect(head(sort(ar5, by="lift"))) 

 

 

실습) 연관규칙 시각화

 

① 패키지 설치 

install.packages("arulesViz") 
library(arulesViz) 

 

② 연관규칙 시각화

plot(ar3, method='graph', control=list(type='items'))

 

 

실습) Groceries 데이터 셋으로 연관분석하기

 

Groceries 데이터 셋 

더보기

Groceries 데이터 셋
arules 패키지에서 제공되는 Groceries 데이터 셋은 1개월 동안 실제 로컬 식료품 매장에서 판매되는 트랜잭션 데이터를 포함하고 있다. 전체 9,835개의 트랜잭션(transaction)과 항목(item) 169 범주를 포함하고 있다.

위의 데이터를 활용하여 살펴보도록 하겠습니다.

 

 

① data.frame으로 형 변환

Groceries.df<- as(Groceries, "data.frame")
head(Groceries.df)

- 출력값 -
                                                                  items
1              {citrus fruit,semi-finished bread,margarine,ready soups}
2                                        {tropical fruit,yogurt,coffee}
3                                                          {whole milk}
4                         {pip fruit,yogurt,cream cheese ,meat spreads}
5 {other vegetables,whole milk,condensed milk,long life bakery product}
6                      {whole milk,butter,yogurt,rice,abrasive cleaner}

 

② 지지도 0.001, 신뢰도 0.8 적용 규칙 발견(410 rule(s))

rules <- apriori(Groceries, parameter=list(supp=0.001, conf=0.8))
inspect(rules) -> 410개 

 

③ 규칙을 구성하는 왼쪽(LHS) -> 오른쪽(RHS)의 item 빈도수 보기 

library(arulesViz)
plot(rules, method="grouped")

 

비지도 학습(Unsupervised Learning) 

: 사람 없이 컴퓨터가 스스로 레이블 되어 있지 않은 데이터에 대해 학습하는 것으로 y없이 x만 이용해서 학습하는 것 입니다. 정답이 없는 문제를 푸는 것이므로 학습이 맞게 됐는지 확인할 길은 없지만, 인터넷에 있는 거의 모든 데이터가 레이블이 없는 형태로 있으므로 앞으로 기계학습이 나아갈 방향으로 설정되어 있습니다. 통계학의 군집화와 분포 추정 등의 분야와 밀접한 관련이 있습니다.

 

– 컴퓨터 기계학습에 의한 분석 방법 
– 종속변수(y) 없음 : 입력 데이터에 정답 없음 
– 분석방법 : 규칙(패턴분석) → 공학.자연과학 계열(100년) 
– 분석유형 : 연관분석, 군집분석 → 데이터마이닝 기반

 

 

군집화(Clustering)  -  군집분석(Clustering Analysis) : 그룹화를 통한 예측(그룹 특성 차이 분석-고객집단 이해)

: 데이터가 쭉 뿌려져 있을 때 레이블이 없다고 해도 데이터간 거리에 따라 대충 두 세개의 군집으로 이렇게 x만 가지고 군집을 학습하는 것을 군집화 라고 합니다. 

 

 

군집 분석

– 종속변수(y변수)가 없는 데이터 마이닝 기법
– 유클리드 거리 기반 유사 객체 묶음
– 고객 DB -> 알고리즘 적용 -> 패턴 추출(rule) -> 근거리 모형으로 군집형성
– 계층적 군집분석(탐색적), 비계층적 군집분석(확인적)
– 주요 알고리즘 : k-means, hierarchical

 

 

군집분석 특징


– 전체적인 데이터 구조를 파악하는데 이용
관측대상 간 유사성을 기초로 비슷한 것 끼리 그룹화(Clustering)
– 유사성 = 유클리드 거리

 

유크리드 거리

: 유클리디안 거리(Euclidean distance)는 두 점 사이의 거리를 계산하는 방법으로, 이 거리를 이용하여 유클리드 공간을 정의

 

유클리드 거리 계산식

관측대상 p와 q의 대응하는 변량값의 차가 작으면, 두 관측대상은 유사하다고 정의하는 식


– 분석결과에 대한 가설 검정 없음(타당성 검증 방법 없음)
– 분야 : 사회과학, 자연과학, 공학 분야
– 척도 : 등간, 비율척도(연속적인 양)

 

 

군집 구성법


– 그룹간의 유사성 계산 방법
– 최단거리법, 최장거리법, 메디안법, 중심법, 그룹평균법

 


군집화방법


– 계층 군집화 : 가장 가까운 대상끼리 순차적으로 묶음
– 비계층 군집화 : k-평균 군집법

 

 

 

 

1. 유클리디안 거리

 

실습) 유클리디안 거리 계산법

 

 

① matrix 객체 생성

x <- matrix(1:9, nrow=3, byrow = T)  # nrow=3 : 3행으로 만듬, byrow = T : 열 중심 -> 행 중심
x

- 출력값 -
      [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

 

 

② 유클리디안 거리 생성

dist <- dist(x, method="euclidean") # method 생략가능 / euclidean : 유클리디안 거리 생성 
dist

- 출력값 - 
          1         2
2  5.196152          
3 10.392305  5.196152

       
5.196152 : 전체 루트 (2행 - 1행 = x^2 + 2행 - 1행 = x^2 + 2행 - 1행 = x^2) 
10.392305 : 전체 루트 (3행 - 1행 = x^2 + 3행 - 1행 = x^2 + 3행 - 1행 = x^2)
5.196152 : 전체 루트 (3행 - 2행 = x^2 + 3행 - 2행 = x^2 + 3행 - 2행 = x^2)

 

 

③ 유클리드 거리 계산식의 R코드

# 1행과 2행 변량의 유클리드 거리 구하기
sqrt(sum((x[1,] - x[2, ])^2))  출력값 :  5.196152
# 1행과 3행 변량의 유클리드 거리 구하기
sqrt(sum((x[1,] - x[3, ])^2)) 출력값 :  10.3923

 

2. 계층적 군집분석(탐색적 분석)

 

실습) 유클리디안 거리를 이용한 군집화

 

 

① 군집분석(Clustering)분석을 위한 패키지 설치

install.packages("cluster") 
library(cluster) 

 

 

② 데이터 셋 생성

x <- matrix(1:9, nrow=3, by=T) 
x

- 출력값 -
      [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

 

 

③ matrix 대상 유클리드 거리 생성 함수

dist <- dist(x, method="euclidean") # method 생략가능
dist

- 출력값 - 
    1         2
2  5.196152          
3 10.392305  5.196152

 

 

④ 유클리드 거리 matrix를 이용한 클러스터링

hc <- hclust(dist) # 클러스터링 적용
hc

 

 

⑤ 클러스터 시각화 

x11()
plot(hc) # 1과2 군집(클러스터) 형성

- 1 과 2 는 같은 레벨임을 보여주고, 3번은 값의 차이가 월등히 높음을 보여줍니다. 

- 1 과 2 유사성을 가진 가까운 것 먼저 그룹핑을 해줍니다. 

 

 

 

실습)  신입사원 면접시험 결과 군집분석

 

 

① 데이터 셋 가져오기

interview <- read.csv("interview.csv", header=TRUE)

names(interview)

- 출력값 - 
[1] "no"       "가치관"   "전문지식" "발표력"   "인성"     "창의력"   "자격증"   "종합점수"
[9] "합격여부"

View(interview)

 

 

② 유클리디안 거리 계산 

interview_df <- interview[c(2:7)]  # 2~7 열까지만 선택(가치관~자격증 점수)

idist<- dist(interview_df) # no, 종합점수, 합격여부 제거 

head(idist) 출력값 : [1]  3.464102 11.445523  2.449490 15.524175  3.741657 14.142136

 

 

③ 계층적 군집분석

hc <- hclust(idist)
hc

15개의 object 유클리드 거리법으로 출력

 

 

④ 군집분석 시각화

x11()
plot(hc, hang=-1) # 덴드로그램에서 음수값을 제거할 수 있음.

 거리의 계산을 통해서 크기의 값을 시각화해서 보여주는데 15개를 어떻게 군집화 할 수 있을지 보여주고 있습니다.

 

 

⑤ 군집 단위 테두리 생성

rect.hclust(hc, k=3, border="red") # 3개 그룹 선정, 선 색 지정

위의 결과를 통해서 예상했던 결과가 추가적인 코드를 통해서 출력되었습니다. 

 

 

 

실습) 군집별 특징 보기 

 

① 각 그룹별 서브셋 만들기

g1<- subset(interview, no==108| no==110| no==107| no==112 | no==115)
g2<- subset(interview, no==102| no==101| no==104| no==106 | no==113)
g3<- subset(interview, no==105| no==114| no==109| no==103 | no==111)

 

② 그룹 요약통계량  - 공통점 : 자격증 

summary(g1) # 불합격:5, 자격증 없음

summary(g2) # 합격:5, 자격증 있음

ummary(g3) # 불합격:5, 자격증 없음+있음.

table(g3$자격증)

- 출력값 -
 0 1 
 3 2 
 

- 자격증을 가지고 있어도 불합격 하는 사람들이 존재합니다.

 

 

3. 군집 수 자르기

 

실습) iris 데이터 셋을 대상으로 군집 수 자르기 

 

 

iris 데이터 셋 

더보기

iris 데이터 셋 
R에서 제공되는 기본 데이터 셋으로 3가지 꽃의 종류별로 50개씩 전체 150개의 관측치로 구성된다. iris는 붓꽃에 관한 데이터를 5개의 변수로 제공하며, 각 변수의 내용은 다음과 같다.

Sepal.Length(꽃받침 길이)

Sepal.Width(꽃받침 너비)

Petal.Length(꽃잎 길이)

Petal.Width(꽃잎 너비)

Species(꽃의 종류) : 3가지 종류별 50개 (전체 150개 관측치)

 

 

① 유클리드안 거리 계산 

idist<- dist(iris[1:4]) # dist(iris[, -5])

# 계층형 군집분석(클러스터링)
hc <- hclust(idist)
hc
plot(hc, hang=-1)

rect.hclust(hc, k=4, border="red") # 4개 그룹수 

 

 

 

② 군집 수 자르기

ghc<- cutree(hc, k=3) # stats 패키지 제공 - 3개로 그룹핑
ghc #  150개(그룹을 의미하는 숫자(1~3) 출력)

 

 

③ iris에서 ghc 컬럼 추가

iris$ghc <- ghc

head(iris)

- 출력값 - 
Sepal.Length Sepal.Width Petal.Length Petal.Width Species ghc
1          5.1         3.5          1.4         0.2  setosa   1
2          4.9         3.0          1.4         0.2  setosa   1
3          4.7         3.2          1.3         0.2  setosa   1
4          4.6         3.1          1.5         0.2  setosa   1
5          5.0         3.6          1.4         0.2  setosa   1
6          5.4         3.9          1.7         0.4  setosa   1

table(iris$ghc) # ghc 빈도수

- 출력값 - 
1  2  3 
50 72 28 

versicolor 와 virginica 의 돤벽하게 구분이 되지 않습니다. ( 공통 되어지는 부분 존재 ) 

 

 

④ 요약통계량 구하기 

g1 <- subset(iris, ghc==1)
summary(g1[1:4])

g2 <- subset(iris, ghc==2)
summary(g2[1:4])

g3 <- subset(iris, ghc==3)
summary(g3[1:4])

 

 

4. 비계층적 군집분석 

:  데이터 셋을 대상으로 계층적으로 군집분석 시각화하는 군집 수를 파악한 후 k-means 알고리즘에 군집수를 적용하여 군집별로 시각화하는 방법

 

실습) ggplot2 패키지에서 제공되는 diamonds 데이터 사용 

 

 

diamonds 데이터 셋 

더보기

diamonds 데이터 셋
ggplot2 패키지에서 제공하는 데이터 셋으로, 약 5만4천개의 다이아몬드에 관한 속성을 기록한 데이터 셋으로 53,940개의 관측치와 10개의 변수로 구성되어 있다. 주요 변수에 대한 설명은 다음과 같다.

- 주요 변수 - 

price : 다이아몬드 가격($326 ~ $18,823)
carat : 다이아몬드 무게(0.2 ~ 5.01)
cut : 컷의 품질(Fair, Good, Very Good, Premium, Ideal)
color : 색상(J : 가장 나쁨 ~ D : 가장 좋음)
clarity : 선명도(I1 : 가장 나쁨, SI1, SI2, VS1, VS2, VVS1, VVS2, IF : 가장 좋음)
x : 길이(0~10.74mm), y : 폭(0~58.9mm), z : 깊이(0~31.8mm),
depth : 깊이 비율 = z / mean(x, y)

 

① 군집분석에 사용할 변수 추출 

install.packages("ggplot2", dependencies = T)

library(ggplot2)

data(diamonds)

dim(diamonds) 출력값 : [1] 53940    10

t <- sample(1 : nrow(diamonds),1000) # 1000개 데이터 샘플링  

test <- diamonds[t, ] # 1000개 표본 추출
dim(test) 출력값 : 1000 10

head(test) # 검정 데이터

mydia <- test[c("price","carat", "depth", "table")] # 4개 칼럼만 선정
head(mydia)

 

 

 

② 계층적 군집분석(탐색적 분석)

result <- hclust(dist(mydia), method="average") # 평균거리 이용 
result


plot(result, hang=-1) # hang : -1 이하 값 제거

 

 

군집 방법(Cluster method) 
 method = "complete" : 완전결합기준(최대거리 이용) <- default(생략시)
 method = "single" : 단순결합기준(최소거리 이용) 
 method = "average" : 평균결합기준(평균거리 이용)

 

 

③ 비계층적 군집분석

result2 <- kmeans(mydia, 3) # 3개 군집 수 적용.

names(result2) # cluster 칼럼 확인 

- 출력값 -
[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"   

result2$cluster # 각 케이스에 대한 소속 군집수(1,2,3)

result2$centers # 각 군집 중앙값

- 출력값 -
     price     carat    depth    table
1  5923.048 1.1164384 61.83801 57.79007
2  1579.091 0.5119504 61.60182 57.35521
3 13368.243 1.7415534 61.93010 58.17476

# 원형데이터에 군집수 추가
mydia$cluster <- result2$cluster # 1 ~ 3 중 하나의 분주에 들어가 있음
head(mydia) # cluster 칼럼 확인 

 

 

④ 변수 간의 상관계수 보기 

cor(mydia[,-5], method="pearson") # 상관계수 보기 

- 출력값 - 
         price      carat       depth       table
price 1.00000000 0.91936804  0.06374813  0.09980938
carat 0.91936804 1.00000000  0.07630058  0.15321267
depth 0.06374813 0.07630058  1.00000000 -0.25949149
table 0.09980938 0.15321267 -0.25949149  1.00000000

plot(mydia[,-5])

 

- 상관계수 색상 시각화 

install.packages('mclust')
install.packages('corrgram')
library(mclust)
library(corrgram) # 상관성 시각화 
corrgram(mydia[,-5]) # 색상 적용 - 동일 색상으로 그룹화 표시

 

corrgram(mydia[,-5], upper.panel=panel.conf) # 수치(상관계수) 추가(위쪽)

 

 

⑤ 비계층적 군집시각화

 

plot(mydia$carat, mydia$price, col=mydia$cluster)

- 중심점 표시 추가 

points(result2$centers[,c("carat", "price")], col=c(3,1,2), pch=8, cex=5)

 

지도학습(Supervised Learning)


– 인간 개입에 의한 분석 방법
– 종속 변수(y) 존재 : 입력 데이터에 정답 포함
– 분석 방법 : 가설검정(확률/통계) → 인문.사회.심리 계열(300년)
– 분석 유형 : 회귀분석, 분류분석, 시계열 분석 → 추론통계 기반

 

 

 

 

분류분석(Decision Tree)

: 다수의 속성(attribute) 또는 변수를 갖는 객체를 사전에 정해진 그룹 또는 범주(class, category) 중의 하나로 분류하여 분석하는 방법입니다. 

 

- 의사결정나무 (Decision Tree)

: 분류 모델링에 의해서 만들어진 규칙(rule)를 나무 모양으로 그리는 방법으로, 의사결정이 이뤄지는 시점과 성과를 한눈에 볼 수 있습니다.

 

의사결정나무(Decision Tree) 활용

- 세분화/분류 : 데이터를 비슷한 특성을 갖는 몇 개의 그룹 또는 몇 개의 등급으로 분할

- 예측 : 데이터에서 규칙을 찾아낸 후 이를 이용하여 미래의 사건을 예측

- 차원 축소 및 변수 선택 : 목표 변수에 큰 영향을 미치는 변수를 골라냄

- 변수들 간의 교호작용 (interaction effect) 파악 - 목표 변수의 범주를 병합하거나 연속형 목표 변수를 이산화(binning)

- 활용분야 고객을 분류하는 변수, 규칙, 특성들을 찾아내고, 이를 토대로 미래 잠재 고객의 행동이나 반응을 예측하거나    유도하는데 활용

 

의사결정나무(Decision Tree) 특징 

- 결과를 설명하기 쉽다.

- 모형을 만드는 방법이 계산적으로 복잡하지 않다.

- 대용량 데이터도 빠르게 처리할 수 있다.

- 비정상 잡음 데이터에 대해서 민감하지 않다.

- 불필요한 변수가 있어도 크게 영향받지 않는다.

 

 

의사결정나무(Decision Tree) 알고리즘

 

a. CART (Classification and Regression Tree)

- 가장 많이 활용되는 알고리즘.

- 목표 변수가 범주형, 연속형 모두 가능. 이진 분리.

- 불순도 측도는 범주형일 경우 지니 지수, 연속형인 경우 분산을 사용.

- 개별 입력변수 뿐만 아니라 입력변수들의 선형결합드 중에서 최적의 분리를 찾을 수 있다.

 

b. C4.5 & C5.0

- 다지 분리(multiple split) 가능.

- 명목형 목표 변수.

- 불순도 측도는 엔트로피 지수 사용.

 

c. CHAID (Chi-squared Automatic Interaction Detection)

- 적당한 크기에서 나무모형의 성장을 중지.

- 연속형 목표변수.

- 불순도 측도는 카이제곱 통계량 사용.

 

 

분류분석의 특징 

 - 종속변수(y변수) 존재
 - 종속변수 : 예측에 Focus을 두는 변수
 - 비모수 검정 : 선형성, 정규성, 등분산성 가정 필요없음
 - 단점 : 유의수준 판단 기준 없음(추론 기능 없음)
 - 규칙(Rule)을 기반으로 의사결정트리 생성

 

 분류 분석 vs 군집 분석 - 분류 분석은 이미 각 계급(클러스터)이 어떻게 정의 되는지 알고 있음

 

분류분석 테스트 환경
– 전수 데이터를 대상으로 할 경우 error를 감안해서 학습데이터와 검정데이터로 분리 하여 테스트
– 학습데이터(전수데이터의 70%) -> 알고리즘 적용 -> rule 발견
– rule 적용 -> 검정데이터(전수데이터의 30%) -> 검정(validate)

 

표본의 통계량으로 모집단의 모수 추론 과정과 유사

구분 추론동계 데이터마이닝
데이터 표본 전수테이터
검정방법 통계량/추론 Rule/검증 

 

 

의․생명분야에서 분류분석 사례

 

 

< 실습내용 >

: iris 데이터셋의 4개변수(Sepal Length,Sepal Width,Petal Length,Petal Width)값에 따라서 꽃의 종류(Species)가 분류되는 과정 알아보기

 

< 테스트 환경 >
전수 데이터를 대상으로 할 경우 error를 감안해서 학습데이터와 검증데이터로 분리 하여 테스트 한다.
학습데이터(훈련데이터) - (70%) -> 알고리즘 적용
rule 추출 -> 검정 테스트 (30%) -> 확인(validate) 데이터
표본의 통계량으로 모집단의 모수 추론과 유사함

 

iris 데이터 셋 

더보기

iris 데이터 셋
R에서 제공되는 기본 데이터 셋으로 3가지 꽃의 종류별로 50개씩 전체 150개의 관측치로 구성된다. iris는 붓꽃에 관한 데이터를 5개의 변수로 제공하며, 각 변수의 내용은 다음과 같다.

Sepal.Length(꽃받침 길이)

Sepal.Width(꽃받침 너비)

Petal.Length(꽃잎 길이)

Petal.Width(꽃잎 너비)

Species(꽃의 종류) : 3가지 종류별 50개 (전체 150개 관측치)

 

 

1. party 패키지 적용 분류분석

 

실습1 ctree 함수 이용 의사결정트리 생성하기

 

① part패키지 설치

install.packages("party")
library(party) # ctree() 제공

 

② airquality 데이터 셋 로딩

library(datasets)

str(airquality)

- 출력값 -
'data.frame':	153 obs. of  6 variables:
 $ Ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
 $ Solar.R: int  190 118 149 313 NA NA 299 99 19 194 ...
 $ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
 $ Temp   : int  67 72 74 62 56 66 65 59 61 69 ...
 $ Month  : int  5 5 5 5 5 5 5 5 5 5 ...
 $ Day    : int  1 2 3 4 5 6 7 8 9 10 ...

airqulity 데이터 셋 

더보기

airquality  데이터 셋
airquality 데이터 셋은 R에서 기본으로 제공되는 데이터 셋으로 New York시의 대기에 대한 질을 측정한 데이터 셋이다. 전체 153개의 관측치와 6개의 변수로 구성되어 있다.

주요 변수:

Ozone(오존 수치)

Solar.R(태양열)

Wind(바람)

Temp(온도)
Month(측정 월 5~9)

Day( 측정 날짜 1~31 일

 

③ formula 생성

formula <-  Temp ~ Solar.R +  Wind + Ozone
종속변수 : 온도, 독립변수 : 태양열, 바람, 오존 수치

 

④ 분류모델 생성 : formula를 이용하여 분류모델 생성 

air_ctree <- ctree(formula, data=airquality)
air_ctree

 

⑤ 분류분석 결과

plot(air_ctree)

오존 수치가 가장 많은 영향을 준다

 

1) 오존 37 이상 

 

- 오존 65 이상 : Node 9

- 오존 65 이하 : Node 8

 

2) 오존 37 이하는 바람의 영향을 받음. 

 

- 바람 15.5 이상 : Node 6

 

3) 바람 15.5 이하는 오존의 영향을 받음.

 

- 오존 19 이상 : Node 5

- 오존 19 이하 : Node 4

 

 

- 분류조건 subset 작성/확인 

result <- subset(airquality, Ozone <= 37 & Wind > 15.5) # 오존 수치: 37 미만, 바람: 15.5 이상 

summary(result$Temp)

- 출력값 - 
  Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  57.0    61.0    63.0    65.2    72.0    73.0 

 

실습2 학습데이터와 검정데이터 샘플링으로 분류분석하기

 

① 학습데이터와 검증데이터 샘플링

set.seed(1234) # 메모리에 시드값 적용 - 동일값 생성 
idx <- sample(1:nrow(iris), nrow(iris) * 0.7) 
train <- iris[idx,] # 70프로
test <- iris[-idx,] # 30프로 

 

iris 데이터 셋 

더보기

iris 데이터 셋 
R에서 제공되는 기본 데이터 셋으로 3가지 꽃의 종류별로 50개씩 전체 150개의 관측치로 구성된다. iris는 붓꽃에 관한 데이터를 5개의 변수로 제공하며, 각 변수의 내용은 다음과 같다.

Sepal.Length(꽃받침 길이)

Sepal.Width(꽃받침 너비)

Petal.Length(꽃잎 길이)

Petal.Width(꽃잎 너비)

Species(꽃의 종류) : 3가지 종류별 50개 (전체 150개 관측치)

 

 

② formula 생성 

-> 형식) 변수 <- 종속변수 ~ 독립변수

formula <- Species ~ Sepal.Length+Sepal.Width+Petal.Length+Petal.Width 

 

③ 학습데이터 이용 분류모델 생성(ctree()함수 이용)

iris_ctree <- ctree(formula, data=train) # 학습데이터로 분류모델(tree) 생성
iris_ctree # Petal.Length,Petal.Width 중요변수

 

④ 분류모델 플로팅

 plot() 이용 - 의사결정 트리로 결과 플로팅

plot(iris_ctree, type="simple") 

 

plot(iris_ctree) # 의사결정트리 해석

 

종은 3개인데 결과가 4갱인 이유 

 

Node 2 , Petal.Length 1.9 이하 = setosa

Node 5, Petal.Length 1.9 이상, Petal.Width 1.6이하,  Petal.Length 4.6 이하 = versicolor 

Node 6, Petal.Length 1.9 이상, Petal.Width 1.6이하,  Petal.Length 4.6 이상 = versicolor  or virginica (불명확)

Node 7, Petal.Length 1.9 이상, Petal.Width 1.6이상 = virginica

 

result <- subset(train, Petal.Length > 1.9 & Petal.Width <= 1.6 & Petal.Length > 4.6)

result$Species 

- 출력값 -
virginica  versicolor versicolor versicolor virginica  versicolor virginica  versicolor
Levels: setosa versicolor virginica

length(result$Species) 출력값 :  8

table(result$Species)

- 출력값 -
setosa versicolor  virginica 
     0          5          3 

 

⑤ 분류 모델 평가 

모델 예측치 생성과 혼돈 매트릭스 생성 
pred <- predict(iris_ctree, test) # 45

pred # Y변수의 변수값으로 예측 

- 출력값 -
 [1] setosa     setosa     setosa     setosa     setosa     setosa     setosa     setosa    
 [9] setosa     setosa     setosa     setosa     setosa     setosa     setosa     setosa    
[17] versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
[25] versicolor virginica  versicolor versicolor versicolor versicolor versicolor versicolor
[33] virginica  virginica  versicolor virginica  virginica  virginica  virginica  virginica 
[41] virginica  virginica  virginica  virginica  virginica 
Levels: setosa versicolor virginica

table(pred, test$Species)

- 출력값 - 
pred         setosa versicolor virginica
setosa         16          0         0   <- missing : 0
versicolor      0         15         1   <- missing : 1
virginica       0          1        12   <- missing : 1


분류정확도 
(16+15+12) / nrow(test) 출력값 :  0.956

 

지도학습(Supervised Learning)


– 인간 개입에 의한 분석 방법
– 종속 변수(y) 존재 : 입력 데이터에 정답 포함
– 분석 방법 : 가설검정(확률/통계) → 인문.사회.심리 계열(300년)
– 분석 유형 : 회귀분석, 분류분석, 시계열 분석 → 추론통계 기반

 

 

회귀분석(Regression Analysis) - 인과 관계 

 

: 여러 자료들 간의 관계성을 수학적으로 추정, 설명한다. 흔히들 통계학의 꽃이라고 합니다. 독립변인이 종속변인에 영향을 미치는지 알아보고자 할 때 실시하는 분석 방법입니다. 선형 회귀법, 로지스틱 회귀법이 대표적이며, 로지스틱 회귀법을 앙상블했다는 관점으로 보면 인공신경망도 여기에 해당한다고 합니다. 선형 회귀법은 지도학습의 회귀문제를 푸는 데에 쓰이고(새로운 값의 예측), 로지스틱 회귀법과 인공신경망은 지도학습의 분류문제를 푸는데에 주로 사용합니다. 

 

-  결과값을 알려주고, 가설을 일차 함수로 정의한 것으로 데이터(독립변수)를 넣어서 분석 시킴 

    ex) y = ax + b    / x( 독립 변수 : 영향을 주는 변수) , y ( 종속 변수 : 영향을 받는 변수 )

                            - 원인을 일으키는 x변수와 결과를 보여주는 y 변수의 관계

 

-  모든 데이터들은 선형성을 띈다. 

 

y = ax + b  : 입력받은 x와 y 값을 가지고 오차를 최소화하는 a와 b의 값 찾는 과정 

 

회귀분석의 역사 - 평균으로의 회귀

더보기

회귀분석(regression analysis)은 생물학자 프랜시스 골턴(Francis Galton)이 '평균으로의 회귀'(regression to the mean / regression towards mediocrity) 현상을 증명하기 위해 만든 것으로 알려져 있다. '평균으로의 회귀'는 부모와 아이의 키를 측정했을 때 쉽게 상상할 수 없는 극단적인 값이 되어도, 그 다음에 새로 측정을 했을 때에는 평균에 더 가까워지는 (평균으로 회귀하는) 경향성을 보고 골턴이 일반화하기 위해서 쓴 용어다.

골턴은 부모와 그 자식의 키에 대한 자료를 만들어 205명의 부모와 그들의 자식 930명의 키에 대한 자료를 분석하여 회귀계수가 2/3임을 밝혔다. 가우스의 최소제곱법을 쓰지 않고 타원으로 적합시켜 회귀계수가 2/3임을 찾아낸 것이 특이하다. 즉, 키는 유전적인 요소가 강력하게 작용한다는 것을 밝힌 것이다. 골턴은 산점도에 최초로 선형식을 표현하여 오늘날의 회귀분석을 성립하는 데 지대한 공을 세웠다.

현대에 와서는 회귀(regress), 즉 평균으로 돌아간다는 의미는 거의 사라졌다. 요즘에는 독립변수와 종속변수를 설정 [1]하고 이들의 관계를 통계적으로 살펴보는 대부분의 방법론을 다 회귀분석이라고 부르기도 한다. 시계열 데이터를 사용하면 시계열 회귀분석이고 패널 자료를 사용하면 패널 회귀 분석인 식이다.

 

회귀 분석 - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권�

namu.wiki

 

 

 

특징) 

- 변수들 사이의 인과관계를 규명하고자 하는 분석방법이기 때문에 변수의 역할설정이 중요합니다. 

 

(주의)

신문을 보는 시간이 TV를 시청하는 시간에 어떤 영향을 미치는가?’라는 물음에서 ‘신문을 보는 시간’은 원인변수에 해당하고 ‘TV를 시청하는 시간’은 결과변수입니다. 이를 뒤바꾸어 ‘TV를 시청하는 시간’을 원인변수 로 하고 ‘신문을 보는 시간’을 결과변수로 한다면 원래 의도했던 연구목적에 위배되는 것입니다. 

 

특정 변수(독립변수)가 다른 변수(종속변수)에 어떠한 영향을 미치는가 (인과관계 분석)
 예) 가격은 제품 만족도에 영향을 미치는가?


- 한 변수의 값으로 다른 변수의 값 예언

인과관계(因果關係) : 변수A가 변수B의 값이 변하는 원인이 되는 관계(변수A : 독립변수, 변수B : 종속변수)

 

 

- 회귀 방정식(Y=a+βX → Y:종속변수, a:상수, β:회귀계수, X:독립변수)을 도출하여 회귀선 추정

  선형 회귀 방정식(1차 함수) : 회귀선 추정

  회귀계수(β) : 단위시간에 따라 변하는 양(기울기)이며, 회귀선을 추정함에 있어 최소자승법 이용

 

Y= a + b*X  (Y : 종속변수, a : 절편, b : 기울기, X : 독립변수)

 

회귀방정식에 의해서 x가 10일 때 y는 20 예측 -> 회귀분석은 수치 예측

 

 

- 최소자승법 적용 회귀선

: 회귀방정식에 의해서 그려진 y의 추세선, 산포도 각 점의 위치를 기준으로 정중앙 통과하는 회귀선 추정 방법

- 산포도에 위치한 각 점에서 회귀선에 수직으로 이르는 값의 제곱의 합 최소가 되는 선(정중앙을 통과하는 직선)을 

  최적의 회귀선으로 추정

 

- 독립변수와 종속변수가 모두 등간척도 또는 비율척도 구성

 

- 상관 관계 분석 : 변수 간의 관련성 분석

- 회귀 분석 : 변수 간의 인과관계 분석

 

 

- 회귀분석의 기본 가정 충족

 

  ① 선형성 : 독립변수와 종속변수가 선형적 이어야한다. (회귀선 확인)


  ② 오차(잔차)의 정규성 : 오차(잔차) 란 종속변수의 관측값과 예측값 간의 차이를 말하며, 오차(잔차)의 기대값은 0이며,

                                  정규분포를 이루어야한다. (정규성 검정 확인)


  ③ 오차의 독립성 : 오차들은 서로 독립적 이어야한다. (더빈-왓슨 값 확인)


  ④ 오차의 등분산성 : 오차들의 분산이 일정해야한다. (표준잔차와 표준예측치 도표) 


  ⑤ 다중공선성 : 다중 회귀분석을 수행할 경우 3개 이상의 독립변수들 간의 강한 상관관계로 인한 문제가 발생되지

                       않아야 한다.(분산팽창요인(VIF) 확인)

                    - 입력으로 사용되어지는 독립변수의 독립성이 상호의존성이 높을 때 회기 분석의 결과를

                      신뢰할 수 없는 피드백이 나온다. 

 

 

회귀모형의 형태

 

1) 단순(단일) 회귀 분석(Simple Regression Analysis) : 하나의 종속변수에 대해 독립변수가 하나인 경우

2) 다중 회귀 분석(Multiple Regression Analysis) : 하나의 종속변수에 대해 독립변수가 둘 이상인 경우

3) 로지스틱 회귀분석(Logistic Regression) : 분류 분석, 독립변수 -> 종속변수(분류) 

 

 

회귀분석을 통해 알 수 있는 것 

 

1) 종속변수와 독립변수 간에 선형관계가 존재하는지 알 수 있습니다. 

2) 종속변수에 영향을 미치는 독립변수가 유의 한지와 영향력의 정도를 알 수 있습니다. 

3) 추정된 회귀모형을 통해 종속변수의 예측치를 알 수 있습니다. 

 

*경사하강법 :  실체 관찰치 값과 예측 값 사이의 값의 오차 = (관측치 - 예측값 = 잔차(제곱하여 음수 제거)) , 그 값의 최소의 값을 찾는 것 = 경사하강법(2차 함수 형태 = 최소값 기울기 0일 때)

 

 

 

 

① 단순(단일) 회귀 분석(Simple Regression Analysis)

 

   – 독립변수와 종속변수 각각 1개
   – 독립변수(원인 제공자)가 종속변수(영향을 받는 자)에 미치는 인과관계 분석

 

 

< 연구 가설 > 

- 연구가설(H1) : 음료수 제품의 당도와 가격수준을 결정하는 제품 적절성(독립변수)은 제품 만족도(종속변수)에 정(正)의 영향을 미친다.

- 귀무가설(H0) : 음료수 제품의 당도와 가격수준을 결정하는 제품 적절성은 제품의 만족도에 영향을 미치지 않는다.

 

 연구모델 : 제품 적절성(독립변수) -> 제품 만족도(종속변수)

 

위의 데이터를 통해서 살펴보도록 하겠습니다. 

 

- 데이터 전처리 (data.frame 데이터 생성)

str(product) # 'data.frame':  264 obs. of  3 variables:

- 출력값 - 
'data.frame':	264 obs. of  3 variables:
 $ 제품_친밀도: int  3 3 4 2 2 3 4 2 3 4 ...
 $ 제품_적절성: int  4 3 4 2 2 3 4 2 2 2 ...
 $ 제품_만족도: int  3 2 4 2 2 3 4 2 3 3 ...

y = product$제품_만족도 # 종속변수
x = product$제품_적절성 # 독립변수
df <- data.frame(x, y)

- 출력값 -
  x y
1 4 3
2 3 2
3 4 4
4 2 2
5 2 2
6 3 3

 

 

- 회귀모델 생성 

result.lm <- lm(formula=y ~ x, data=df)

 #lm(leaning machine) = lm ( formuly= 종속변수 ~ 독립변수 , data = 데이타 셋 ) 
 
 result.lm # 회귀계수 ( 절편과 기울기 ) 

lm : 회귀 모델 생성  ( * 알고리즘 관련 함수 저장 pakage = stats )

 

오차가 최소가 되어지는 값을 lm 을 통해서 출력준 값입니다. 

- 오차를 최소화 해주는 기울기 :  0.7393 , 절편 : 0.7789

 

결과 : y = 0.7393x + 0.7789 

 

 

- 모델의 적합값과 잔차 보기

names(result.lm)

- 출력값 - 
[1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values" "assign"       
[7] "qr"            "df.residual"   "xlevels"       "call"          "terms"         "model"        

fitted.values(result.lm)[1:2]

- 출력값 -
       1        2 
3.735963 2.996687 

head(df, 1)

- 출력값 - 
  x y
1 4 3

Y = 0.7789 + 0.7393 * 4  
Y 출력값 :  3.7361 - 회귀방정식에 의해서 계산된 적합값 

# 오차(잔차:error) = Y관측값 - Y적합값 
3-3.735963  출력값 :  -0.735963

residuals(result.lm)[1:2] # 모델의 잔차 출력 

- 출력값 -  
        1          2  
-0.7359630 -0.9966869 

-0.7359630 + 3.735963 출력값 : 3 # 잔차 + 적합값 = 관측값 

 

 

-  선형회귀분석 모델 시각화[오류 확인]

 

① x, y 산점도 그리기 

x11()
plot(formula=y ~ x, data=df)

 

② 회귀분석 + 회귀선 

result.lm <- lm(formula=y ~ x, data=df) 

abline(result.lm, col='red') # 회귀선 

 

- 선형회귀 분석 결과 보기 

summary(result.lm)

<회귀분석 결과 해석>

 결정계수(Coefficients) : R-squared -> 0 ~ 1 사이의 값을 갖는다.
 Multiple R-squared: 0.5881: 독립변수에 의해서 종속변수가 얼마만큼 설명되었는가?
 설명력 -> 상관(결정)계수 : 58.8% 설명력
 1에 가까울 수록 설명변수(독립변수)가 설명을 잘한다고 판단
 모형의 변수 선정이 우수하다는 의미.
 Adjusted R-squared: 0.5865 : 조정된 R값(오차를 감안한 값)<- 이것으로 분석

 

최종 결론 : 제품 적절성은 제품 만족도에 정(正)의 영향을 미친다. 

 

 

 

② 다중 회귀 분석(Multiple Regression Analysis)

: 여러 개 독립변수가 1개의 종속변수에 미치는 영향 분석

 

< 연구 가설 > 

연구가설1(H1) : 음료수 제품의 적절성(독립변수1)은 제품 만족도(종속변수)에 정(正)의 영향을 미친다.

연구가설2(H1) : 음료수 제품의 친밀도(독립변수2)는 제품 만족도(종속변수)에 정(正)의 영향을 미친다.

 

연구모델 : 제품 적절성(x1), 제품 친밀도(x2) -> 제품 만족도(y)

 

위의 데이터를 활용하여 살펴보도록 하겠습니다.

 

 

- 데이터 전처리 ( 적절성 + 친밀도 -> 만족도 )

y = product$제품_만족도 # 종속변수
x1 = product$제품_친밀도 # 독립변수2
x2 = product$제품_적절성 # 독립변수1
df <- data.frame(x1, x2, y)

head(df)

- 출력값 - 
> head(df)
  x1 x2 y
1  3  4 3
2  3  3 2
3  4  4 4
4  2  2 2
5  2  2 2
6  3  3 3

result.lm <- lm(formula=y ~ x1 + x2, data=df) # (+) 사용하여 추가 

lm(formula=종속변수 ~ 독립변수1 + 독립변수2, data=데이터 셋)

result.lm

(잔차가 최저가 되는 기울기)결과 :  y = 0.09593 * x1 +  0.68522 * x2 + 0.66731; ( y = ax1 +bx2 +c )

 

 

- 다중공선성 문제 체크 

(입력으로 사용되어지는 독립변수의 독립성이 상호의존성이 높을 때 회기 분석의 결과를 신뢰할 수 없는 피드백이 나온다. )

install.packages("car")
library(car)

vif(result.lm) # x1, x2 < 10 미만인지 체크.

- 출력값 -
      x1       x2 
1.331929 1.331929 

 vif (car 패키지에서 제공하는 함수) : 입력으로 전달된 데이터 셋의 다중공선성의 문제가 발생하는지 발생하지 않는지

                                                결과를 체크 할 수 있도록 합니다. 

 

 vif < 10미만은 독립적인 관계를 가지고 간다. ( 1.331929 , 1.331929 < 10 ) 

 

 

- 다중회귀 분석 결과 보기 

summary(result.lm)

t=15.684, p < 2e-16으로 유의수준 하에서 연구가설1이 채택되었으며, 제품 친밀도가 제품 만족도에 미치는 영향은 t=2.478, p=0.0138로 유의수준하에서 연구가설2가 채택되었습니다. 

 

Multiple R-squared: 0.5975: 독립변수에 의해서 종속변수가 얼마만큼 설명되었는가? 

설명력 -> 상관(결정)계수 : 59.7% 설명력, 1에 가까울 수록 설명변수(독립변수)가 설명을 잘한다고 판단할 수 있습니다.
(모형의 변수 선정이 우수)

 

최종 결과 : 유의수준 0.05에서 연구가설이 채택되었다. 따라서 제품 적절성과 제품 친밀도가 높을 수록 제품 만족도가 높아지는 경향을 보이고 있다.

 

 

-  다중공선성 문제 해결과 모델 성능평가 

 

iris 데이터를 사용하여 살펴보겠습니다. 

더보기

iris
R에서 제공되는 기본 데이터 셋으로 3가지 꽃의 종류별로 50개씩 전체 150개의 관측치로 구성된다. iris는 붓꽃에 관한 데이터를 5개의 변수로 제공하며, 각 변수의 내용은 다음과 같다.

 

Sepal.Length(꽃받침 길이) 

Sepal.Width(꽃바침 너비)

Petal.Length(꽃잎 길이)

Petal.Wodth(꽃잎 너비)

Species(꽃의 종류) : 3가지 종류별 50개(전체 150개 관측치) 

 

 

실습 ① 다중공선성 문제 확인

 

- iris 데이터 셋으로 다중회귀분석

fit <- lm(formula=Sepal.Length ~ Sepal.Width+Petal.Length+Petal.Width, data=iris)
vif(fit)

- 출력값 - 
 Sepal.Width Petal.Length  Petal.Width 
    1.270815    15.097572    14.234335 
    
    
sqrt(vif(fit))>2 # root(VIF)가 2 이상인 것은 다중공선성 문제 의심 

- 출력값 - 
 Sepal.Width Petal.Length  Petal.Width 
       FALSE         TRUE         TRUE 

 

- iris 변수 간의 상관계수 구하기

cor(iris[,-5]) # 변수간의 상관계수 보기(Species 제외) 

- 출력값 -
              Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000

x변수들끼리 계수값이 높을 수도 있다. -> 해당 변수 제거(모형 수정) <- Petal.width

 

 

실습 ② 데이터 셋 생성과 회귀모델 생성

 

- 학습데이터와 검정데이터 분류

x <- sample(1:nrow(iris), 0.7*nrow(iris)) # 전체중 70%만 추출 (1~150개 중에서 70%만 랜덤으로 출력)
train <- iris[x, ] # 학습데이터 추출(70%)
test <- iris[-x, ] # 검정데이터 추출(30%)

 

- 변수 제거 및 다중회귀분석 - Petal.width 변수를 제거한 후 회귀 분석 ( 학습데이터 이용 모델 생성 )

model <- lm(formula=Sepal.Length ~ Sepal.Width + Petal.Length, data=train)

 

- 회귀방정식 도출 

model 

head(train, 1)

- 출력값 - 
        Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
70          5.6         2.5          3.9         1.1       versicolor


Y = 1.8347 + 0.7065 * 2.5 + 0.4890 * 3.9

Y 출력값 :  5.50805

 

 

- 예측치 생성 - predict()함수

pred <- predict(model, test) # x변수만 test에서 찾아서 값 예측
pred # test 데이터 셋의 y 예측치(회귀방정식 적용) 
test$Sepal.Length # test 데이터 셋의 y 관측치  
length(pred) 출력값 :  45 (개 벡터)

 

 

- 회귀모델 평가 

cor(pred, test$Sepal.Length) 출력값 : 0.9346613

summary(pred); summary(test$Sepal.Length)

- 출력값 -
Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  4.095   5.068   6.133   5.966   6.687   7.796 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  4.500   5.100   6.100   6.002   6.700   7.700 

 

 

③ 로지스틱 회귀분석(Logistic Regression) - 분류 분석 

 

목적 : 일반 회귀분석과 동일하게 종속변수와 독립변수 간의 관계를 나타내어 향후 예측 모델을 생성하는데 있습니다. 

 

차이점 : 종속변수가 범주형 데이터를 대상으로 하며 입력 데이터가 주어졌을 때 해당 데이터의 결과가 특정 분류로 나눠지기 때문에 분류분석 방법으로 분류됩니다.

(종속변수(y)를 범주군으로 분류군으로 결과가 피드백 되어지는 분석법) 


유형 : 이항형(종속변수가 2개 범주-Yes/No), 다항형(종속변수가 3개 이상 범주-iris 꽃 종류)

다항형 로지스틱 회귀분석 : nnet, rpart 패키지 이용 
a : 0.6,  b:0.3,  c:0.1 -> a 분류 

분야 : 의료, 통신, 기타 데이터마이닝

 

- 결과는 0이 아니면 1의 값으로, 두가지 분류군으로 구분지어서 어느 영역에 해당되는지 출력합니다. 

선형회귀분석 vs 로지스틱 회귀분석 
1. 로지스틱 회귀분석 결과는 0과 1로 나타난다.(이항형)
2. 정규분포(연속형) 대신에 이항분포(범주형)를 따른다.
3. 로직스틱 모형 적용 : 변수[-무한대, +무한대] -> 변수[0,1]사이에 있도록 하는 모형 
   -> 로짓변환 : 출력범위를 [0,1]로 조정
4. 종속변수가 2개 이상인 경우 더미 변수(dummy variable)로 변환하여 0과 1를 갖도록한다.
   예) 혈액형 A인 경우 -> [1,0,0,0] AB(1) -> A,B,O(0)  

 

 

위의 데이터를 활용하여 살펴보도록 하겠습니다. 

 

- 데이터 확인 

dim(weather) 출력값 : 366  15

str(weather)

- 출력값 - 
data.frame':	366 obs. of  15 variables:
 $ Date         : chr  "2014-11-01" "2014-11-02" "2014-11-03" "2014-11-04" ...
 $ MinTemp      : num  8 14 13.7 13.3 7.6 6.2 6.1 8.3 8.8 8.4 ...
 $ MaxTemp      : num  24.3 26.9 23.4 15.5 16.1 16.9 18.2 17 19.5 22.8 ...
 $ Rainfall     : num  0 3.6 3.6 39.8 2.8 0 0.2 0 0 16.2 ...
 $ Sunshine     : num  6.3 9.7 3.3 9.1 10.6 8.2 8.4 4.6 4.1 7.7 ...
 $ WindGustDir  : chr  "NW" "ENE" "NW" "NW" ...
 $ WindGustSpeed: int  30 39 85 54 50 44 43 41 48 31 ...
 $ WindDir      : chr  "NW" "W" "NNE" "W" ...
 $ WindSpeed    : int  20 17 6 24 28 24 26 24 17 6 ...
 $ Humidity     : int  29 36 69 56 49 57 47 57 48 32 ...
 $ Pressure     : num  1015 1008 1007 1007 1018 ...
 $ Cloud        : int  7 3 7 7 7 5 6 7 7 1 ...
 $ Temp         : num  23.6 25.7 20.2 14.1 15.4 14.8 17.3 15.5 18.9 21.7 ...
 $ RainToday    : chr  "No" "Yes" "Yes" "Yes" ...
 $ RainTomorrow : chr  "Yes" "Yes" "Yes" "Yes" ...

head(weather)

 

- 데이터 전처리 

Date, RainToday 칼럼 제거

weather_df <- weather[, c(-1, -6, -8, -14)]
str(weather_df)

- 출력값 -
str(weather_df)
'data.frame':	366 obs. of  11 variables:
 $ MinTemp      : num  8 14 13.7 13.3 7.6 6.2 6.1 8.3 8.8 8.4 ...
 $ MaxTemp      : num  24.3 26.9 23.4 15.5 16.1 16.9 18.2 17 19.5 22.8 ...
 $ Rainfall     : num  0 3.6 3.6 39.8 2.8 0 0.2 0 0 16.2 ...
 $ Sunshine     : num  6.3 9.7 3.3 9.1 10.6 8.2 8.4 4.6 4.1 7.7 ...
 $ WindGustSpeed: int  30 39 85 54 50 44 43 41 48 31 ...
 $ WindSpeed    : int  20 17 6 24 28 24 26 24 17 6 ...
 $ Humidity     : int  29 36 69 56 49 57 47 57 48 32 ...
 $ Pressure     : num  1015 1008 1007 1007 1018 ...
 $ Cloud        : int  7 3 7 7 7 5 6 7 7 1 ...
 $ Temp         : num  23.6 25.7 20.2 14.1 15.4 14.8 17.3 15.5 18.9 21.7 ...
 $ RainTomorrow : chr  "Yes" "Yes" "Yes" "Yes" ...
 
 
 
 
RainTomorrow 칼럼 -> 로지스틱 회귀분석 결과(0,1)에 맞게 더미변수 생성   

weather_df$RainTomorrow[weather_df$RainTomorrow=='Yes'] <- 1
weather_df$RainTomorrow[weather_df$RainTomorrow=='No'] <- 0
weather_df$RainTomorrow <- as.numeric(weather_df$RainTomorrow)

str(weather_df)

- 출력값 -
'data.frame':	366 obs. of  11 variables:
 $ MinTemp      : num  8 14 13.7 13.3 7.6 6.2 6.1 8.3 8.8 8.4 ...
 $ MaxTemp      : num  24.3 26.9 23.4 15.5 16.1 16.9 18.2 17 19.5 22.8 ...
 $ Rainfall     : num  0 3.6 3.6 39.8 2.8 0 0.2 0 0 16.2 ...
 $ Sunshine     : num  6.3 9.7 3.3 9.1 10.6 8.2 8.4 4.6 4.1 7.7 ...
 $ WindGustSpeed: int  30 39 85 54 50 44 43 41 48 31 ...
 $ WindSpeed    : int  20 17 6 24 28 24 26 24 17 6 ...
 $ Humidity     : int  29 36 69 56 49 57 47 57 48 32 ...
 $ Pressure     : num  1015 1008 1007 1007 1018 ...
 $ Cloud        : int  7 3 7 7 7 5 6 7 7 1 ...
 $ Temp         : num  23.6 25.7 20.2 14.1 15.4 14.8 17.3 15.5 18.9 21.7 ...
 $ RainTomorrow : chr  "Yes" "Yes" "Yes" "Yes" ...
 
View(weather_df) # head(weather_df) 

 

- 로지스틱 회귀분석(Logistic Regression) -> 7:3 비율 

idx <- sample(1:nrow(weather_df), nrow(weather_df)*0.7) # 랜덤으로 70% 출력 
train <- weather_df[idx, ] # 70%
test <- weather_df[-idx, ] # 30%

 

- 로지스틱  회귀모델 생성 : 학습데이터 

weater_model <- glm(RainTomorrow ~ ., data = train, family = 'binomial')
weater_model 
summary(weater_model) 

 

 

- 로지스틱  회귀모델 예측치 생성  

newdata=test : 새로운 데이터 셋, type="response" : 0~1 확률값으로 예측 

pred <- predict(weater_model, newdata=test, type="response")  
pred 

summary(pred)

- 출력값 -
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
0.001244 0.019221 0.081876 0.225368 0.385520 0.975289        2 

str(pred)

- 출력값 -
Named num [1:110] 0.1094 0.0109 0.0193 0.0502 0.0594 ...
 - attr(*, "names")= chr [1:110] "2" "11" "15" "19" ...

 

- 예측치 : 0과 1로 변환(0.5)

result_pred <- ifelse(pred >= 0.5, 1, 0) # 비가올 활률 50% 이상 : 1, 비가올 활률 50% 이하 : 0
result_pred

table(result_pred)

- 출력값 - 
result_pred  0  1
          0 86 11
          1  1 10

 

 

- 모델 평가 : 분류정확도  

table(result_pred, test$RainTomorrow)

- 출력값 -
result_pred  0  1
          0 86 11
          1  1 10
         
모델의 분류정확도 
(80+13) / (86+11+1+10) #  0.8611111 = 86.11%         

 

- ROC(Receiver Operating Characteristic) Curve를 이용한 모델 평가

install.packages("ROCR")
library(ROCR)

 

- ROCR 패키지 제공 함수 : prediction() -> performance

pr <- prediction(pred, test$RainTomorrow)

pr

-출력값- 
A prediction instance
  with 110 data points
  
prf <- performance(pr, measure = "tpr", x.measure = "fpr")

plot(prf)

 

+ Recent posts