Українська

Розкрийте потенціал даних часових рядів за допомогою віконних функцій. Цей посібник охоплює ключові концепції, практичні приклади та передові методи аналізу даних.

Аналітика часових рядів: майстерне володіння віконними функціями для глибокого аналізу даних

Дані часових рядів, що характеризуються своєю послідовною та залежною від часу природою, поширені в багатьох галузях. Від відстеження цін на акції та моніторингу трафіку вебсайтів до аналізу показників датчиків та прогнозування тенденцій продажів — здатність отримувати значущі висновки з даних часових рядів є вирішальною для прийняття обґрунтованих рішень. Віконні функції надають потужний і гнучкий набір інструментів для виконання обчислень над набором рядків, пов'язаних із поточним рядком у таблиці або фреймі даних, що робить їх незамінними для аналізу часових рядів.

Розуміння даних часових рядів

Дані часових рядів — це послідовність точок даних, індексованих у хронологічному порядку. Точки даних можуть представляти різні метрики, такі як:

Аналіз даних часових рядів включає виявлення закономірностей, тенденцій та сезонності, які можна використовувати для прогнозування майбутніх значень, виявлення аномалій та оптимізації бізнес-процесів.

Вступ до віконних функцій

Віконні функції, також відомі як віконні агрегати або аналітичні функції, дозволяють виконувати обчислення над набором рядків, пов'язаних із поточним рядком, не групуючи рядки в єдиний результуючий набір, як це роблять традиційні агрегатні функції (наприклад, SUM, AVG, COUNT). Ця можливість особливо корисна для аналізу часових рядів, де часто потрібно обчислювати ковзні середні, кумулятивні суми та інші метрики на основі часу.

Віконна функція зазвичай складається з таких компонентів:

  1. Функція: обчислення, яке потрібно виконати (наприклад, AVG, SUM, RANK, LAG).
  2. Клауза OVER: визначає вікно рядків, що використовуються для обчислення.
  3. Клауза PARTITION BY (необов'язково): розділяє дані на партиції, і віконна функція застосовується до кожної партиції незалежно.
  4. Клауза ORDER BY (необов'язково): визначає порядок рядків у кожній партиції.
  5. Клауза ROWS/RANGE (необов'язково): визначає рамку вікна, тобто набір рядків відносно поточного рядка, що використовується для обчислення.

Ключові концепції та синтаксис

1. Клауза OVER()

Клауза OVER() — це серце віконної функції. Вона визначає вікно рядків, над яким працюватиме функція. Проста клауза OVER() без аргументів розглядатиме весь результуючий набір як вікно. Наприклад:

Приклад SQL:

SELECT
  date,
  sales,
  AVG(sales) OVER()
FROM
  sales_data;

Цей запит обчислює середні продажі за всі дати в таблиці sales_data.

2. PARTITION BY

Клауза PARTITION BY розділяє дані на партиції, і віконна функція застосовується окремо до кожної партиції. Це корисно, коли потрібно обчислювати метрики для різних груп у ваших даних.

Приклад SQL:

SELECT
  date,
  product_id,
  sales,
  AVG(sales) OVER (PARTITION BY product_id)
FROM
  sales_data;

Цей запит обчислює середні продажі для кожного продукту окремо.

3. ORDER BY

Клауза ORDER BY визначає порядок рядків у кожній партиції. Це важливо для обчислення наростаючих підсумків, ковзних середніх та інших метрик на основі часу.

Приклад SQL:

SELECT
  date,
  sales,
  SUM(sales) OVER (ORDER BY date)
FROM
  sales_data;

Цей запит обчислює кумулятивну суму продажів з часом.

4. ROWS/RANGE

Клаузи ROWS та RANGE визначають рамку вікна, тобто набір рядків відносно поточного рядка, що використовується для обчислення. Клауза ROWS визначає рамку вікна на основі фізичного номера рядка, тоді як клауза RANGE визначає рамку вікна на основі значень стовпця, вказаного в ORDER BY.

Приклад з ROWS:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
FROM
  sales_data;

Цей запит обчислює ковзне середнє продажів за останні 3 дні (включаючи поточний день).

Приклад з RANGE:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date RANGE BETWEEN INTERVAL '2' DAY PRECEDING AND CURRENT ROW)
FROM
  sales_data;

Цей запит обчислює ковзне середнє продажів за останні 2 дні (включаючи поточний день). Зауважте, що RANGE вимагає впорядкованого стовпця числового типу або типу дати/часу.

Поширені віконні функції для аналізу часових рядів

1. Ковзне/рухоме середнє

Ковзне середнє, також відоме як рухоме середнє, — це широко використовувана техніка для згладжування короткострокових коливань у даних часових рядів та виділення довгострокових тенденцій. Воно обчислюється шляхом усереднення значень у межах визначеного вікна часу.

Приклад SQL:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_7_days
FROM
  sales_data;

Цей запит обчислює 7-денне ковзне середнє продажів.

Приклад на Python (з використанням Pandas):

import pandas as pd

# Assuming you have a Pandas DataFrame called 'sales_df' with 'date' and 'sales' columns

sales_df['moving_average_7_days'] = sales_df['sales'].rolling(window=7).mean()

Приклад глобального застосування: Міжнародний ритейлер може використовувати 30-денне ковзне середнє для згладжування щоденних коливань продажів та виявлення основних тенденцій продажів у різних регіонах.

2. Кумулятивна сума

Кумулятивна сума, також відома як наростаючий підсумок, обчислює суму значень до поточного рядка. Вона корисна для відстеження загального накопиченого значення з часом.

Приклад SQL:

SELECT
  date,
  sales,
  SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
  sales_data;

Цей запит обчислює кумулятивну суму продажів з часом.

Приклад на Python (з використанням Pandas):

import pandas as pd

# Assuming you have a Pandas DataFrame called 'sales_df' with 'date' and 'sales' columns

sales_df['cumulative_sales'] = sales_df['sales'].cumsum()

Приклад глобального застосування: Міжнародна e-commerce компанія може використовувати кумулятивні продажі для відстеження загального доходу, отриманого від запуску нового продукту на різних ринках.

3. Функції Lead та Lag

Функції LEAD та LAG дозволяють отримувати доступ до даних з наступних або попередніх рядків відповідно. Вони корисні для обчислення змін у порівнянні з попереднім періодом, виявлення тенденцій та порівняння значень у різні періоди часу.

Приклад SQL:

SELECT
  date,
  sales,
  LAG(sales, 1, 0) OVER (ORDER BY date) AS previous_day_sales,
  sales - LAG(sales, 1, 0) OVER (ORDER BY date) AS sales_difference
FROM
  sales_data;

Цей запит обчислює різницю в продажах порівняно з попереднім днем. Функція LAG(sales, 1, 0) отримує значення продажів з попереднього рядка (зміщення 1), і якщо попереднього рядка немає (наприклад, для першого рядка), вона повертає 0 (значення за замовчуванням).

Приклад на Python (з використанням Pandas):

import pandas as pd

# Assuming you have a Pandas DataFrame called 'sales_df' with 'date' and 'sales' columns

sales_df['previous_day_sales'] = sales_df['sales'].shift(1)
sales_df['sales_difference'] = sales_df['sales'] - sales_df['previous_day_sales'].fillna(0)

Приклад глобального застосування: Глобальна авіакомпанія може використовувати функції lead та lag для порівняння продажів квитків на той самий маршрут у різні тижні та виявлення потенційних коливань попиту.

4. Функції Rank та Dense Rank

Функції RANK() та DENSE_RANK() присвоюють ранг кожному рядку в межах партиції на основі вказаного порядку. RANK() присвоює ранги з пропусками (наприклад, 1, 2, 2, 4), тоді як DENSE_RANK() присвоює ранги без пропусків (наприклад, 1, 2, 2, 3).

Приклад SQL:

SELECT
  date,
  sales,
  RANK() OVER (ORDER BY sales DESC) AS sales_rank,
  DENSE_RANK() OVER (ORDER BY sales DESC) AS sales_dense_rank
FROM
  sales_data;

Цей запит ранжує значення продажів у спадному порядку.

Приклад глобального застосування: Глобальний онлайн-маркетплейс може використовувати функції ранжування для визначення найпопулярніших товарів у кожній країні чи регіоні.

Просунуті методи та застосування

1. Комбінування віконних функцій

Віконні функції можна комбінувати для виконання складніших обчислень. Наприклад, ви можете обчислити ковзне середнє від кумулятивної суми.

Приклад SQL:

SELECT
  date,
  sales,
  AVG(cumulative_sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_cumulative_sales
FROM
  (
    SELECT
      date,
      sales,
      SUM(sales) OVER (ORDER BY date) AS cumulative_sales
    FROM
      sales_data
  ) AS subquery;

2. Використання віконних функцій з умовною агрегацією

Ви можете використовувати віконні функції в поєднанні з умовною агрегацією (наприклад, використовуючи оператори CASE) для виконання обчислень на основі певних умов.

Приклад SQL:

SELECT
  date,
  sales,
  AVG(CASE WHEN sales > 100 THEN sales ELSE NULL END) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_high_sales
FROM
  sales_data;

Цей запит обчислює ковзне середнє продажів лише за ті дні, коли продажі перевищують 100.

3. Декомпозиція часових рядів

Віконні функції можна використовувати для декомпозиції часового ряду на його компоненти: тренд, сезонність та залишки. Це включає обчислення ковзних середніх для оцінки тренду, виявлення сезонних закономірностей, а потім віднімання тренду та сезонних компонентів для отримання залишків.

4. Виявлення аномалій

Віконні функції можна використовувати для виявлення аномалій у даних часових рядів шляхом обчислення ковзних середніх та стандартних відхилень. Точки даних, що виходять за межі певного діапазону (наприклад, +/- 3 стандартних відхилення від ковзного середнього), можуть бути позначені як аномалії.

Практичні приклади в різних галузях

1. Фінанси

2. Роздрібна торгівля

3. Виробництво

4. Охорона здоров'я

Вибір правильного інструменту

Віконні функції доступні в різних інструментах обробки даних та мовах програмування, зокрема:

Вибір інструменту залежить від ваших конкретних потреб та технічного досвіду. SQL добре підходить для даних, що зберігаються в реляційних базах даних, тоді як Python та Spark є більш гнучкими для обробки великих наборів даних та виконання складного аналізу.

Найкращі практики

Висновок

Віконні функції — це потужний інструмент для аналізу часових рядів, що дозволяє обчислювати ковзні середні, кумулятивні суми, значення lead/lag та інші метрики на основі часу. Опанувавши віконні функції, ви можете отримати цінні інсайти з ваших даних часових рядів та приймати більш обґрунтовані рішення. Незалежно від того, чи аналізуєте ви фінансові дані, дані про продажі, дані з датчиків або дані вебтрафіку, віконні функції допоможуть вам виявити закономірності, тенденції та аномалії, які було б важко виявити за допомогою традиційних методів агрегації. Розуміючи ключові концепції та синтаксис віконних функцій та дотримуючись найкращих практик, ви зможете ефективно використовувати їх для вирішення широкого кола реальних проблем у різних галузях.