Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Merlion — 시계열 인텔리전스를 위한 엔드투엔드 Python 프레임워크로, 이상 탐지, 예측, 변경점 탐지, AutoML, 앙상블 및 벤치마킹 파이프라인을 제공합니다. | Kitploit
도구/GitHubGitHub/salesforce/merlion
Utilities & FrameworksMachine LearningAnomaly DetectionArchived
GitHubsalesforce/merlion

Merlion

시계열 인텔리전스를 위한 엔드투엔드 Python 프레임워크로, 이상 탐지, 예측, 변경점 탐지, AutoML, 앙상블 및 벤치마킹 파이프라인을 제공합니다.

저장소 보기
4.5k3585개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
Logo
Tests Coverage PyPI Version docs

Merlion: 시계열을 위한 머신러닝 라이브러리

목차

  1. 소개
  2. 관련 라이브러리와의 비교
  3. 설치
  4. 문서
  5. 시작하기
    1. 이상 탐지
    2. 예측
  6. 평가 및 벤치마킹
  7. 기술 보고서 및 Merlion 인용

소개

Merlion은 시계열 인텔리전스를 위한 Python 라이브러리입니다. 데이터 로딩 및 변환, 모델 구축 및 학습, 모델 출력 후처리, 모델 성능 평가를 포함하는 엔드투엔드 머신러닝 프레임워크를 제공합니다. 단변량 및 다변량 시계열 모두에 대해 예측, 이상 탐지, 변화점 탐지 등 다양한 시계열 학습 작업을 지원합니다. 이 라이브러리는 엔지니어와 연구자에게 특정 시계열 요구에 맞는 모델을 신속하게 개발하고 여러 시계열 데이터셋에서 벤치마킹할 수 있는 원스톱 솔루션을 제공하는 것을 목표로 합니다.

Merlion의 주요 기능은 다음과 같습니다.

  • 다양한 예측 및 이상 탐지 데이터셋에 대한 표준화되고 쉽게 확장 가능한 데이터 로딩 및 벤치마킹. 사용자 정의 데이터셋에 대한 투명한 지원을 포함합니다.
  • 이상 탐지, 예측, 변화점 탐지를 위한 다양한 모델 라이브러리로, 모두 공통 인터페이스로 통합되어 있습니다. 모델에는 고전적인 통계 방법, 트리 앙상블, 딥러닝 접근법이 포함됩니다. 고급 사용자는 각 모델을 원하는 대로 완전히 구성할 수 있습니다.
  • 효율적이고 강력한 성능을 안정적으로 달성하며 새 사용자에게 시작점을 제공하는 추상적인 DefaultDetector 및 DefaultForecaster 모델.
  • 자동 하이퍼파라미터 튜닝 및 모델 선택을 위한 AutoML.
  • 외생 변수(exogenous regressors)를 사용하여 다양한 모델로 예측할 수 있는 통합 API.
  • 이상 탐지기의 이상 점수를 더 해석 가능하게 만들고 오탐(false positive) 수도 줄여주는 실용적이고 산업에서 영감을 얻은 후처리 규칙.
  • 여러 모델의 출력을 결합하여 더 강력한 성능을 달성하는 사용하기 쉬운 앙상블.
  • 프로덕션에서 모델의 라이브 배포 및 재학습을 시뮬레이션하고 예측 및 이상 탐지 모두에서 성능을 평가하는 유연한 평가 파이프라인.
  • 클릭 가능한 시각적 UI를 포함한 모델 예측 시각화의 기본 지원.
  • PySpark를 사용하는 분산 컴퓨팅 백엔드로, 산업 규모의 시계열 애플리케이션을 제공하는 데 사용할 수 있습니다.

관련 라이브러리와의 비교

아래 표는 Merlion의 주요 기능이 시계열 이상 탐지 및/또는 예측을 위한 다른 라이브러리와 어떻게 비교되는지 시각적으로 보여줍니다.

다음 기능은 Merlion 2.0에서 새로 추가된 것입니다:

설치

Merlion은 두 개의 하위 저장소로 구성됩니다: merlion은 라이브러리의 핵심 시계열 인텔리전스 기능을 구현하고, ts_datasets는 여러 시계열 데이터셋에 대한 표준화된 데이터 로더를 제공합니다. 이러한 로더는 시계열을 메타데이터와 함께 pandas.DataFrame으로 로드합니다.

