К основному содержанию
скилл CX Codex

Time Series Analysis — скилл для Claude Code: анализ временных рядов

Скилл для разбора временных рядов: тренд, сезонность, автокорреляция и прогноз на Python. Пригодится, когда надо понять данные по продажам или трафику.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add aj-geddes/useful-ai-prompts --skill time-series-analysis -a claude-code
Открыть на GitHub

Что делает Time Series Analysis

Скилл разбирает данные, собранные во времени: находит тренд, сезонность, цикличность и автокорреляцию. Внутри — готовые приёмы декомпозиции, дифференцирования, моделей ARIMA и SARIMA, экспоненциального сглаживания. Агент получает рабочий код на Python, а не общие рассуждения о статистике.

Примеры в скилле опираются на pandas, numpy, matplotlib и statsmodels. Проверка стационарности идёт через тест Дики-Фуллера, дальше строятся ACF и PACF, подбирается порядок модели, считается прогноз с доверительным интервалом. Отдельно показано, как посчитать MAE, RMSE и MAPE, чтобы оценить качество прогноза.

Если в проекте нет statsmodels, код из скилла не запустится — это повод проверить окружение до того, как просить агента о прогнозе. Для нескольких рядов есть тест причинности Грейнджера, но он срабатывает не всегда и обёрнут в обработку исключений.

Какие задачи решает

  • разложить ряд на тренд, сезонность и остаток
  • проверить стационарность перед построением модели
  • подобрать порядок ARIMA по ACF и PACF
  • построить прогноз с доверительным интервалом
  • посчитать MAE, RMSE и MAPE для прогноза

Примеры запросов агенту

  • разложи этот ряд продаж на тренд и сезонность
  • проверь стационарность и подбери порядок ARIMA
  • построй прогноз на 30 шагов вперёд с доверительным интервалом

Как установить Time Series Analysis

1Через Skills CLI (Vercel)

npx skills add aj-geddes/useful-ai-prompts --skill time-series-analysis -a claude-code

2Вручную: положить файлы

~/.claude/skills/time-series-analysis/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/time-series-analysis/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора118

user-research-analysis Скилл для разбора интервью и опросов: вытаскивает темы, боли и цитаты, чтобы решения по дизайну опирались на данные. CX Codex +1 612установок data-encryption Скилл помогает настроить шифрование данных при хранении и передаче по стандартам AES-256-GCM, RSA и TLS. CX Codex +1 611установок vulnerability-scanning Скилл для поиска уязвимостей в зависимостях, коде, контейнерах и секретах. Пригодится перед деплоем и при аудитах безопасности. CX Codex +1 611установок api-authentication Скилл по аутентификации API: JWT, OAuth 2.0, API-ключи и работа с сессиями. Пригодится, когда закрываешь эндпоинты или делаешь вход в приложение. CX Codex +1 607установок refactor-legacy-code Помогает пошагово обновлять старый код без поломки логики. Пригодится при разборе техдолга и устаревших API. CX Codex +1 603установок performance-testing Скилл помогает агенту проектировать нагрузочные тесты и бенчмарки: замерять время отклика, пропускную способность и потребление ресурсов. CX Codex +1 603установок competitor-analysis Скилл для разбора конкурентной среды: сильные и слабые стороны, возможности и угрозы, матрица сравнения. Пригодится перед выбором позиционирования или цен. CX Codex +1 603установок security-testing Находит уязвимости в коде и зависимостях, проверяет защиту от SQL-инъекций, XSS и CSRF, а также настраивает DAST-сканирование через OWASP ZAP. CX Codex +1 601установок

Похожие

cloud-monitoring-list-time-series-request официальный google Скилл собирает запросы ListTimeSeries и агрегации для Cloud Monitoring. Пригодится, когда нужно подготовить фильтр, JSON или параметры графика. CX Codex 4 100установок cointegration-analysis agiprolabs Проверяет пары активов на коинтеграцию методами Engle-Granger, Johansen и Филлипса-Ульяриса, чтобы найти пары для статистического арбитража. CX Codex +1 455установок statsmodels davila7 Скилл для регрессий, GLM, временных рядов и проверки гипотез прямо в Claude. Пригодится, когда нужен вывод по коэффициентам, а не только предсказание. 97установок relsa-severity-assessment K-Dense-AI Скилл рассчитывает многомерный индекс RELSA и строит прогнозы тяжести по модели ARIMA для лабораторных животных. Подходит для отчётов по директиве 2010/63/EU и концепции 3Rs. CX Codex +1 874установок alphaear-predictor RKiding Скилл строит прогноз финансового ряда по модели Kronos и правит его с учётом новостей. Пригодится, если нужно оценить движение цены на несколько дней вперёд. CX Codex +1 584установок analytics-data-analysis Mindrally Задаёт агенту правила работы с pandas, matplotlib и seaborn: как чистить датасет, строить графики и оформлять Jupyter-ноутбук. CX Codex +1 1 100установок

