
إطار عمل Python متكامل لذكاء السلاسل الزمنية، يوفر كشف الشذوذ، والتنبؤ، وكشف نقاط التغيير، وAutoML، والنماذج المجمعة، وخطوط أنابيب المقارنة المعيارية.
Merlion هي مكتبة بايثون لذكاء السلاسل الزمنية. وهي توفر إطار عمل تعلم آلي متكامل يتضمن تحميل البيانات وتحويلها، وبناء النماذج وتدريبها، ومعالجة مخرجات النماذج، وتقييم أداء النماذج. وهي تدعم مهام تعلم متنوعة للسلاسل الزمنية، بما في ذلك التنبؤ، وكشف الشذوذ، وكشف نقاط التغيير لكل من السلاسل الزمنية أحادية المتغير ومتعددة المتغيرات. تهدف هذه المكتبة إلى تزويد المهندسين والباحثين بحل متكامل للتطوير السريع للنماذج وفقًا لاحتياجاتهم الخاصة بالسلاسل الزمنية، وتقييمها عبر مجموعات بيانات متعددة للسلاسل الزمنية.
الميزات الرئيسية لـ Merlion هي
DefaultDetector و DefaultForecaster مجردان يتسمان بالكفاءة ويحققان أداءً جيدًا بشكل متين،
ويشكلان نقطة انطلاق للمستخدمين الجدد.يعطي الجدول أدناه نظرة عامة مرئية حول كيفية مقارنة الميزات الرئيسية لـ Merlion بالمكتبات الأخرى الخاصة بكشف شذوذ السلاسل الزمنية و/أو التنبؤ بها.
الميزات التالية جديدة في Merlion 2.0:
تتكون Merlion من مستودعين فرعيين: merlion ينفذ ميزات ذكاء السلاسل الزمنية الأساسية للمكتبة،
وts_datasets يوفر محمّلات بيانات موحدة لمجموعات بيانات متعددة للسلاسل الزمنية. تقوم هذه المحمّلات بتحميل
السلاسل الزمنية كإطارات pandas.DataFrame مع بيانات وصفية مصاحبة.
يمكنك تثبيت merlion من PyPI عن طريق استدعاء pip install salesforce-merlion. يمكنك التثبيت من المصدر عن طريق
استنساخ هذا المستودع واستدعاء pip install Merlion/، أو pip install -e Merlion/ للتثبيت في الوضع القابل للتحرير.
يمكنك تثبيت تبعيات إضافية عبر pip install salesforce-merlion[all]، أو عن طريق استدعاء
pip install "Merlion/[all]" إذا كنت تثبّت من المصدر.
بشكل منفرد، تشمل التبعيات الاختيارية: dashboard للوحة تحكم رسومية،
وspark لواجهة خلفية حوسبة موزعة باستخدام PySpark، وdeep-learning لجميع نماذج التعلم العميق.
لتثبيت حزمة تحميل البيانات ts_datasets، استنسخ هذا المستودع واستدعِ pip install -e Merlion/ts_datasets/.
يجب تثبيت هذه الحزمة في الوضع القابل للتحرير (أي باستخدام علامة -e) إذا كنت لا تريد تحديد المجلد الجذري
لكل مجموعة بيانات يدويًا عند تهيئة محمّل البيانات الخاص بها.
لاحظ التبعيات الخارجية التالية:
تعتمد بعض نماذج التنبؤ لدينا على OpenMP. إذا كنت تستخدم conda، فيرجى تنفيذ conda install -c conda-forge lightgbm
قبل تثبيت حزمتنا. سيضمن ذلك تكوين OpenMP ليعمل مع حزمة lightgbm
(أحد تبعياتنا) في بيئة conda الخاصة بك. إذا كنت تستخدم Mac، فيرجى تثبيت Homebrew
واستدعاء brew install libomp بحيث تكون مكتبة OpenMP متاحة للنموذج.
تعتمد بعض نماذج كشف الشذوذ لدينا على مجموعة أدوات تطوير جافا (JDK). بالنسبة لأوبونتو، استدعِ
sudo apt-get install openjdk-11-jdk. بالنسبة لنظام Mac OS، ثبّت Homebrew واستدعِ
brew tap adoptopenjdk/openjdk && brew install --cask adoptopenjdk11. وتأكد أيضًا من إمكانية العثور على java
في PATH الخاص بك، ومن تعيين متغير البيئة JAVA_HOME.
للحصول على أمثلة للتعليمات البرمجية ومقدمة عن Merlion، راجع دفاتر Jupyter في
examples، والدليل الموجّه
هنا. يمكنك العثور على توثيق مفصل لواجهة برمجة التطبيقات
(بما في ذلك مثال للتعليمات البرمجية) هنا. يوضح
التقرير الفني البنية العامة لـ Merlion
ويعرض نتائج تجريبية حول كشف شذوذ السلاسل الزمنية والتنبؤ بها لكل من السلاسل الزمنية أحادية المتغير ومتعددة
المتغيرات.
أسهل طريقة لبدء الاستخدام هي استخدام لوحة التحكم
الرسومية المستندة إلى الويب.
توفر هذه اللوحة طريقة رائعة للتجربة السريعة مع العديد من النماذج على مجموعات البيانات المخصصة الخاصة بك.
لاستخدامها، ثبّت Merlion مع التبعية الاختيارية dashboard (أي
pip install salesforce-merlion[dashboard])، واستدعِ python -m merlion.dashboard من سطر الأوامر.
يمكنك عرض اللوحة على http://localhost:8050.
أدناه، نعرض بعض لقطات الشاشة للوحة التحكم لكل من كشف الشذوذ والتنبؤ.