PyPI에서 pip install salesforce-merlion을 호출하여 merlion을 설치할 수 있습니다. 소스에서 설치하려면 이 저장소를 클론하고 pip install Merlion/을 호출하거나, 편집 가능한 모드로 설치하려면 pip install -e Merlion/을 호출하십시오. 추가 종속성은 pip install salesforce-merlion[all]을 통해 설치하거나, 소스에서 설치하는 경우 pip install "Merlion/[all]"을 호출하여 설치할 수 있습니다. 선택적 종속성에는 개별적으로 GUI 대시보드용 dashboard, PySpark를 사용한 분산 컴퓨팅 백엔드용 spark, 모든 딥러닝 모델용 deep-learning이 포함됩니다.

데이터 로딩 패키지 ts_datasets를 설치하려면 이 저장소를 클론하고 pip install -e Merlion/ts_datasets/을 호출하십시오. 데이터 로더를 초기화할 때 모든 데이터셋의 루트 디렉터리를 수동으로 지정하고 싶지 않다면 이 패키지를 편집 가능한 모드(즉, -e 플래그 포함)로 설치해야 합니다.

다음 외부 종속성에 유의하십시오:

  1. 일부 예측 모델은 OpenMP에 의존합니다. conda를 사용하는 경우 패키지를 설치하기 전에 conda install -c conda-forge lightgbm을 실행하십시오. 그러면 conda 환경에서 OpenMP가 (우리 종속성 중 하나인) lightgbm 패키지와 함께 작동하도록 구성됩니다. Mac을 사용하는 경우 Homebrew를 설치하고 brew install libomp를 호출하여 모델에서 OpenMP 라이브러리를 사용할 수 있도록 하십시오.

  2. 일부 이상 탐지 모델은 JDK(Java Development Kit)에 의존합니다. Ubuntu의 경우 sudo apt-get install openjdk-11-jdk를 호출하십시오. Mac OS의 경우 Homebrew를 설치하고 brew tap adoptopenjdk/openjdk && brew install --cask adoptopenjdk11을 호출하십시오. 또한 java가 PATH에서 찾을 수 있고 JAVA_HOME 환경 변수가 설정되어 있는지 확인하십시오.

문서

예제 코드와 Merlion 소개는 examples의 Jupyter 노트북과 여기의 안내형 둘러보기를 참조하십시오. 자세한 API 문서(예제 코드 포함)는 여기에서 찾을 수 있습니다. 기술 보고서는 Merlion의 전반적인 아키텍처를 설명하고 단변량 및 다변량 시계열에 대한 시계열 이상 탐지 및 예측의 실험 결과를 제시합니다.

시작하기

시작하는 가장 쉬운 방법은 GUI 웹 기반 대시보드를 사용하는 것입니다. 이 대시보드는 고유한 사용자 정의 데이터셋에서 많은 모델을 빠르게 실험할 수 있는 훌륭한 방법을 제공합니다. 사용하려면 선택적 dashboard 종속성을 사용하여 Merlion을 설치하고(즉, pip install salesforce-merlion[dashboard]), 명령줄에서 python -m merlion.dashboard을 호출하십시오. http://localhost:8050에서 대시보드를 볼 수 있습니다. 아래에는 이상 탐지와 예측 모두에 대한 대시보드 스크린샷을 보여줍니다.

anomaly dashboard

forecast dashboard

고유한 코드에서 Merlion 사용을 시작하는 데 도움이 되도록, 이상 탐지와 예측 모두에 대해 Merlion 기본 모델을 사용하는 몇 가지 최소한의 예제를 아래에 제공합니다.

이상 탐지

여기서는 위의 이상 탐지 대시보드의 결과를 재현하는 코드를 보여줍니다. Merlion의 TimeSeries 클래스와 Numenta Anomaly Benchmark NAB용 데이터 로더를 가져오는 것으로 시작합니다. 그런 다음 이 데이터셋의 특정 시계열을 학습 및 테스트 분할로 나눌 수 있습니다.

root@kitploit:~
from merlion.utils import TimeSeries
from ts_datasets.anomaly import NAB

# 데이터 로더는 pandas DataFrame을 반환하며, 이를 Merlion TimeSeries로 변환합니다
time_series, metadata = NAB(subset="realKnownCause")[3]
train_data = TimeSeries.from_pd(time_series[metadata.trainval])
test_data = TimeSeries.from_pd(time_series[~metadata.trainval])
test_labels = TimeSeries.from_pd(metadata.anomaly[~metadata.trainval])

그런 다음 Merlion의 DefaultDetector를 초기화하고 학습시킬 수 있습니다. 이는 성능과 효율성의 균형을 맞추는 이상 탐지 모델입니다. 또한 테스트 분할에 대한 예측을 얻습니다.

