자격증/ADsP

ADsP 제3과목 데이터 분석 - 1, 2, 3장

아웃라이어_ 2020. 2. 17. 23:23

데이터분석 준전문가 3과목 1, 2, 3장 요약입니다.

워드파일과 R코드도 첨부합니다 필요하신 분 사용하세요

(나눔바른고딕 폰트 사용하였습니다.

R 버젼은 3.6.1, 인코딩은 utf8입니다.)

제3과목_123장.docx
0.03MB
Ch03_03_01_Reshape.R
0.00MB
Ch03_03_01_sqldf.R
0.00MB
Ch03_03_02_manipulation.R
0.00MB

제1장 데이터 분석 개요

제1절 데이터 분석 기법의 이해

• 데이터 처리

- 데이터 웨어하우스(DW)와 데이터 마트(DM)을 통해 분석 데이터를 구성한다.

- 신규 데이터나 DW에 없는 데이터는 기존 운영시스템(legacy)에서 가져오기 보다는 운영시스템에서 임시로 데이터를 저장하는 스테이징 영역(Staging area)에서 데이터를 전처리해서 DW, DM과 결합하여 데이터를 구성하도록 한다.

- 또는 ODS(Operational Data Store)에서 운영시스템과 유사한 정제된 데이터를 가져와서 DW에서 가져온 내용과 결합하여 활용한다.

- 최종 데이터 구조로 가공한다.

· 시뮬레이션: 모델링에 적합한 단계별 처리시간에 대한 분포를 파악할 수 있는 내용과 유형, 그에 따른 특성을 속성으로 만든다.

· 최적화: 제약값에 대한 내용과 목적 함수, 제약 조건에 들어갈 계수 값을 프로세스 별로 산출

· 분류: 분류값과 입력 변수들을 연관시켜, 인구통계, 요약변수, 파생변수 등을 산출

· 비정형 데이터나 소셜 데이터는 정형화된 패턴으로 처리해야 한다.

 

• 시각화(Visualization)

- 그래프 등을 통해 데이터의 분포, 특성을 파악

 

• 공간분석(Spatial analysis)

- 공간적 차원과 관련된 속성들을 시각화하는 분석. 지도 위에 관련 속성들을 생성하고 크기, 모양, 선 굵기 등으로 구분하여 인사이트를 얻는다.

 

• 탐색적 자료 분석(EDA)

- 다양한 차원과 값을 조합해가며 특이한 점이나 의미 있는 사실을 도출하고 분석의 최종 목적을 달성해가는 과정

- 데이터의 특징과 내재하는 구조적 관계를 알아내기 위한 기법들의 통칭

- 의미가 있을 것으로 판단되는 변수 집단과 아닌 집단을 1차 구분한다.

 

• 통계분석

- 통계: 어떤 현상을 종합적으로 한 눈에 알아보기 쉽게 일정한 체계에 따라 숫자와 표, 그림의 형태로 나타내는 것

- 기술통계(descriptive statistics): 모집단으로부터 표본을 추출하고 표본이 가지고 있는 정보를 쉽게 파악할 수 있도록 데이터를 정리하거나 요약하기 위해 하나의 숫자로 또는 그래프의 형태로 표현하는 절차

- 추측통계(inferential statistics): 모집단으로부터 추출된 표본의 표본 통계량으로부터 모집단의 특성인 모수에 관해 통게적으로 추론하는 절차

 

• 데이터마이닝(Data mining)

- 대용량의 자료로부터 정보를 요약하고 미래에 대한 예측을 목표로 자료에 존재하는 관계, 패턴, 규칙 등을 탐색하고 이를 모형화 함으로써 이전에 알려지지 않은 유용한 지식을 추출하는 분석

 

· 기계학습(machine learning): 컴퓨터가 학습할 수 있도록 알고리즘과 기술을 개발하는 분야

 

· 패턴인식(pattern recognition): 원자료를 이용해서 사전 지식과 패턴에서 추출된 통계 정보를 기반으로 자료 또는 패턴을 분류하는 방법

 

• 시뮬레이션(Simulation)

- 복잡한 실제 상황을 단순화해 컴퓨터 상의 모델로 만들어 재현하거나 변경함으로써 현상을 보다 잘 이해하고 미래의 변화에 따른 결과를 예측하는 데 사용하는 고급분석 기법

 

