본문 바로가기

데이터 기본

데이터 변환: 정규화, 표준화 및 집계 기술

데이터 변환

 

데이터 분석에서 데이터의 특성을 조정하거나 변환하는 것은 매우 중요한 일이다. 단순한 분석 작업의 경우, 있는 데이터를 그대로 쓰면 된다. 하지만 데이터의 양이 늘어나고 복잡해질수록 있는 데이터를 그대로 쓰면 인사이트를 얻기 어려울 수 있다. 그럴 때 사용할 수 있는 게 주어진 데이터를 왜곡이 발생시키지 않는 범위 내에서 적절하게 변환시켜 주는 방법이다. 이러한 데이터 변환 기술은 데이터의 품질을 향상하고 분석 결과를 개선하는 데 도움이 된다. 이번 글에서는 데이터 변환의 세 가지 기술인 정규화, 표준화 및 집계에 대해 알아보려고 한다. 얼마 전에 알아본 '데이터 정제: 중복 제거, 누락 값 처리, 이상 값 처리 기술'과 마찬가지로 개념을 잡기 위한 얕게 다뤄보려 한다.

 

정규화 (Normalization)


정규화는 데이터의 범위를 특정 값 또는 범위로 조정하는 기술이다. 제 각각인 데이터값들을 특정한 범위로 구겨 넣듯이 모양을 변화시켜 주는 것이다. 이렇게 할 경우 데이터의 단위가 다른 여러 종류의 데이터도 비교하고 분석하기 쉬워진다. 가장 대표적인 방법은 데이터의 값을 0과 1 사이의 범위로 조정하여 데이터의 상대적인 크기를 비교하는 것이다. 

굳이 왜 이렇게 범위를 조정할까? 이는 다양한 분석 알고리즘에서 데이터의 스케일을 맞추는데 도움이 되기 때문이다. 예를 들어, 로지스틱 회귀 분석이나 신경망 모델과 같은 알고리즘에서는 입력 데이터의 범위가 일정하고 작아야 한다. 특히, 그 범위를 0에서 1 사이로 맞춘다. 이렇게 하면 모델이 더 빠르고 정확하게 결괏값에 수렴할 수 있다.

[예시 1 - 정규화, Normalization]

주가 데이터를 0과 1 사이의 값으로 정규화한다고 가정해 보자. 그 다음 단계인 분석 알고리즘에 넣는 것은 다른 글에서 보고, 우선 가장 간단하게 정규화하는 방법만을 보면 아래와 같다. 

# 데이터 생성
stock_prices <- data.frame(
  stock_id = c(1, 2, 3, 4),
  price = c(100, 150, 200, 250)
)

# 데이터 정규화
normalized_stock_prices <- (stock_prices$price - min(stock_prices$price)) / (max(stock_prices$price) - min(stock_prices$price))

 


표준화 (Standardization)

표준화는 데이터의 평균을 0으로, 표준 편차를 1로 만드는 기술이다. 이를 통해 데이터의 분포를 조정하고 이상치에 민감하지 않게 만들어 준다. 표준화는 주로 회귀 분석이나 클러스터링과 같은 알고리즘에 사용된다.

예를 들어, 신장과 몸무게 데이터를 회귀 분석 모델에 적용할 때, 데이터를 표준화하여 각 변수의 중요도를 균등하게 만들어 모델의 예측 성능을 향상시킬 수 있다. 또한, 여러 지역의 온도 데이터를 분석할 때, 온도 데이터를 표준화하여 각 지역의 온도를 동일한 척도로 비교할 수도 있다.

[예시 2 - 표준화, Standardization]

위에서 언급한 신장과 몸무게 데이터에 대해 서로의 크기를 비슷하게 맞추어 보자. 회귀 분석 공부를 하다보면 가장 흔하게 나오는 예가, 샘플로 몇 명의 신장과 몸무게를 주고, 특정 신장 또는 특정 몸무게만 주어줬을 때 주어지지 않은 다른 값을 예측하는 문제이다. 그러한 회귀 분석을 하기 전에 필수적으로 하는 과정이니 참고로 알아보자.

# 데이터 생성
height_weight_data <- data.frame(
  height = c(160, 165, 170, 175),
  weight = c(50, 55, 60, 65)
)

# 데이터 표준화
standardized_data <- scale(height_weight_data)

 


집계 (Aggregation)

데이터 집계는 데이터를 요약하거나 그룹화하는 기술이다. 분석할 데이터의 크기가 클 때, 데이터의 크기를 줄이고 분석작업을 간소화하는 데 도움이 된다. 이러한 집계를 위해서는 보통 평균, 합계, 카운트 등의 함수가 사용된다.

예를 들어, 매출 데이터를 분석할 때, 각 제품 카테고리별로 매출을 합산하여 각 카테고리의 총 매출을 파악할 수 있다. 이를 통해 각 제품 카테고리의 매출 기여도를 파악하고 비즈니스 전략을 수립할 수 있다. 또한, 고객 데이터를 분석할 때, 각 지역별로 고객 수를 카운트하여 지역별 고객 수를 파악할 수도 있다.

[예시 3 - 집계, Aggregation]

마찬가지로 위에서 언급한대로, 제품을 카테고리화해서 매출 데이터 분석하는 예를 들어보자. 각 카테고리는 구분이 되었다고 가정하면, 카테고리별 합계를 아래와 같이 구해볼 수 있다.

# 데이터 생성
sales_data <- data.frame(
  category = c("A", "B", "A", "B"),
  revenue = c(1000, 1500, 1200, 1800)
)

# 데이터 집계
aggregated_sales <- aggregate(sales_data$revenue,
	by = list(sales_data$category), 
    FUN = sum)


결론


데이터 변환 기술은 데이터 분석을 성공적으로 하기 위해 매우 중요한 기술이다. 이번 글에서는 개념을 잡기 위해 복잡한 설명을 모두 뺐다. 그래서 너무 단순하고 쉬워 보일 수 도 있다. 하지만 실전에서는 데이터의 형태나 상황, 경영층이나 고객이 요구하는 내용에 따라 매우 복잡해질 수 있다. 어쨌든, 데이터 변환에는 대표적으로 정규화(Normalization), 표준화(Standardization), 집계(Aggregation) 등이 있다는 것을 알아 두자.