root@kitploit:~
from merlion.models.defaults import DefaultDetectorConfig, DefaultDetector
model = DefaultDetector(DefaultDetectorConfig())
model.train(train_data=train_data)
test_pred = model.get_anomaly_label(time_series=test_data)

다음으로 모델의 예측을 시각화합니다.

root@kitploit:~
from merlion.plot import plot_anoms
import matplotlib.pyplot as plt
fig, ax = model.plot_anomaly(time_series=test_data)
plot_anoms(ax=ax, anomaly_labels=test_labels)
plt.show()

anomaly figure

마지막으로 모델을 정량적으로 평가할 수 있습니다. 정밀도와 재현율은 모델이 3개의 알람을 발생시켰고, 그중 2개의 실제 양성(true positive), 1개의 실제 음성(false negative), 1개의 오탐(false positive)이 있었기 때문에 나온 값입니다. 또한 모델이 올바르게 탐지한 각 이상을 탐지하는 데 걸린 평균 시간도 평가합니다.

root@kitploit:~
from merlion.evaluate.anomaly import TSADMetric
p = TSADMetric.Precision.value(ground_truth=test_labels, predict=test_pred)
r = TSADMetric.Recall.value(ground_truth=test_labels, predict=test_pred)
f1 = TSADMetric.F1.value(ground_truth=test_labels, predict=test_pred)
mttd = TSADMetric.MeanTimeToDetect.value(ground_truth=test_labels, predict=test_pred)
print(f"Precision: {p:.4f}, Recall: {r:.4f}, F1: {f1:.4f}\n"
      f"Mean Time To Detect: {mttd}")
root@kitploit:~
Precision: 0.6667, Recall: 0.6667, F1: 0.6667
Mean Time To Detect: 1 days 10:22:30

예측

여기서는 위의 예측 대시보드의 결과를 재현하는 코드를 보여줍니다. Merlion의 TimeSeries 클래스와 M4 데이터셋용 데이터 로더를 가져오는 것으로 시작합니다. 그런 다음 이 데이터셋의 특정 시계열을 학습 및 테스트 분할로 나눌 수 있습니다.

root@kitploit:~
from merlion.utils import TimeSeries
from ts_datasets.forecast import M4

# 데이터 로더는 pandas DataFrame을 반환하며, 이를 Merlion TimeSeries로 변환합니다
time_series, metadata = M4(subset="Hourly")[0]
train_data = TimeSeries.from_pd(time_series[metadata.trainval])
test_data = TimeSeries.from_pd(time_series[~metadata.trainval])

그런 다음 Merlion의 DefaultForecaster를 초기화하고 학습시킬 수 있습니다. 이는 성능과 효율성의 균형을 맞추는 예측 모델입니다. 또한 테스트 분할에 대한 예측을 얻습니다.

root@kitploit:~
from merlion.models.defaults import DefaultForecasterConfig, DefaultForecaster
model = DefaultForecaster(DefaultForecasterConfig())
model.train(train_data=train_data)
test_pred, test_err = model.forecast(time_stamps=test_data.time_stamps)

다음으로 모델의 예측을 시각화합니다.

root@kitploit:~
import matplotlib.pyplot as plt
fig, ax = model.plot_forecast(time_series=test_data, plot_forecast_uncertainty=True)
plt.show()

forecast figure

마지막으로 모델을 정량적으로 평가합니다. sMAPE는 0에서 100까지의 척도로 예측의 오차를 측정하며(낮을수록 좋음), MSIS는 0에서 100까지의 척도로 95% 신뢰 구간의 품질을 평가합니다(낮을수록 좋음).

root@kitploit:~
# 모델의 예측을 정량적으로 평가합니다
from scipy.stats import norm
from merlion.evaluate.forecast import ForecastMetric

# 예측의 sMAPE를 계산합니다 (0~100, 작을수록 좋음)
smape = ForecastMetric.sMAPE.value(ground_truth=test_data, predict=test_pred)

# 모델의 95% 신뢰 구간의 MSIS를 계산합니다 (0~100, 작을수록 좋음)
lb = TimeSeries.from_pd(test_pred.to_pd() + norm.ppf(0.025) * test_err.to_pd().values)
ub = TimeSeries.from_pd(test_pred.to_pd() + norm.ppf(0.975) * test_err.to_pd().values)
msis = ForecastMetric.MSIS.value(ground_truth=test_data, predict=test_pred,
                                 insample=train_data, lb=lb, ub=ub)
print(f"sMAPE: {smape:.4f}, MSIS: {msis:.4f}")
root@kitploit:~
sMAPE: 4.1944, MSIS: 18.9331