• 최적화(Optimization)

- 목적함수 값을 최대화 또는 최소화하는 것을 목표로 하는 분석 방법. 제약조건 하에서 목표값을 개선하는 방식으로 목적함수와 제약조건을 정의하여 문제를 해결

 

제2장 R 프로그래밍 기초

제1절 R 소개

- R은 오픈소스 프로그램으로 통계, 데이터마이닝을 위한 언어이다.

- 윈도우, 맥, 리눅스 OS에서 사용 가능하다.

- 객체 지향 언어이며 함수형 언어이다. 즉, 통계 기능뿐만 아니라 일반 프로그래밍 언어처럼 자동화하거나 새로운 함수를 생성하여 사용 가능

 

- 객체 지향 언어는 필요한 부분을 프로그래밍으로 골라 추출하여 활용이 가능하다.

- 함수형 언어는 깔끔하고 단축된 코드, 매우 빠른 수행 속도, 디버깅 노력 감소, 병렬 프로그래밍의 전환이 용이하다는 특징을 가진다.

 

• R Studio

- 메모리에 변수가 어떻게 되어있는 지와 타입이 무엇인지를 볼 수 있고 스크립트 관리와 도큐먼테이션이 편리하다.

- 스크립트용 프로그래밍으로 어렵지 않고 쉽게 자동화가 가능하다.

 

제2절 R 프로그래밍 기초

• 패키지(Package)

- R 함수, 데이터 및 컴파일된 코드의 모임

- 패키지 자동설치: install.packages("패키지")

- 패키지 수동설치: install.packages("패키지명", "패키지 위치")

 

• 스크립트로 프로그래밍 된 파일 실행

- source("파일명.R")

- pdf( ): 그래픽 출력을 pdf 파일로 지정

 

•배치모드

- 사용자와 인터랙션이 필요하지 않은 방식으로, 매일 실행되어야 하는 프로그램에서 프로세스를 자동화할 때 유용하다.

- 배치파일 실행 명령: batch.R 실행파일이 있는 위치에서 윈도우 창에 "R CMD BATCH batch.R" 명령어 실행

 

•R 명령어

· print( ): 출력 형식을 지정할 필요 없음. 한 번에 하나의 객체만 출력

· cat( ): 여러 항목을 묶어서 연결된 결과로 출력. 복합적 데이터 구조(행렬, list 등)를 출력 불가

· 대입 연산자: " <-, <<-, =, ->"

· 변수 목록보기: ls( )

· 변수 삭제하기: rm( )

· 벡터 생성하기: c( )
- 벡터의 원소 중 하나라도 문자가 있으면 모든 원소의 자료형은 문자형태로 변환

· 지역변수: 단순히 값을 대입하기만 하면 지역변수로 생성. 함수가 종료되면 지역변수는 삭제됨

· 조건부 실행문: if문

· 반복 실행문: for문, while문, repeat문

· 전역변수: "<<-"를 사용하여 전역변수를 변경할 수 있지만 추천하지 않음

· 수열: "시작값:끝값". 시작값에서 최종값까지의 연속적인 숫자 생성. seq( )함수는 간격과 결과값의 길이를 제한 가능

· 반복: rep( ) 함수는 숫자나 변수의 값들을 반복해서 생성 가능.

· 문자열 붙이기: paste( ) 함수

· 문자열 추출: substr(문자열, 시작점, 끝점) 함수는 문자열의 특정 부분을 추출 가능

· 논리값: T는 True, F는 False

· 논리연산자

==

같다

!=

같지 않다

<, <=

작다, 작거나 같다

>, >=

크다, 크거나 같다

 

· 벡터의 원소 선택하기: V[n], n은 원소의 자릿수, 논리형 벡터, 벡터의 이름.

· 벡터의 원소 제외하기: V[-n], n은 제외하고자 하는 원소의 자릿수

 

• 벡터의 연산