Рядом в теме «Данные и базы»

Все скиллы по теме «Данные и базы» →

Вопросы о Time Series Analysis

Как установить Time Series Analysis в Claude?

Выполните npx skills add aj-geddes/useful-ai-prompts --skill time-series-analysis -a claude-code. Скилл появится в ~/.claude/skills/time-series-analysis/SKILL.md.

Что делает Time Series Analysis?

Помогает агенту анализировать временные ряды: декомпозиция, проверка стационарности, модели ARIMA и экспоненциальное сглаживание, прогноз с оценкой точности.

Что нужно для работы скилла?

Примеры написаны на Python с pandas, numpy, matplotlib и statsmodels. Без этих библиотек код из скилла не выполнится.

Исходный текст

SKILL.md · MIT
---
name: Time Series Analysis
description: Analyze temporal data patterns including trends, seasonality, autocorrelation, and forecasting for time series decomposition, trend analysis, and forecasting models
---

# Time Series Analysis

## Overview

Time series analysis examines data points collected over time to identify patterns, trends, and seasonality for forecasting and understanding temporal dynamics.

## When to Use

- Forecasting future values based on historical trends
- Detecting seasonality and cyclical patterns in data
- Analyzing trends over time in sales, stock prices, or website traffic
- Understanding autocorrelation and temporal dependencies
- Making time-based predictions with confidence intervals
- Decomposing data into trend, seasonal, and residual components

## Core Components

- **Trend**: Long-term directional movement
- **Seasonality**: Repeating patterns at fixed intervals
- **Cyclicity**: Long-term oscillations (non-fixed periods)
- **Stationarity**: Constant mean, variance over time
- **Autocorrelation**: Correlation with past values

## Key Techniques

- **Decomposition**: Separating trend, seasonal, residual components
- **Differencing**: Making data stationary
- **ARIMA**: AutoRegressive Integrated Moving Average models
- **Exponential Smoothing**: Weighted average of past values
- **SARIMA**: Seasonal ARIMA models

## Implementation with Python