لمساعدتك في البدء باستخدام Merlion في التعليمات البرمجية الخاصة بك، نقدم أدناه بعض الأمثلة البسيطة باستخدام نماذج Merlion الافتراضية لكل من كشف الشذوذ والتنبؤ.
هنا، نعرض التعليمات البرمجية لتكرار النتائج من لوحة تحكم كشف الشذوذ أعلاه.
نبدأ باستيراد فئة TimeSeries الخاصة بـ Merlion ومحمّل البيانات لمعيار Numenta Anomaly Benchmark NAB.
يمكننا بعد ذلك تقسيم سلسلة زمنية معينة من مجموعة البيانات هذه إلى أجزاء تدريب واختبار.
from merlion.utils import TimeSeries
from ts_datasets.anomaly import NAB
# Data loader returns pandas DataFrames, which we convert to 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])
يمكننا بعد ذلك تهيئة وتدريب DefaultDetector الخاص بـ Merlion، وهو نموذج لكشف الشذوذ
يوازن بين الأداء والكفاءة. كما نحصل على تنبؤاته على جزء الاختبار.
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)
بعد ذلك، نعرض تنبؤات النموذج.
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()

أخيرًا، يمكننا تقييم النموذج كميًا. تأتي الدقة والاستدعاء من حقيقة أن النموذج أطلق 3 إنذارات، مع إيجابيتين حقيقيتين، وسلبية كاذبة واحدة، وإيجابية كاذبة واحدة. نقوم أيضًا بتقييم متوسط الوقت الذي استغرقه النموذج لاكتشاف كل شذوذ اكتشفه بشكل صحيح.
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}")
Precision: 0.6667, Recall: 0.6667, F1: 0.6667
Mean Time To Detect: 1 days 10:22:30
هنا، نعرض التعليمات البرمجية لتكرار النتائج من لوحة تحكم التنبؤ أعلاه.
نبدأ باستيراد فئة TimeSeries الخاصة بـ Merlion ومحمّل البيانات لمجموعة البيانات M4. يمكننا بعد ذلك تقسيم
سلسلة زمنية معينة من مجموعة البيانات هذه إلى أجزاء تدريب واختبار.
from merlion.utils import TimeSeries
from ts_datasets.forecast import M4
# Data loader returns pandas DataFrames, which we convert to 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])
يمكننا بعد ذلك تهيئة وتدريب DefaultForecaster الخاص بـ Merlion، وهو نموذج تنبؤ يوازن بين
الأداء والكفاءة. كما نحصل على تنبؤاته على جزء الاختبار.
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)
بعد ذلك، نعرض تنبؤات النموذج.
import matplotlib.pyplot as plt
fig, ax = model.plot_forecast(time_series=test_data, plot_forecast_uncertainty=True)
plt.show()

