SQL Server ile Veri Madenciliği (Time Series)
Günümüzde yapılan her işlemin (veya çok büyük bir çoğunluğunun) OLTP sistemlerde kayıt altında tutulmaktadır. Öte yandan bu tablo yapısında her şirket için olmazsa olmaz herkesin baktığı boyutların başında tarih boyutu bulunmaktadır. Yani elinizde bulunan verileri nereden sorgularsanız sorgulayın aslında bir şekilde işin ucu zaman dilimlerine denk gelmektedir. Hal böyle olunca bir önceki yazımızda bahsetmiş olduğumuz veri madenciliği algoritmalarından en çok kullanılanı Zaman Serisi Time Series algoritmaları olmaktadır.
Veri setlerinin zamana bağlı olarak elde edilim zaman sıralamasında düzenlenmesi ile elde edilen diziye zaman serisi denir. Yıllara göre ihracat/ithalat bilgileri, cari açık, nakit girişleri, günlük satış adedi, döviz kurları, düğünler sebebiyle altın alımı, üniversiteler sebebiyle şehirlerde gerçekleştirilen ticari hacim vb tüm seriler temelinde bir zaman serisidir. Zaman ve diğer bakmak istediğimiz boyutlarda nokta grafik çizdiğinizde aslında bu noktaların belirli bir iniş çıkış izlediği farkedilmektedir. Bir zaman serisinde bu tür dalgalanmalar 4 kısımda incelenmektedir. Bunlar trend, konjonktürel dalgalanmalar, mevsimlik dalgalanlamalar ve rastlantısal dalgalanmalardır.
Trend uzun dönemde serinin genel eğilimini gösterir. Zaman serisini oluşturan değerleri temel ve yapısal nedenler uzun dönemde pek değişmeyen bir eğilim gösterir. Bu eğilimin nedenleri teorik olarak, zaman serisinin konusuyla ilgili yasalara bağlı açıklanabilir. Ekonomi konuları ile ilgili serilerde genel eğilim ekonomi yasaları ile açıklanabilir. Trend, bağlı olduğu nedenlerin etki derecesine göre yönü ve değişim hızı bakımından hep aynı kalmayabilir. Trenddeki artış doğrusal olabileceği gibi eğrisel de olabilir. Konjonktürel dalgalanmalar uzun dönemli devri hareketleridir. Ekonomik serilerde 5-10 yıla varan devre uzunluklarında alçalıp yükselme gösterir. Genel ekonomide yükselme, refah, kriz ve düşüş dönemleri konjonktürel dalgalanma olarak görülür. Bir işletmenin de gelişme, olgunluk ve düşüş dönemleri vardır. Ekonomik olayın trendi yükselişteyken konjonktürün de yükselmesi trend eğilimini arttırır. Tersi durumda, trendin artışına karşılık konjonktürdeki düşüş trendin artış hızını yavaşlatabilir. Konjonktürel dalgalanmaların periyodu sabit değildir. Yani dalga uzunlukları eşit değildir.

Mevsimlik dalgalanmalar doğal ve sosyo ekonomik nedenlerle ortaya çıkar. Konjonktürel dalgalanmalar gibi bunlar da devridir. Ancak mevsimlik dalgalanmaların dalga boyu aynı kalır. Bazı malların üreti ve tüketi miktarları, fiyatları belirli aylarda düşüş, belirli aylarda yükseliş gösterir. Bir yıl içerisinde meydana gelen bu yükseliş ve düşüşler mevsimlik trendler olarak açıklanmaktadır. Rastlantısal dalgalanmalar yukarıda bahsedilen üç faktörle açıklanamayan değişmelerdir.

Kaynak : İşletmelerde Uygulamalı İstatistik
Bu kadar teoriden sonra SQL Server üzerinde nasıl Zaman Serisi algoritması çalıştırılacağına bakalım. Öncelikle geliştilecek sorgulamalar DMX üzerinden yapılır. Bu sebeple Management Studio üzerinden Analysis Service bağlantısını gerçekleştirin. Daha sonrasında New Analysis Services DMX Query seçeneğini seçiniz.

CREATE MINING MODEL [SQLServer_DM_TS_MIXED]
(
[Reporting Date] date key TIME,
[Model Region] text key,
[Quantity] double continuous predict,
[Amount] double continuous predict
)
USING Microsoft_Time_Series (AUTO_DETECT_PERIODICITY = 0.85, FORECAST_METHOD = 'MIXED')
WITH DRILLTHROUGH
Sql script ile tablo oluşturur gibi Mining modelimizi oluşturmamız gerekmektedir. Bunun için tahmin etmek istediğimiz ölçümleme değerleri ve bu tahminlemeyi yapabilmek için gerekli olan parametrelerimizi modelde tanımlayalım. Onun haricinde SQL Server’ın desteklediği zaman serisi algoritmalarından hangisini kullanamak istiyorsak onu belirtmemiz gerekmektedir. SQL Server’ın desteklediği zaman serisi algoritmaları ARIMA, ARTXP modelleridir. Modeli silmek için ise DROP komutunu kullanabilirsiniz.
DROP MINING MODEL [SQLServer_DM_TS_MIXED]


OpenQuery altında veri kaynağını belirtmeniz gerekmektedir. Burada kullanacağınız yapı veri tabanının adı değil, geliştirilmiş olan Analysis Services projesindeki Data Source alanında yer alan nesnenin adı olmalıdır.
INSERT INTO MINING STRUCTURE [Forecasting_MIXED_Structure]
(
[Reporting Date],[Model Region],[Quantity],[Amount]
)
OPENQUERY(
[Adventure Works DW2012 Data],
'SELECT [ReportingDate] AS [Reporting Date],[ModelRegion] AS [Model Region],[Quantity],[Amount] FROM vTimeSeries ORDER BY [Reporting Date]'
)
Örnekte kullanılan view aslında bizim verilerimi aylık olarak tutan bir özet tablo niteliğinde. Hazırlamış olduğumuz bu yapı ile bundan sonraki 5 dönemlik satışlarımı tahmin etmek istediğimde aşağıdaki gibi hazırlayacağımız bir sorgu bize tahminleri döndürecektir.
Zaman serisi Microsoft SQL Server’ın desteklediği algoritmalardan bir tanesi. Fakat gerçek hayat ve şirketlerin veritabanları göz önüne alındığında sanırım en çok kullanılma ihtimali olan algoritma diyebiliriz. Bu sayede ürün, kategori, coğrafi boyutlarla ve zamana bağlı olarak şirketinizin gidişatı ile ilgili tahminlerde bulunabilirsiniz. Fakat şirketiniz zamana ek olarak farklı boyutlardan etkileniyorsa onları algoritmaya dahil etmemek sonuçların doğruluk payının düşmesine sebep olabilir. Örneğin ramazan ayından etkilenen bir şirketseniz veya hava durumu sizin için önemli bir kriterse algoritmanın çalışmasında bu boyutları da dahil etmelisiniz.