```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.stattools import adfuller, acf, pacf
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.holtwinters import ExponentialSmoothing

# Create sample time series data
dates = pd.date_range('2020-01-01', periods=365, freq='D')
values = 100 + np.sin(np.arange(365) * 2*np.pi / 365) * 20 + np.random.normal(0, 5, 365)
ts = pd.Series(values, index=dates)

# Visualize time series
fig, axes = plt.subplots(2, 2, figsize=(14, 8))

axes[0, 0].plot(ts)
axes[0, 0].set_title('Original Time Series')
axes[0, 0].set_ylabel('Value')

# Decomposition
decomposition = seasonal_decompose(ts, model='additive', period=30)
axes[0, 1].plot(decomposition.trend)
axes[0, 1].set_title('Trend Component')

axes[1, 0].plot(decomposition.seasonal)
axes[1, 0].set_title('Seasonal Component')

axes[1, 1].plot(decomposition.resid)
axes[1, 1].set_title('Residual Component')

plt.tight_layout()
plt.show()

# Test for stationarity (Augmented Dickey-Fuller)
result = adfuller(ts)
print(f"ADF Test Statistic: {result[0]:.6f}")
print(f"P-value: {result[1]:.6f}")
print(f"Critical Values: {result[4]}")

if result[1] <= 0.05:
    print("Time series is stationary")
else:
    print("Time series is non-stationary - differencing needed")

# First differencing for stationarity
ts_diff = ts.diff().dropna()
result_diff = adfuller(ts_diff)
print(f"\nAfter differencing - ADF p-value: {result_diff[1]:.6f}")

# Autocorrelation and Partial Autocorrelation
fig, axes = plt.subplots(1, 2, figsize=(12, 4))

plot_acf(ts_diff, lags=40, ax=axes[0])
axes[0].set_title('ACF')

plot_pacf(ts_diff, lags=40, ax=axes[1])
axes[1].set_title('PACF')

plt.tight_layout()
plt.show()

# ARIMA Model
arima_model = ARIMA(ts, order=(1, 1, 1))
arima_result = arima_model.fit()
print(arima_result.summary())

# Forecast
forecast_steps = 30
forecast = arima_result.get_forecast(steps=forecast_steps)
forecast_df = forecast.conf_int()
forecast_mean = forecast.predicted_mean

# Plot forecast
fig, ax = plt.subplots(figsize=(12, 5))
ax.plot(ts.index[-90:], ts[-90:], label='Historical')
ax.plot(forecast_df.index, forecast_mean, label='Forecast', color='red')
ax.fill_between(
    forecast_df.index,
    forecast_df.iloc[:, 0],
    forecast_df.iloc[:, 1],
    color='red', alpha=0.2
)
ax.set_title('ARIMA Forecast with Confidence Interval')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

# Exponential Smoothing
exp_smooth = ExponentialSmoothing(
    ts, seasonal_periods=30, trend='add', seasonal='add', initialization_method='estimated'
)
exp_result = exp_smooth.fit()

# Model diagnostics
fig = exp_result.plot_diagnostics(figsize=(12, 8))
plt.tight_layout()
plt.show()

# Custom moving average analysis
window_sizes = [7, 30, 90]
fig, ax = plt.subplots(figsize=(12, 5))

ax.plot(ts.index, ts.values, label='Original', alpha=0.7)

for window in window_sizes:
    ma = ts.rolling(window=window).mean()
    ax.plot(ma.index, ma.values, label=f'MA({window})')

ax.set_title('Moving Averages')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

# Seasonal subseries plot
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
for i, month in enumerate(range(1, 5)):
    month_data = ts[ts.index.month == month]
    axes[i // 2, i % 2].plot(month_data.values)
    axes[i // 2, i % 2].set_title(f'Month {month} Pattern')

plt.tight_layout()
plt.show()

# Forecast accuracy metrics
def calculate_forecast_metrics(actual, predicted):
    mae = np.mean(np.abs(actual - predicted))
    rmse = np.sqrt(np.mean((actual - predicted) ** 2))
    mape = np.mean(np.abs((actual - predicted) / actual)) * 100
    return {'MAE': mae, 'RMSE': rmse, 'MAPE': mape}

metrics = calculate_forecast_metrics(ts[-30:], forecast_mean[:30])
print(f"\nForecast Metrics:\n{metrics}")

# Additional analysis techniques

# Step 10: Seasonal subseries plots
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
for i, season in enumerate([1, 2, 3, 4]):
    seasonal_ts = ts[ts.index.month % 4 == season % 4]
    axes[i // 2, i % 2].plot(seasonal_ts.values)
    axes[i // 2, i % 2].set_title(f'Season {season}')
plt.tight_layout()
plt.show()

# Step 11: Granger causality (for multiple series)
from statsmodels.tsa.stattools import grangercausalitytests

# Create another series for testing
ts2 = ts.shift(1).fillna(method='bfill')

try:
    print("\nGranger Causality Test:")
    print(f"Test whether ts2 Granger-causes ts:")
    gc_result = grangercausalitytests(np.column_stack([ts.values, ts2.values]), maxlag=3)
except Exception as e:
    print(f"Granger causality not performed: {str(e)[:50]}")

# Step 12: Autocorrelation and partial autocorrelation analysis
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

acf_values = acf(ts.dropna(), nlags=20)
pacf_values = pacf(ts.dropna(), nlags=20)

# Step 13: Seasonal strength
def seasonal_strength(series, seasonal_period=30):
    seasonal = seasonal_decompose(series, model='additive', period=seasonal_period)
    var_residual = np.var(seasonal.resid.dropna())
    var_seasonal = np.var(seasonal.seasonal)
    return 1 - (var_residual / (var_residual + var_seasonal)) if (var_residual + var_seasonal) > 0 else 0

ss = seasonal_strength(ts)
print(f"\nSeasonal Strength: {ss:.3f}")

# Step 14: Forecasting with uncertainty
fig, ax = plt.subplots(figsize=(12, 5))
ax.plot(ts.index[-60:], ts.values[-60:], label='Historical', linewidth=2)

# Multiple horizon forecasts
for steps_ahead in [10, 20, 30]:
    try:
        fc = arima_result.get_forecast(steps=steps_ahead)
        fc_mean = fc.predicted_mean
        ax.plot(pd.date_range(ts.index[-1], periods=steps_ahead+1)[1:],
               fc_mean.values, marker='o', label=f'Forecast (+{steps_ahead})')
    except:
        pass

ax.set_title('Multi-step Ahead Forecasts')
ax.set_xlabel('Date')
ax.set_ylabel('Value')
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

# Step 15: Model comparison summary
print("\nTime Series Analysis Complete!")
print(f"Original series length: {len(ts)}")
print(f"Trend strength: {1 - np.var(decomposition.resid.dropna()) / np.var((ts - ts.mean()).dropna()):.3f}")
print(f"Seasonal strength: {ss:.3f}")
```

## Stationarity

- **Stationary**: Mean, variance, autocorrelation constant over time
- **Non-stationary**: Trend or seasonal patterns present
- **Solution**: Differencing, log transformation, or detrending

## Model Selection

- **ARIMA**: Good for univariate forecasting
- **SARIMA**: Includes seasonal components
- **Exponential Smoothing**: Simpler, good for trends
- **Prophet**: Handles holidays and changepoints

## Evaluation Metrics

- **MAE**: Mean Absolute Error
- **RMSE**: Root Mean Squared Error
- **MAPE**: Mean Absolute Percentage Error

## Deliverables

- Decomposition analysis charts
- Stationarity test results
- ACF/PACF plots
- Fitted models with diagnostics
- Forecast with confidence intervals
- Accuracy metrics comparison

© aj-geddes · MIT · aj-geddes/useful-ai-prompts

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой