داده کاوی سری زمانی با T-SQL: بهینهسازی و بهروزرسانی مدل با دادههای جدید
این مقاله نحوه انجام داده کاوی سری زمانی در SQL Server را با استفاده از T-SQL نشان میدهد. ما چگونگی ایجاد یک مدل داده کاوی سری زمانی و پردازش آن را با دادههای جدید بررسی میکنیم. این رویکرد به متخصصان داده و توسعهدهندگان SQL کمک میکند تا مدلهای پیشبینیکننده خود را با کارایی بالا و بدون نیاز به پردازش مجدد کامل، بهروزرسانی کنند. در ادامه، گام به گام مراحل را برای پیادهسازی این تکنیک در پایگاه دادههای SQL Server دنبال میکنیم.
ابتدا با ایجاد یک پایگاه داده به نام DataMining و یک جدول به نام TimeSeriesTable شروع میکنیم که برای نگهداری دادههای سری زمانی ما مورد استفاده قرار میگیرد.
USE master;
GO
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'DataMining')
DROP DATABASE DataMining;
GO
CREATE DATABASE DataMining;
GO
USE DataMining;
GO
CREATE TABLE TimeSeriesTable (
Id INT IDENTITY(1,1),
DateValue DATETIME,
SalesValue INT
);
GO
اکنون، چند داده نمونه را در جدول TimeSeriesTable وارد میکنیم. این دادهها به عنوان مجموعه اولیه برای آموزش مدل داده کاوی سری زمانی ما عمل خواهند کرد.
INSERT INTO TimeSeriesTable (DateValue, SalesValue) VALUES
('2023-01-01', 100),
('2023-01-02', 110),
('2023-01-03', 105),
('2023-01-04', 120),
('2023-01-05', 115),
('2023-01-06', 130),
('2023-01-07', 125),
('2023-01-08', 140),
('2023-01-09', 135),
('2023-01-10', 150),
('2023-01-11', 145),
('2023-01-12', 160);
GO
در این مرحله، با استفاده از زبان DMX (Data Mining Extensions) یک ساختار داده کاوی ایجاد خواهیم کرد. این ساختار، منبع داده و مدل کاوی را که بر روی آن ساخته میشود، تعریف میکند. مدل برای پیشبینی دقیقتر سری زمانی از الگوریتم پیشرفته سری زمانی مایکروسافت (Microsoft Time Series) استفاده میکند.
USE DataMining;
GO
-- Create a Mining Structure
CREATE MINING STRUCTURE TimeSeriesStructure
(
Id LONG KEY,
DateValue DATETIME KEY TIME,
SalesValue LONG CONTINUOUS
);
GO
-- Create a Mining Model within the structure
ALTER MINING STRUCTURE TimeSeriesStructure ADD MINING MODEL TimeSeriesModel
(
Id LONG KEY,
DateValue DATETIME KEY TIME,
SalesValue PREDICT
)
USING 'Microsoft Time Series';
GO
پس از تعریف ساختار و مدل، باید آن را پردازش کنیم تا مدل با دادههای اولیه آموزش داده شود. این فرآیند آموزش اولیه برای ایجاد الگوهای پیشبینی ضروری است.
INSERT INTO TimeSeriesStructure (Id, DateValue, SalesValue)
OPEN (SELECT Id, DateValue, SalesValue FROM TimeSeriesTable)
;
GO
ALTER MINING MODEL TimeSeriesModel PROCESS;
GO
اکنون که مدل پردازش شده است، میتوانیم از کوئریهای DMX برای انجام پیشبینیها استفاده کنیم. در اینجا، سه مقدار فروش بعدی را بر اساس دادههای موجود در مدل پیشبینی میکنیم. این پیشبینی اولیه نمایانگر عملکرد مدل بر اساس مجموعه داده اصلی است.
SELECT
T.DateValue,
T.SalesValue,
PredictTimeSeries(TimeSeriesModel, 3)
FROM
TimeSeriesTable AS T
PREDICT SERIES
فرض کنید دادههای فروش جدیدی برای چند روز آینده داریم که میخواهیم مدل را با آنها بهروزرسانی کنیم. این رکوردهای جدید را در جدول TimeSeriesTable خود وارد میکنیم تا بتوانیم مدل را با اطلاعات جدید تغذیه کنیم.
INSERT INTO TimeSeriesTable (DateValue, SalesValue) VALUES
('2023-01-13', 155),
('2023-01-14', 170),
('2023-01-15', 165),
('2023-01-16', 180),
('2023-01-17', 175);
GO
به جای پردازش مجدد کل مدل از ابتدا که میتواند برای مجموعه دادههای بزرگ زمانبر باشد، میتوانیم فقط دادههای جدید را با استفاده از گزینه `PROCESSADD` پردازش کنیم. این کار به طور کارآمد مدل موجود را بهروزرسانی میکند بدون اینکه الگوهای آموخته شده آن از بین برود و به بهینهسازی عملکرد کمک میکند.
ALTER MINING MODEL TimeSeriesModel PROCESSADD;
GO
پس از بهروزرسانی مدل، دوباره آن را کوئری میکنیم تا پیشبینیها را بر اساس مجموعه داده توسعهیافته مشاهده کنیم. ما مجدداً سه مقدار فروش بعدی را پیشبینی میکنیم تا تفاوت و دقت بهبودیافته مدل را پس از افزودن دادههای جدید ارزیابی کنیم. این کار اهمیت بهروزرسانی مدلها با دادههای تازه را برای حفظ دقت پیشبینی نشان میدهد.
SELECT
T.DateValue,
T.SalesValue,
PredictTimeSeries(TimeSeriesModel, 3)
FROM
TimeSeriesTable AS T
PREDICT SERIES