📊 시간 시리즈 데이터에서 이상치 탐지하기

R 예제

중급 난이도
예제 타입
10/26 등록일

시간 시리즈 데이터에서 이상치 탐지하기

중급
태그
예제 실습 프로젝트 데이터분석 시계열분석 이상치탐지 시각화
## 프로젝트 개요
실제 데이터에서 시간 기반 이상치를 자동으로 감지하여 비정상적인 패턴을 식별하는 분석 툴입니다. 주로 재무 데이터, 공장 운영 로그 등에 적용 가능합니다.

## 주요 기능
- CSV 파일에서 시간 시리즈 데이터 로드
- 이상치 자동 탐지 알고리즘 실행
- 결과 시각화 및 저장 기능
- 오류 발생 시 명확한 에러 메시지 제공

## 사용 방법
1. 예제 데이터(csv)를 동일 폴더에 위치시킵니다.
2. R 스크립트 파일을 열고 F5 키로 실행합니다.
3. 결과는 'anomalies_plot.png' 파일로 저장됩니다.

## 확장 가능성
- 추가적인 이상치 탐지 알고리즘(예: Isolation Forest) 구현
- 실시간 데이터 스트림 처리 기능 추가
- 다양한 시각화 옵션 확대
코드 예제
# 시간 시리즈 이상치 탐지 예제
library(tidyverse)
library(forecast)
library(ggplot2)
library(tsoutliers)

# 오류 처리 함수
tryCatchBlock <- function(expr) {
  tryCatch(
    expr,
    error = function(e) {
      message <- paste0("오류 발생: ", e$message)
      cat(message, '
')
      return(NULL)
    }
  )
}

# 데이터 로드 함수
load_data <- function(file_path) {
  tryCatchBlock({
    data <- read_csv(file_path)
    if (!any(names(data) %in% c("date", "value"))) {
      stop("필수 컬럼(date, value)이 누락되었습니다.")
    }
    data$date <- as.Date(data$date)
    return(data)
  })
}

# 이상치 탐지 함수
detect_anomalies <- function(data) {
  tryCatchBlock({
    ts_data <- ts(data$value, frequency = 12)
    model <- tslm(ts_data ~ 1)
    outliers <- tsoutliers(ts_data, type = c("A","LS","AO","L"), 
                           max.iter = 50, quiet = TRUE)
    return(outliers$poisson)
  })
}

# 주요 실행 로직
tryCatchBlock({
  # 데이터 로드
  data <- load_data("sample_time_series.csv")

  # 이상치 탐지
  anomalies <- detect_anomalies(data)

  # 시각화
  plot_data <- data %>% 
    mutate(anomaly = ifelse(date %in% anomalies$date, "anomaly", "normal"))

  ggplot(plot_data, aes(x = date, y = value, color = anomaly)) +
    geom_line() +
    labs(title = "시간 시리즈 이상치 탐지 결과") +
    theme_minimal()

  # 결과 저장
  ggsave("anomalies_plot.png", plot = last_plot(), width = 10, height = 6)
})
등록일: 2025년 10월 26일 02:36
언어 정보
언어
R
카테고리
Data
인기도
#13
학습 팁
코드를 직접 실행해보세요
변수를 바꿔가며 실험해보세요
오류가 나도 포기하지 마세요
다른 예제도 찾아보세요