أخيرًا، نقوم بتقييم النموذج كميًا. يقيس sMAPE خطأ التنبؤ على مقياس من 0 إلى 100 (الأقل أفضل)، بينما يقيم MSIS جودة نطاق الثقة 95% على مقياس من 0 إلى 100 (الأقل أفضل).
# Evaluate the model's predictions quantitatively
from scipy.stats import norm
from merlion.evaluate.forecast import ForecastMetric
# Compute the sMAPE of the predictions (0 to 100, smaller is better)
smape = ForecastMetric.sMAPE.value(ground_truth=test_data, predict=test_pred)
# Compute the MSIS of the model's 95% confidence interval (0 to 100, smaller is better)
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}")
sMAPE: 4.1944, MSIS: 18.9331
إحدى الميزات الرئيسية لـ Merlion هي خط أنابيب التقييم الذي يحاكي النشر المباشر لنموذج على البيانات التاريخية. يتيح لك ذلك مقارنة النماذج على مجموعات البيانات ذات الصلة بها، تحت الظروف التي قد تواجهها في بيئة الإنتاج. تسير عملية التقييم لدينا على النحو التالي:
نقدم نصوصًا برمجية تسمح لك باستخدام هذا الخط لتقييم نماذج عشوائية على مجموعات بيانات عشوائية. على سبيل المثال، استدعاء
python benchmark_anomaly.py --dataset NAB_realAWSCloudwatch --model IsolationForest --retrain_freq 1d
سيقوم بتقييم أداء كشف الشذوذ لنموذج IsolationForest (الذي يُعاد تدريبه مرة واحدة يوميًا) على المجموعة
الفرعية "realAWSCloudwatch" من مجموعة بيانات NAB. وبالمثل، استدعاء
python benchmark_forecast.py --dataset M4_Hourly --model ETS
سيقوم بتقييم أداء التنبؤ الدفعي (أي بدون إعادة تدريب) لنموذج ETS على المجموعة الفرعية "Hourly" من مجموعة بيانات M4.
يمكنك العثور على النتائج التي تم إنتاجها عن طريق تشغيل هذه البرامج النصية في قسم التجارب في
التقرير الفني.
يمكنك العثور على مزيد من التفاصيل في تقريرنا الفني: https://arxiv.org/abs/2109.09265
إذا كنت تستخدم Merlion في أبحاثك أو تطبيقاتك، فيرجى الاستشهاد باستخدام BibTeX هذا:
@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}
}
نحن نسعى جاهدين للاستفادة من نمذجة السلاسل الزمنية باستخدام وحدات معالجة الرسوميات (GPUs) لزيادة تحسين سرعة وإنتاجية Merlion. ترقبوا المزيد ...
| Merlion | Prophet | Alibi Detect | Kats | darts | statsmodels | nixtla | GluonTS | RRCF | STUMPY | Greykite | pmdarima |
|---|
| التنبؤ أحادي المتغير | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||
| التنبؤ متعدد المتغيرات | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ||||||
| كشف الشذوذ أحادي المتغير | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |||
| كشف الشذوذ متعدد المتغيرات | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ||||||
| المعالجة المسبقة | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ||||
| المعالجة اللاحقة | ✅ | ✅ | ||||||||||
| AutoML | ✅ | ✅ | ✅ | ✅ | ||||||||
| التجميعات | ✅ | ✅ | ✅ | ✅ | ||||||||
| القياس المعياري | ✅ | ✅ | ✅ | ✅ | ✅ | |||||||
| التصور | ✅ | ✅ | ✅ | ✅ | ✅ |
| Merlion | Prophet | Alibi Detect | Kats | darts | statsmodels | nixtla | GluonTS | RRCF | STUMPY | Greykite | pmdarima |
|---|
| المتغيرات الخارجية | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ||||||
| كشف نقاط التغيير | ✅ | ✅ | ✅ | ✅ | ✅ | |||||||
| واجهة مستخدم مرئية قابلة للنقر | ✅ | |||||||||||
| الواجهة الخلفية الموزعة | ✅ | ✅ |