· [, [[: 인덱스

· $: 요소, 변수 뽑아내기

· ^ : 지수 계산. 예) 5^2 = 25

· -, +: 단항 마이너스, 플러스 부호

· ":" : 수열 생성

· %/%: 나눗셈 결과의 몫 반환

· %%: 나눗셈 결과의 나머지 반환

· %*%: 행렬 곱

· *, / : 곱하기, 나누기

· +, -: 더하기, 뻬기

· ! : 논리 부정. !T = F

· &: 논리 "and".

· | : 논리 "or".

· ~ : 식(formula)

· ->, ->>: 오른쪽 대입

· =: 오른쪽을 왼쪽으로 대입

· <-, <<-: 오른쪽을 왼쪽으로 대입

· ?: 도움말

 

• 기초통계 명령어

· mean(변수): 변수의 평균 산출

· sum(변수): 변수의 합계 산출

· median(변수): 변수의 중앙값 산출

· log(변수): 변수의 로그값 산출

· sd(변수): 변수의 표준편차 산출

· var(변수): 변수의 분산 산출

· cov(변수1, 변수2): 변수 간 공분산 산출

· cor(변수1, 변수2): 변수 간 상관계수 산출

· length(변수): 변수의 길이를 값으로 산출

 

제3절 입력과 출력

· 테이블로 된 데이터 파일 읽기 (변수 구분자 포함): read.table("파일이름", sep="구분자")
· CSV 데이터 파일 읽기(변수 구분자는 쉼표): read.csv("파일이름", header=T)
· CSV 데이터 파일로 출력(변수 구분자는 쉼표): write.csv(행렬 또는 데이터프레임, "파일이름", row.names=F)

 

제4절 데이터 프레임과 데이터 구조

• 벡터(Vector)

- 벡터들은 동질적이다: 한 벡터의 원소는 모두 같은 자료형을 가진다.

- 벡터는 위치로 인덱스된다: V[2]는 V벡터의 2번째 원소이다.

- 벡터는 인덱스를 통해 여러 개의 원소로 구성된 하위 벡터를 반환할 수 있다.: V[c(2, 3)]은 V 벡터의 2번째, 3번째 원소로 구성된 하위벡터

- 벡터 원소들은 이름을 가질 수 있다.

기능

R 코드

벡터에
데이터
추가

v <- c(v, newItems)

v[length(v)+1] <- newItems

벡터에
데이터
삽입

append(vec, newvalues, after=n)

요인 생성

f <- factor(v)

f <- factor(v, levels)

여러 벡터를
합쳐 하나의
벡터와 요인으로 만들기

comb <- stack(list(v1=v1, v2=v2))

벡터 내
값 조회

V[c(1, 3, 5, 7)]

V[-c(2, 4)]

 

• 리스트(List)

- 리스트는 이질적이다: 여러 자료형의 원소들이 포함될 수 있다.

- 리스트는 위치로 인덱스된다: L[[2]]는 L 리스트의 2번째 원소이다.

 

- 리스트에서 하위 리스트를 추출할 수 있다.: L[c(2, 3)]은 L 리스트의 2번째, 3번째 원소로 이루어진 하위 리스트

- 리스트의 원소들은 이름을 가질 수 있다.: L[["Moe"]]와 L$Moe는 둘 다 "Moe"라는 이름의 원소를 지칭한다.

기능

R 코드

리스트 생성

L <- list(x, y, z)

L <- list(valuename1=vec, valuename2= data)

리스트
원소선택

L[[n]]: n번째 원소

L[c(n1, n2, … nk)]: 목록

이름으로
리스트
원소선택

L[["name"]]

L$name

리스트에서
원소 제거

L[["name"]] <- NULL

NULL 원소를 리스트에서 제거

L[sapply(L, is.null)] <- NULL

L[is.na(L)] <- NULL

 

• 행렬(Matrix)

- R에서는 차원을 가진 벡터로 인식

기능

R 코드

행렬 생성

matrix(데이터, 행개수, 열개수)

e <- matrix(1:20, 4, 5)

차원

dim(행렬)

대각행렬

diag(행렬)

전치행렬

t(행렬)

역행렬

solve(matrix)

행렬곱

행렬 %*% 행렬

행 이름 부여

rownames(행렬) <- c("행이름")

열 이름 부여

colnames(행렬) <- c("열이름")

행렬 연산

행렬 + 행렬, 행렬 - 행렬

행렬 + 상수, 행렬 - 상수, 행렬*상수

행렬에서 행, 열 선택하기

vec <- matrix[1, ]

vec <- matrix[, 3]

 

• 단일값(scalars)

- R에서는 원소가 하나인 벡터로 인식/처리

 

• 배열(Arrays)

- 행렬이 3차원 또는 n차원까지 확장된 형태

- 주어진 벡터에 더 많은 차원을 부여하여 생성

 

• 요인(Factors)

- 벡터처럼 생겼지만, R에서는 벡터에 있는 고유값(unique value)의 정보를 얻어 내는데, 이 고유값들을 요인의 수준(level)이라고 한다.

 

• 데이터프레임(Data frame)

- 데이터 프레임 리스트의 원소는 벡터 또는 요인이다. 벡터와 요인은 데이터 프레임의 열이다.

- 벡터와 요인들은 동일한 길이이다.

- 동일한 벡터와 요인들은 데이터프레임을 사각형으로 만든다.

- 열에는 이름이 있어야 한다.

- 각각의 열에 대해 문자형인지 수치형인지 자동적으로 구분되어 편리

- 데이터프레임은 메모리 상에서 구동된다.

기능

R 코드

데이터프레임 생성

data.frame(벡터, 벡터, 벡터)

행결합

rbind(dfrm1, dfrm2)

newdata <- rbind(data, row)

열결합

cbind(dfrm1, dfrm2)

newdata <- cbind(data, col)

데이터프레임 조회

dfrm[dfrm$gender="m"]

dfrm[dfrm$변수1>4 & dfrm$변수 2>5, c(변수3, 변수4)]

 

 dfrm[grep("문자", dfrm$변수1, ignore.case=T), c("변수2, 변수3")]

 

subset(dfrm, select=변수, subset=조건)

데이터 선택

lst1[[2]], lst1[2], lst1[2,], lst1[, 2]

lst1[["name"]], lst1$name

lst1[c("n1", "n2", .., "nk")]

데이터 병합

merge(df1, df2, by="공통열")

열이름 조회

colnames(데이터프레임)

행, 열 선택

subset(dfm, select=열이름)

subset(dfm, select=c(열이름1, 열이름2, 열이름n))

subset(dfm, select=열이름, subset(조건))

이름으로

열 제거

subset(dfm, select=-"열이름")

열이름 변경

colnames(dfm) <- newcolname

NA 행 삭제

df <- na.omit(dfm)

데이터프레임
합치기

cbind_dfm <- cbind(dfm1, dfm2)

rbind_dfm <- rbind(dfm1, dfm2)

 

• 데이터 구조 및 자료형 변환

기능

R 코드

자료형 변환

as.character( )

as.integer( )

구조 변환

as.data.frame( )
as.list( )
as.matrix( )

 

• 데이터 구조 변경

기능

R 코드

벡터 → 리스트

as.list(vector)

벡터 → 행렬

1열짜리 행렬:

cbind(vector) 또는

as.matrix(vector)

 

1행짜리 행렬: rbind(vector)

n * m 행렬: matrix(vector, n, m)

벡터 →
데이터프레임

1열짜리 데이터프레임:

as.data.frame(vector)

 

1행짜리 데이터프레임:

as.data.frame(rbind(vector))

리스트 → 벡터

unlist(list)

리스트 → 행렬

1열짜리 행렬: as.matrix(list)

1행짜리 행렬: as.matrix(rbind(list))

n * m 행렬: matrix(list, n, m)

리스트 →
데이터프레임

리스트 원소들이 데이터의 열이면:

as.data.frame(list)

 

리스트 원소들이 데이터의 행이면:

rbind(list[[1]], list[[2]])

행렬 → 벡터

as.vector(matrix)

행렬 → 리스트

as.list(matrix)

행렬 →
데이터프레임

as.data.frame(matrix)

데이터프레임 → 벡터

1열짜리 데이터프레임:

dfm[[1]] 또는 dfm[, 1]

 

1행짜리 데이터프레임:

dfm[1, ]

데이터프레임 → 리스트

as.list(dfm)

데이터프레임
→ 행렬

as.matrix(dfm)

 

• 벡터의 기본 연산

기능

R 코드

벡터 연산

벡터1 + 벡터2

벡터1 - 벡터2

벡터1 * 벡터2

벡터1 ^ 벡터2

함수 적용

sapply(벡터, 연산함수)

파일저장

write.csv(변수이름, "파일이름")

save(변수이름, file=".RData")

파일읽기

read.csv("파일이름")

load("파일.R")

source("파일.R")

데이터 삭제

rm(변수)

rm(list=ls())

 

제5절 데이터 변형

기능

R 코드

요인으로
집단정의

v <- c(24, 23, 52)

w <- c(87, 86, 92)

f <- factor(c("A", "B", "C")

벡터를 여러
집단으로 분할

groups <- split(v, f)

groups <- split(w, f)

groups <- unstack(data.frame(v, f))

데이터프레임을
여러 집단으로
분할

sp <- split(Car93$MPG.city, Cars93$Origin)

리스트의 각
원소에 함수 적용

lapply(결과를  리스트로 반환)

list <- lapply(list, func)

 

sapply(결과를 벡터 또는 행렬로 반환)

vec <- sapply(list, func)

행렬에 함수 적용

m <- apply(mat, 1, func)

m <- apply(mat, 2, func)

데이터프레임에
함수 적용

dfm <- lapply(dfm, func)

dfm <- sapply(dfm, func)

dfm <- apply(dfm, func): 데이터프레임이 동질적인 경우만(모두 문자 or 숫자) 활용 가능.

데이터프레임을 행렬로 변환 후 함수 적용

대용량 데이터에 함수 적용

cors <- sapply(dfm, cor, y=targetVariable)

mask <- (rank(-abs(cors)) <= 10)

best.pred <- dfm[, mask]

lm(targetVariable ~ bes.pred)

집단별 함수 적용

tapply(vec, factor, func)

병렬 벡터,
리스트 함수 적용

mapply(factor, v1, …, vk)

mapply(factor, list1, …, list k)

 

• 문자열, 날짜 다루기

기능

R 코드

문자열 길이

nchar("단어")

문자열 연결

paste("word1", "word2", sep="-")

부분 문자열 추출

substr("statistics", 1, 4)

구분자로 문자열 추출

strsplit(문자열, 구분자)

하위 문자열 대체

sub(old, new, string)

gsub(old, new, string)

쌍별 조합

mat <- outer(문자열1, 문자열2, paste, sep="")

현재 날짜 반환

Sys.Date( )

날짜 객체로 변환

as.Date( )

format(Sys.Date(), format=%m%d%y)

날짜 조회

format(Sys.Date(), "%a") 요일

format(Sys.Date(), "%b") 월

format(Sys.Date(), "%B") 월

 

format(Sys.Date(), "%d") 일

format(Sys.Date(), "%m") 월

format(Sys.Date(),"%y") 연도

format(Sys.Date(), "%Y") 연도

날짜 일부 추출

d <- as.Date("2014-12-25")

p <- as.POSIXlt(d)

p$yday

start <- as.Date("2014-12-01")

end <- as.Date("2014-12-25")

seq(from=start, to=end, by=1)

 

제3장 데이터 마트

제1절 데이터 변경 및 요약

• 데이터 마트(Data Mart)

- 데이터 웨어하우스(DW)와 사용자 사이의 중간층에 위치한 것으로, 하나의 주제 또는 하나의 부서 중심의 데이터 웨어하우스라고 할 수 있다.

- 데이터 마트 내 대부분의 데이터는 DW로부터 복제되지만, 자체적으로 수집될 수도 있으며, 관계형 DB나 다차원 DB를 이용하여 구축한다.

- 동일한 데이터 셋을 활용할 경우 최신 분석기법들을 이용하면 분석가의 역량에서는 분석 효과가 크게 차이가 나지 않는다.

- 데이터 마트를 어떻게 구축하느냐에 따라 분석 효과는 크게 차이난다.

 

• 요약변수

- 수집된 정보를 분석에 맞게 종합한 변수

- 많은 모델에서 공통적으로 사용될 수 있어 재활용성이 높다.

- 합계, 횟수와 같이 간단한 구조이므로 자동화하여 상황에 맞게 또는 일반적인 자동화 프로그램으로 구축이 가능

- 연속형 변수를 범주화하여 사용해도 좋다.

 

• 파생변수

- 사용자가 특정 조건을 만족하거나 특정 함수에 의해 값을 만들어 의미를 부여한 변수이다.

- 매우 주관적일 수 있으므로 논리적 타당성을 갖추어 개발해야 한다.

- 파생변수는 특정 상황에만 유의미하지 않도록 대표성을 띄게 생성해야 한다.

 

• plyr을 이용한 데이터 분석

- plyr은 apply 함수에 기반해 데이터와 출력변수를 동시에 배열로 치환하여 처리하는 패키지

- split-apply-combine: 데이터를 분리하고 처리한 다음 다시 결합하는 등 필수적인 데이터 처리기능을 제공한다.

 

• data.table을 이용한 데이터 분석

- data.table은 큰 데이터를 탐색, 연산, 병합하는 데 아주 유용하다.

· 기존 data frame 방식보다 월등히 빠른 속도

- 특정 column을 key 값으로 색인을 지정한 후 데이터를 처리한다.

- 빠른 grouping과 ordering, 짧은 문장 지원 측면에서 데이터프레임보다 유용하다.

 

제2절 데이터 가공

• Data Exploration

- 데이터 분석을 위해 구성된 데이터의 상태를 파악한다. head( ), summary( )

 

• 변수 중요도

- 모형을 생성하여 사용된 변수의 중요도를 살피는 과정이다.

 

• 변수의 구간화

- 신용평가모형, 고객 세분화 등 시스템으로 모형을 적용하기 위해서는 각 변수들을 구간화해서 구간별로 점수를 적용할 수 있어야 한다.

- bining: 연속형 변수를 범주형 변수로 변형하는 방식. 각각 동일한 개수의 레코드를 50개 이하의 구간에 데이터를 할당하여 구간들을 병합하면서 구간을 줄여나가는 방식의 구간화 방법이다.

 

제3절 기초 분석 및 데이터 관리

• EDA(Exploratory Data Analysis)

- 데이터 분석에 앞서 전체적으로 데이터의 특징을 파악하고 데이터를 다양한 각도로 접근한다.

 

• 결측값(Missing value)

- 결측값 자체가 의미있는 경우도 있다.

- 결측값이나 이상값을 꼭 제거해야 하는 것은 아니기 때문에 분석의 목적이나 종류에 따라 적절한 판단이 필요

 

• 결측값 처리 방법(Imputation)

· 단순 대치법(Simple imputation)

- completes analysis: 결측값이 존재하는 레코드를 삭제한다

- mean imputation: 관측 또는 실험을 통해 얻어진 데이터의 평균으로 대치한다.

 1) 비조건부 평균 대치법: 관측 데이터의 평균

 2) 조건부 평균 대치법: 회귀분석을 활용

 

· single stochastic imputation: 평균 대치법에서 추정량 표준 오차의 과소 추정문제를 보완하고자 고안된 방법으로 Hot-deck, nearest-neighbour 방법 등이 있다.

 

· 다중 대치법(Multiple imputation)

- 단순 대치법을 한 번 적용하지 않고 m번의 대치를 통해 m개의 가상적 완전 자료를 생성

 

• R에서 결측값 처리

· 랜덤포레스트는 결측값이 존재할 경우, 에러 발생: randomForest 패키지의 rfImpute() 함수를 활용하여 결측값을 대치한 후 알고리즘에 적용

· complete.cases(): 데이터 내 레코드에 결측값이 있으면 FALSE, 없으면 TRUE 반환

· is.na(): 결측값이 NA인지 여부를 반환

· DMwR::centralImputation(): NA 값에 가운데 값(central value)으로 대치. 연속형 변수 - 중위값, 범주형 변수 - 최빈값

· DMwR::knnImputation(): NA 값을 knn 알고리즘을 사용하여 대치. k개 주변 이웃까지의 거리를 고려하여 가중 평균한 값을 사용

 

• 이상값(Outlier)

- 의도하지 않게 잘못 입력한 경우

- 의도하지 않게 입력되었으나 분석 목적에 부합되지 않아 제거해야 하는 경우

- 의도하지 않은 현상이지만 분석에 포함해야 하는 경우

- 의도된 불량(fraud)인 경우

 

• 이상값 탐지(detection)

- ESD(Extreme Studentized Deviation): 평균으로부터 3 표준편차 떨어진 값

- (기하평균 - 2.5 * 표준편차 < data < 기하평균 + 2.5 * 표준편차)의 범위를 벗어나는 값

- (-1.5 * IQR(Q3-Q1) < data < 1.5 * IQR)의 범위를 벗어나는 값

 

• 극단값 절단(trimming)

- 기하평균을 이용한 제거

- 상, 하위 5%에 해당되는 데이터 제거

 

• 극단값 조정(winsorizing)

- 상한값과 하한값을 벗어나는 값들을 상한, 하한값으로 바꾸어 활용하는 방법