평가 및 벤치마킹

Merlion의 주요 기능 중 하나는 과거 데이터에서 모델의 라이브 배포를 시뮬레이션하는 평가 파이프라인입니다. 이를 통해 프로덕션 환경에서 발생할 수 있는 조건에서 관련 데이터셋을 대상으로 모델을 비교할 수 있습니다. 우리의 평가 파이프라인은 다음과 같이 진행됩니다.

  1. 최근 과거 학습 데이터(시계열의 학습 분할로 지정)에서 초기 모델을 학습시킵니다.
  2. 정기적인 간격(예: 하루에 한 번)으로 가장 최근 데이터로 전체 모델을 재학습시킵니다. 이는 시계열의 전체 이력이거나 더 제한된 창(예: 4주)일 수 있습니다.
  3. 재학습 사이에 발생하는 시계열 값에 대한 모델의 예측(이상 점수 또는 예측값)을 얻습니다. 이를 일괄 처리(모든 값을 한 번에 예측), 스트리밍(데이터 포인트마다 모델의 내부 상태를 완전히 재학습하지 않고 업데이트), 또는 그 중간 주기로 수행할지 사용자가 지정할 수 있습니다.
  4. 모델의 예측을 실제 값(이상 탐지의 경우 레이블된 이상, 예측의 경우 실제 시계열 값)과 비교하고 정량적 평가 지표를 보고합니다.

이 파이프라인을 사용하여 임의의 모델을 임의의 데이터셋에서 평가할 수 있는 스크립트를 제공합니다. 예를 들어,

root@kitploit:~
python benchmark_anomaly.py --dataset NAB_realAWSCloudwatch --model IsolationForest --retrain_freq 1d

를 호출하면 NAB 데이터셋의 "realAWSCloudwatch" 하위 집합에서 IsolationForest(하루에 한 번 재학습)의 이상 탐지 성능을 평가합니다. 마찬가지로,

root@kitploit:~
python benchmark_forecast.py --dataset M4_Hourly --model ETS

를 호출하면 M4 데이터셋의 "Hourly" 하위 집합에서 ETS의 일괄 예측 성능(즉, 재학습 없음)을 평가합니다. 이러한 스크립트를 실행하여 생성된 결과는 기술 보고서의 실험 섹션에서 확인할 수 있습니다.

기술 보고서 및 Merlion 인용

자세한 내용은 기술 보고서에서 확인할 수 있습니다: https://arxiv.org/abs/2109.09265

연구나 애플리케이션에서 Merlion을 사용하는 경우 다음 BibTeX를 사용하여 인용해 주십시오.

root@kitploit:~
@article{bhatnagar2021merlion,
      title={Merlion: A Machine Learning Library for Time Series},
      author={Aadyot Bhatnagar and Paul Kassianik and Chenghao Liu and Tian Lan and Wenzhuo Yang
              and Rowan Cassius and Doyen Sahoo and Devansh Arpit and Sri Subramanian and Gerald Woo
              and Amrita Saha and Arun Kumar Jagota and Gokulakrishnan Gopalakrishnan and Manpreet Singh
              and K C Krithika and Sukumar Maddineni and Daeki Cho and Bo Zong and Yingbo Zhou
              and Caiming Xiong and Silvio Savarese and Steven Hoi and Huan Wang},
      year={2021},
      eprint={2109.09265},
      archivePrefix={arXiv},
      primaryClass={cs.LG}
}

할 일

우리는 GPU를 활용한 시계열 모델링을 통해 Merlion의 속도와 처리량을 더욱 개선하기 위해 노력하고 있습니다. 계속 지켜봐 주세요 ...

도구 다운로드
MerlionProphetAlibi DetectKatsdartsstatsmodelsnixtlaGluonTSRRCFSTUMPYGreykitepmdarima
단변량 예측✅✅✅✅✅✅✅✅✅
다변량 예측✅✅✅✅✅✅
단변량 이상 탐지✅✅✅✅✅✅✅✅✅
다변량 이상 탐지✅✅✅✅✅✅
전처리✅✅✅✅✅✅✅✅
후처리✅✅
AutoML✅✅✅
앙상블✅✅✅✅
벤치마킹✅✅✅✅✅
시각화✅✅✅✅✅
MerlionProphetAlibi DetectKatsdartsstatsmodelsnixtlaGluonTSRRCFSTUMPYGreykitepmdarima
외생 변수✅✅✅✅✅✅
변화점 탐지✅✅✅✅✅
클릭 가능한 시각적 UI✅
분산 백엔드✅✅