Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu not defterinde, mevsimsel döngüleri olan zaman serisi verilerini tahmin etmek için bir program oluşturacaksınız. NYC Gayrimenkul Satışları veri kümesini, 2003 ile 2015 tarihleri arasında, NYC Açık Veri Portalı üzerinde NYC Finans Departmanı tarafından yayımlanan, kullanın.
Önkoşullar
Microsoft Fabric aboneliği alın. Alternatif olarak ücretsiz Microsoft Fabric deneme sürümüne kaydolabilirsiniz.
Microsoft Fabric'e giriş yapın.
Giriş sayfanızın sol alt köşesindeki deneyim değiştiriciyi kullanarak Fabric'e geçin.
- Microsoft Fabric defterlerine aşinalık.
- Bu örnekteki verileri depolamak için bir göl evi. Daha fazla bilgi için bkz Not defterinize gölevi ekleyin.
Not defterinde takip edin
Not defterinde aşağıdaki iki yöntemden birini izleyebilirsiniz:
- Yerleşik not defterini açın ve çalıştırın.
- Not defterinizi GitHub yükleyin.
Yerleşik not defterini açma
Örnek Zaman serisi not defteri bu öğreticiye eşlik eder.
Bu öğreticinin örnek not defterini açmak için Sisteminizi veri bilimi öğreticilerine hazırlamabaşlığındaki yönergeleri izleyin.
Kodu çalıştırmaya başlamadan önce not defterine bir göl evi eklediğinizden emin olun.
Not defterini GitHub'dan içeri aktarma
AIsample - Time Series Forecasting.ipynb bu öğreticiye eşlik eden not defteridir.
Bu öğreticiye eşlik eden not defterini açmak için, not defterini çalışma alanınıza aktarmak üzere Sistemimizi veri bilimi öğreticilerine hazırlama başlığındaki yönergeleri izleyin.
Bu sayfadaki kodu kopyalayıp yapıştırmayı tercih ederseniz, yeni bir not defteri oluşturabilirsiniz.
Kod çalıştırmaya başlamadan önce not defterine bir göl evi eklediğinizden emin olun.
1. Adım: Özel kitaplıkları yükleme
bir machine learning modeli geliştirirken veya geçici veri analizini işlerken Apache Spark oturumu için hızlı bir şekilde özel bir kitaplık (örneğin, bu not defterindeki prophet) yüklemeniz gerekebilir. Bu görevi yapmak için iki seçeneğiniz vardır.
- Yeni kitaplıklara hızlıca başlamak için satır içi yükleme yeteneklerini (örneğin,
%pip,%condavb.) kullanın. Bu yöntem, özel kütüphaneleri çalışma alanına değil, yalnızca geçerli not defterine yükler.
# Use pip to install libraries
%pip install <library name>
# Use conda to install libraries
%conda install <library name>
- Alternatif olarak bir Fabric ortamı oluşturun, ortak kaynaklardan kitaplıklar yükleyin veya ortamınıza özel kitaplıklar yükleyin. Çalışma alanı yöneticiniz ortamı çalışma alanı için varsayılan olarak ekleyebilir. Ortamdaki tüm kitaplıklar, çalışma alanında tüm not defterlerinde ve Spark iş tanımlarında kullanılabilir hale gelir. Ortamlar hakkında daha fazla bilgi için Microsoft Fabric'te bir ortam oluşturma, yapılandırma ve kullanma başlığına bakın.
Bu not defteri için %pip install, prophet kitaplığını yüklemek amacıyla kullanın. PySpark çekirdeği %pip install sonrasında yeniden başlatılır. Bu eylem, başka bir hücre çalıştırmadan önce kitaplığı yüklemeniz gerektiği anlamına gelir.
# Use pip to install Prophet
%pip install prophet
2. Adım: Verileri yükleme
Veri kümesi
Bu not defteri NYC Property Sales veri veri kümesini kullanır. NYC Finance Departmanı tarafından NYC Açık Veri Portalı üzerinde yayımlanan 2003 ile 2015 yıllarının verilerini kapsar.
Veri kümesi, 13 yıllık bir süre içinde New York City emlak pazarındaki tüm bina satışlarının kaydını içerir. Veri kümesindeki sütunların tanımı için Glossary of Terms for Property Sales Files bölümüne bakın.
| ilçe | mahalle | bina_sınıf_kategorisi | vergi_sınıfı | blok | parti | eastment | mevcut_bina_sınıfı | adres | daire_numarası | zip_code | konut birimleri | ticari birimler | toplam_birimler | arazi_kare_ayak | brüt metrekare | inşa_yılı | Satış Anındaki Vergi Sınıfı | satış sırasında bina sınıfı | satış fiyatı | satış_tarihi |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Manhattan | ALPHABET CITY | 07 KIRALAMA - MERDİVENLİ APARTMANLAR | 0,0 | 384.0 | 17.0 | C4 | 225 DOĞU 2. CADDESİ | 10009.0 | 10.0 | 0,0 | 10.0 | 2145.0 | 6670.0 | 1900.0 | 2.0 | C4 | 275000.0 | 2007-06-19 | ||
| Manhattan | ALPHABET CITY | 07 KIRALAMA - MERDİVENLİ APARTMANLAR | 2.0 | 405,0 | 12.0 | C7 | 508 DOĞU 12. CADDE | 10009.0 | 28.0 | 2.0 | 30,0 | 3872.0 | 15428.0 | 1930.0 | 2.0 | C7 | 7794005.0 | 2007-05-21 |
Hedef, geçmiş verilere göre aylık toplam satışları tahmin eden bir model oluşturmaktır. Bunun için, Facebook tarafından geliştirilen open source bir tahmin kitaplığı olan Prophet kullanırsınız. Kahin, doğrusal olmayan eğilimlerin günlük, haftalık ve yıllık mevsimsellik ile tatil etkilerine uygun olduğu, katkılı bir modeli temel alır. Prophet, mevsimsel etkileri güçlü olan zaman serisi veri kümelerinde ve birkaç mevsimlik geçmiş verilere sahip olduğunda en iyi şekilde çalışır. Ek olarak, Prophet eksik verileri ve veri aykırı değerlerini güvenilir bir şekilde işler.
Prophet, üç bileşenli ayrıştırılabilir bir zaman serisi modeli kullanır:
- eğilim: Peygamber, otomatik değişim noktası seçimi ile parça başına sabit bir büyüme oranı olduğunu varsayar
- mevsimsellik: Varsayılan olarak, Prophet yazılımı haftalık ve yıllık mevsimsellik için Fourier Serisi kullanır.
- tatiller: Peygamber, tatillerin tüm geçmiş ve gelecekteki oluşumlarını gerektirir. Eğer bir tatil gelecekte tekrar etmezse, Hz. Peygamber bunu tahmine dahil etmez.
Bu not defteri verileri aylık olarak toplar, bu nedenle tatilleri yoksayar.
Hz. Peygamber modelleme teknikleri hakkında daha fazla bilgi için resmi yazıyı okuyun.
Veri kümesini indirin ve bir lakehouse'a yükleyin
Veri kaynağı 15 .csv dosyadan oluşur. Bu dosyalar, 2003 ile 2015 yılları arasında New York'taki beş ilçenin mülk satış kayıtlarını içerir. Kolaylık sağlamak için, nyc_property_sales.tar dosya bu .csv dosyaların tümünü barındırır ve bunları tek bir dosyada sıkıştırır. Genel kullanıma açık bir blob storage bu .tar dosyasını barındırıyor.
İpucu
Bu kod hücresinde gösterilen parametreleri kullanarak, bu not defterini farklı veri kümelerine kolayca uygulayabilirsiniz.
URL = "https://synapseaisolutionsa.z13.web.core.windows.net/data/NYC_Property_Sales_Dataset/"
TAR_FILE_NAME = "nyc_property_sales.tar"
DATA_FOLDER = "Files/NYC_Property_Sales_Dataset"
TAR_FILE_PATH = f"/lakehouse/default/{DATA_FOLDER}/tar/"
CSV_FILE_PATH = f"/lakehouse/default/{DATA_FOLDER}/csv/"
EXPERIMENT_NAME = "aisample-timeseries" # MLflow experiment name
Bu kod, veri kümesinin genel kullanıma açık bir sürümünü indirir ve ardından bu veri kümesini bir Fabric Lakehouse'da depolar.
Önemli
Çalıştırmadan önce not defterine bir göl evi eklediğinizden emin olun. Aksi takdirde bir hata oluşur.
import os
if not os.path.exists("/lakehouse/default"):
# Add a lakehouse if the notebook has no default lakehouse
# A new notebook will not link to any lakehouse by default
raise FileNotFoundError(
"Default lakehouse not found, please add a lakehouse for the notebook."
)
else:
# Verify whether or not the required files are already in the lakehouse, and if not, download and unzip
if not os.path.exists(f"{TAR_FILE_PATH}{TAR_FILE_NAME}"):
os.makedirs(TAR_FILE_PATH, exist_ok=True)
os.system(f"wget {URL}{TAR_FILE_NAME} -O {TAR_FILE_PATH}{TAR_FILE_NAME}")
os.makedirs(CSV_FILE_PATH, exist_ok=True)
os.system(f"tar -zxvf {TAR_FILE_PATH}{TAR_FILE_NAME} -C {CSV_FILE_PATH}")
Bu not defterinin çalışma zamanını kaydetmeye başlayın.
# Record the notebook running time
import time
ts = time.time()
MLflow deneme izlemesini ayarlama
MLflow günlüğe kaydetme özelliklerini genişletmek için otomatik kaydetme, bir makine öğrenimi modelinin eğitimi sırasında giriş parametrelerinin ve çıkış ölçümlerinin değerlerini otomatik olarak yakalar. Bu bilgiler, MLflow API'lerinin veya çalışma alanındaki karşılık gelen denemenin erişip görselleştirebildiği çalışma alanına kaydedilir. Otomatik günlük kaydı hakkında daha fazla bilgi için bkz. Microsoft Fabric'te Autologging.
# Set up the MLflow experiment
import mlflow
mlflow.set_experiment(EXPERIMENT_NAME)
mlflow.autolog(disable=True) # Disable MLflow autologging
Not
Not defteri oturumunda Microsoft Fabric'in otomatik oturum kaydını devre dışı bırakmak için mlflow.autolog() çağrısı yapın ve disable=True ayarını gerçekleştirin.
Lakehousetan ham tarih verilerini okuma
df = (
spark.read.format("csv")
.option("header", "true")
.load("Files/NYC_Property_Sales_Dataset/csv")
)
3. Adım: Keşif veri analizine başlama
Veri kümesini gözden geçirmek için, daha iyi anlamak için bir veri alt kümesini el ile inceleyin. DataFrame yazdırmak için display işlevini kullanın. Veri kümesinin alt kümelerini kolayca görselleştirmek için Grafik görünümlerini de gösterebilirsiniz.
display(df)
Veri kümesinin el ile gözden geçirilmesi bazı erken gözlemlere yol açar:
0,00 ABD doları satış fiyatı örnekleri. Terimler Sözlüğü'ne göre, bu değer nakit karşılığı olmayan bir sahiplik aktarımını ifade eder. Başka bir deyişle, işlemde nakit akışı yapılmamış. Veri kümesinden 0,00
sales_priceABD doları değerlerle satışları kaldırın.Veri kümesi farklı yapı sınıflarını kapsar. Ancak bu not defteri, Glossary of Terms'a göre "A" türü olarak işaretlenmiş konut binalarına odaklanacaktır. Veri kümesini yalnızca konut binalarını içerecek şekilde filtreleyin. Bunu yapmak için,
building_class_at_time_of_saleveyabuilding_class_at_presentsütunlarını ekleyin. Yalnızcabuilding_class_at_time_of_saleverilerini dahil edin.Veri kümesi, değerlerin 0'a veya
total_unitsdeğerlerin 0'a eşit olduğugross_square_feetörnekleri içerir. veyatotal_unitsdeğerlerinin 0'a eşit olduğugross_square_unitstüm örnekleri kaldırın.Bazı sütunlarda (örneğin,
apartment_number,tax_class,build_class_at_presentve diğerleri) eksik veya NULL değerleri vardır. Eksik verilerin yazım hataları veya var olmayan veriler içerdiğini varsayalım. Çözümleme bu eksik değerlere bağlı olmadığından bunları yoksayabilirsiniz.Sütun
sale_price, önceden eklenen "$" karakteriyle bir dize olarak depolanır. Çözümlemeye devam etmek için bu sütunu sayı olarak temsil edin.sale_pricesütununu tamsayı olarak dönüştür.
Tür dönüştürme ve filtreleme
Tanımlanan sorunlardan bazılarını çözmek için gerekli kitaplıkları içeri aktarın.
# Import libraries
import pyspark.sql.functions as F
from pyspark.sql.types import *
Satış verilerini dizeden tamsayıya dönüştürme
Dizenin sayısal bölümünü dolar işaretinden ayırmak için normal ifadeleri kullanın (örneğin, dizesinde $300,000, böl $ ve 300,000) ve ardından sayısal bölümü tamsayı olarak atayın.
Ardından, verileri yalnızca bu koşulların tümünü karşılayan örnekleri içerecek şekilde filtreleyin:
- 0'dan
sales_pricebüyüktür. - 0'dan
total_unitsbüyüktür. - 0'dan
gross_square_feetbüyüktür. -
building_class_at_time_of_saleA türündedir.
df = df.withColumn(
"sale_price", F.regexp_replace("sale_price", "[$,]", "").cast(IntegerType())
)
df = df.select("*").where(
'sale_price > 0 and total_units > 0 and gross_square_feet > 0 and building_class_at_time_of_sale like "A%"'
)
Aylık olarak toplama
Veri kaynağı, gayrimenkul satışlarını günlük olarak izler, ancak bu yaklaşım bu not defteri için fazla ayrıntılıdır. Bunun yerine, verileri aylık olarak toplama.
İlk olarak, tarih değerlerini yalnızca ay ve yıl verilerini gösterecek şekilde değiştirin. Tarih değerleri yine de yıl verilerini içerir. Yine de Aralık 2005 ile Aralık 2006 arasında ayrım yapabilirsiniz.
Ayrıca, yalnızca analizle ilgili sütunları tutun. Bu sütunlar , , sales_pricetotal_unitsve gross_square_feetsütunlarını içerirsales_date.
sales_date'ı month olarak yeniden adlandırmanız gerekir.
monthly_sale_df = df.select(
"sale_price",
"total_units",
"gross_square_feet",
F.date_format("sale_date", "yyyy-MM").alias("month"),
)
display(monthly_sale_df)
, sale_priceve total_units değerlerini aya gross_square_feetgöre toplama. Ardından, verileri ölçütüne göre monthgruplandırın ve her grup içindeki tüm değerleri topla.
summary_df = (
monthly_sale_df.groupBy("month")
.agg(
F.sum("sale_price").alias("total_sales"),
F.sum("total_units").alias("units"),
F.sum("gross_square_feet").alias("square_feet"),
)
.orderBy("month")
)
display(summary_df)
Pyspark'ı Pandas'a dönüştürme
Pyspark DataFrame'ler büyük veri kümelerini iyi işler. Ancak, veri toplama nedeniyle DataFrame boyutu daha küçüktür. Bu değişiklik, artık pandas DataFrames'i kullanabileceğinizi önerir.
Bu kod, veri kümesini bir pyspark DataFrame'den pandas DataFrame'e yayınlar.
import pandas as pd
df_pandas = summary_df.toPandas()
display(df_pandas)
Görselleştirme
Veriyi daha iyi anlamak için New York City'nin gayrimenkul ticareti eğilimini inceleyebilirsiniz. Bu inceleme, olası desenler ve mevsimsellik eğilimleri hakkında içgörülere yol açar. Microsoft Fabric veri görselleştirmesi hakkında daha fazla bilgi için bkz. Notebook görselleştirme kaynağı.
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
f, (ax1, ax2) = plt.subplots(2, 1, figsize=(35, 10))
plt.sca(ax1)
plt.xticks(np.arange(0, 15 * 12, step=12))
plt.ticklabel_format(style="plain", axis="y")
sns.lineplot(x="month", y="total_sales", data=df_pandas)
plt.ylabel("Total Sales")
plt.xlabel("Time")
plt.title("Total Property Sales by Month")
plt.sca(ax2)
plt.xticks(np.arange(0, 15 * 12, step=12))
plt.ticklabel_format(style="plain", axis="y")
sns.lineplot(x="month", y="square_feet", data=df_pandas)
plt.ylabel("Total Square Feet")
plt.xlabel("Time")
plt.title("Total Property Square Feet Sold by Month")
plt.show()
Keşif veri analizinden gözlemlerin özeti
- Veriler, yıllık tempoda net bir yinelenen desen gösterir ve bu da verilerin yıllık mevsimselliği olduğu anlamına gelir.
- Yaz ayları, kış aylarına kıyasla daha yüksek satış hacimlerine sahip gibi görünüyor.
- Yüksek satışlarla yılları ve düşük satışlarla yılları karşılaştırdığınızda, yüksek satış ayları ile yüksek satış yıllarındaki düşük satış ayları arasındaki gelir farkının mutlak olarak yüksek satış ayları ile düşük satış yıllarındaki düşük satış ayları arasındaki gelir farkını aştığını görürsünüz.
Örneğin, 2004'te en yüksek satış ayı ile en düşük satış ayı arasındaki gelir farkı şu şekildedir:
$900,000,000 - $500,000,000 = $400,000,000
2011 için bu gelir farkı hesaplaması şu şekildedir:
$400,000,000 - $300,000,000 = $100,000,000
Bu gözlem daha sonra çarpımsal ve toplamsal mevsimsellik etkileri arasında karar vermeniz gerektiğinde önemli hale gelir.
4. Adım: Model eğitimi ve izleme
Model uyarlama
Prophet her zaman giriş olarak iki sütunlu bir DataFrame alır. Giriş sütunlarından biri adlı dsbir saat sütunu, diğer giriş sütunu ise adlı ybir değer sütunudur. Saat sütunu, tarih, saat veya tarih ve saat veri biçiminde olmalıdır (örneğin, YYYY_MM). Buradaki veri kümesi bu koşulu karşılar. Değer sütunu sayısal bir veri biçimi olmalıdır.
Model sığdırma için zaman sütununu olarak ds , değer sütununu yolarak yeniden adlandırın. Ardından, verileri Peygamber'e aktarın. Daha fazla bilgi için Prophet Python API belgelerine bakın.
df_pandas["ds"] = pd.to_datetime(df_pandas["month"])
df_pandas["y"] = df_pandas["total_sales"]
Hz. Peygamber, scikit-learn kuralını izler. İlk olarak yeni bir Kahin örneği oluşturun, belirli parametreleri (örneğinseasonality_mode) ayarlayın ve ardından bu örneği veri kümesine sığdırın.
Sabit bir ekleyici faktör, Prophet için varsayılan mevsimsellik etkisi olsa da, mevsimsellik etkisi parametresi için 'çarpımsal' mevsimselliği kullanın. Önceki bölümdeki analiz, mevsimsellik genliğindeki değişiklikler nedeniyle basit bir eklenebilir mevsimselliğin verilere hiç uymadığını göstermiş.
Veriler aya göre toplandığı için weekly_seasonality parametresini kapalı olarak ayarlayın. Sonuç olarak haftalık veriler kullanılamaz.
Mevsimsellik belirsizliği tahminlerini yakalamak için Markov Chain Monte Carlo (MCMC) yöntemlerini kullanın. Prophet, varsayılan olarak eğilim ve gözlem gürültüsü hakkında belirsizlik tahminleri sağlayabilir, ancak mevsimsellikle ilgili belirsizlik tahminleri sağlamaz. MCMC daha fazla işlem süresi gerektirir, ancak algoritmanın mevsimsellik ile eğilim ve gözlem gürültüsü hakkında belirsizlik tahminleri sağlamasına olanak sağlar. Daha fazla bilgi için Prophet Belirsizlik Aralıkları belgelerine bakın.
changepoint_prior_scale parametresi aracılığıyla otomatik değişiklik noktası algılama duyarlılığını ayarlayın. Prophet algoritması, verilerde yörüngelerin aniden değiştiği örnekleri bulmak için otomatik olarak çalışır. Doğru değeri bulmak zor olabilir. Bu sorunu çözmek için farklı değerler deneyin ve ardından en iyi performansa sahip modeli seçin. Daha fazla bilgi için Prophet Trend Changepoints belgelerine bakın.
from prophet import Prophet
def fit_model(dataframe, seasonality_mode, weekly_seasonality, chpt_prior, mcmc_samples):
m = Prophet(
seasonality_mode=seasonality_mode,
weekly_seasonality=weekly_seasonality,
changepoint_prior_scale=chpt_prior,
mcmc_samples=mcmc_samples,
)
m.fit(dataframe)
return m
Çapraz doğrulama
Prophet'in entegre bir çapraz doğrulama aracı vardır. Bu araç tahmin hatasını tahmin edebilir ve en iyi performansa sahip modeli bulabilir.
Çapraz doğrulama tekniği model verimliliğini doğrulayabilir. Bu teknik modeli veri kümesinin bir alt kümesinde eğiter ve veri kümesinin daha önce görünmeyen bir alt kümesinde testler çalıştırır. Bu teknik, istatistiksel modelin bağımsız bir veri kümesine ne kadar iyi genelleştirebildiğini kontrol edebilir.
Çapraz doğrulama için, eğitim veri kümesinin parçası olmayan veri kümesinin belirli bir örneğini ayırın. Ardından, eğitilen modeli dağıtımdan önce bu örnekte test edin. Ancak, bu yaklaşım zaman serisi verileri için çalışmaz. Model Ocak 2005 ve Mart 2005 aylarına ait verileri görürse ve Şubat 2005 ayı için tahminde bulunmaya çalışırsanız, model veri eğiliminin nereye gittiğini gördüğü için adeta hile yapıyormuş gibi olabilir. Gerçek uygulamalarda amaç, görülmeyen bölgeler olarak geleceğe yönelik tahminde bulunur.
Bu sorunu çözmek ve testi güvenilir hale getirmek için veri kümesini tarihlere göre bölün. Veri kümesini eğitim için belirli bir tarihe kadar (örneğin, ilk 11 yıllık veriler) kullanın ve ardından tahmin için kalan görünmeyen verileri kullanın.
Bu senaryoda, 11 yıllık eğitim verileriyle başlayın ve bir yıllık ufuk çizgisi kullanarak aylık tahminler yapın. Özellikle, eğitim verileri 2003 ile 2013 arasında her şeyi içerir. Ardından, ilk yürütme Ocak 2014 ile Ocak 2015 arasında tahminleri işler. Sonraki çalıştırma, Şubat 2014 ile Şubat 2015 arasında tahminleri işler ve bu şekilde devam eder.
Hangi modelin en iyi performansı sergilediğini görmek için eğitilen üç modelin her biri için bu işlemi yineleyin. Ardından, en iyi modelin tahmin kalitesini oluşturmak için bu tahminleri gerçek dünya değerleriyle karşılaştırın.
from prophet.diagnostics import cross_validation
from prophet.diagnostics import performance_metrics
def evaluation(m):
df_cv = cross_validation(m, initial="4017 days", period="30 days", horizon="365 days")
df_p = performance_metrics(df_cv, monthly=True)
future = m.make_future_dataframe(periods=12, freq="M")
forecast = m.predict(future)
return df_p, future, forecast
MLflow ile log modeli
Parametrelerini izlemek için modelleri günlüğe kaydedin ve modelleri daha sonra kullanmak üzere kaydedin. Çalışma alanında, deney adının altında tüm ilgili model bilgileri günlüğe kaydedilir. MLflow otomatik kaydetme öğeleriyle birlikte model, parametreler ve ölçümler tek bir MLflow çalıştırmasında kaydedilir.
# Setup MLflow
from mlflow.models.signature import infer_signature
Denemeler yapma
machine learning denemesi, tüm ilgili machine learning çalıştırmaları için birincil kuruluş ve denetim birimi görevi görür. Çalıştırma, model kodunun tek bir yürütülmesine karşılık gelir. Machine learning deneme izleme, tüm farklı denemelerin ve bileşenlerinin yönetimini ifade eder. Bu yönetim parametreler, ölçümler, modeller ve diğer artefaktları içerir. Belirli bir machine learning denemesinin gerekli bileşenlerini düzenlemeye yardımcı olur. Machine learning deneme izlemesi, kaydedilen denemelerle geçmiş sonuçların kolayca çoğaltılmasını da sağlar. Daha fazla bilgi için Microsoft Fabric'de makine öğrenimi deneyleri bölümüne bakın. Dahil etmeyi planladığınız adımları belirledikten sonra (örneğin, bu not defterine Peygamber modelini uydurma ve değerlendirme), denemeyi çalıştırabilirsiniz.
model_name = f"{EXPERIMENT_NAME}-prophet"
models = []
df_metrics = []
forecasts = []
seasonality_mode = "multiplicative"
weekly_seasonality = False
changepoint_priors = [0.01, 0.05, 0.1]
mcmc_samples = 100
for chpt_prior in changepoint_priors:
with mlflow.start_run(run_name=f"prophet_changepoint_{chpt_prior}"):
# init model and fit
m = fit_model(df_pandas, seasonality_mode, weekly_seasonality, chpt_prior, mcmc_samples)
models.append(m)
# Validation
df_p, future, forecast = evaluation(m)
df_metrics.append(df_p)
forecasts.append(forecast)
# Log model and parameters with MLflow
mlflow.prophet.log_model(
m,
model_name,
registered_model_name=model_name,
signature=infer_signature(future, forecast),
)
mlflow.log_params(
{
"seasonality_mode": seasonality_mode,
"mcmc_samples": mcmc_samples,
"weekly_seasonality": weekly_seasonality,
"changepoint_prior": chpt_prior,
}
)
metrics = df_p.mean().to_dict()
metrics.pop("horizon")
mlflow.log_metrics(metrics)
özellikler panelinin ekran görüntüsü
Peygamber ile bir modeli görselleştirme
Prophet,modele uygun sonuçları gösteren yerleşik görselleştirme işlevlerine sahiptir.
Siyah noktalar modeli eğiten veri noktalarını temsil eder. Mavi çizgi tahmindir ve açık mavi alan belirsizlik aralıklarını gösterir. Farklı changepoint_prior_scale değerlere sahip üç model oluşturacaksınız. Bu üç modelin tahminleri bu kod bloğunun sonuçlarında görünür.
for idx, pack in enumerate(zip(models, forecasts)):
m, forecast = pack
fig = m.plot(forecast)
fig.suptitle(f"changepoint = {changepoint_priors[idx]}")
İlk grafikteki en changepoint_prior_scale küçük değer eğilim değişikliklerinin yetersiz uygunluğuna neden olur. Üçüncü grafikteki en büyük changepoint_prior_scale fazla uyuma neden olabilir. Bu nedenle, ikinci grafik en iyi seçenektir. Bu sonuç, ikinci modelin en uygun olduğu anlamına gelir.
Prophet ile eğilimleri ve mevsimselliği görselleştirin
Kahin, eğilimler ve mevsimsellikler gibi temel unsurları da kolayca görselleştirebilir. İkinci modelin görselleştirmeleri bu kod bloğunun sonuçlarında gösterilir.
BEST_MODEL_INDEX = 1 # Set the best model index according to the previous results
fig2 = models[BEST_MODEL_INDEX].plot_components(forecast)
Bu grafiklerde açık mavi gölgelendirme belirsizliği yansıtır. En üstteki grafik güçlü, uzun süreli salınım eğilimini gösterir. Birkaç yıl içinde satış hacimleri artar ve düşer. Alttaki grafik, satışların Şubat ve Eylül aylarında en yüksek değere ulaştığını ve bu aylarda yıl için en yüksek değerlere ulaştığını göstermektedir. Bu aylardan kısa bir süre sonra, Mart ve Ekim aylarında, yılın minimum değerlerine düşerler.
Çeşitli ölçümleri kullanarak modellerin performansını değerlendirin, örneğin:
- ortalama kare hatası (MSE)
- kök ortalama kare hatası (RMSE)
- ortalama mutlak hata (MAE)
- ortalama mutlak yüzde hatası (MAPE)
- ortanca mutlak yüzde hatası (MDAPE)
- simetrik ortalama mutlak yüzde hatası (SMAPE)
yhat_lower ve yhat_upper tahminlerini kullanarak kapsamı değerlendirin. Gelecekte bir yıl, 12 kez tahmin ettiğiniz değişen ufuklara dikkat edin.
display(df_metrics[BEST_MODEL_INDEX])
Bu tahmin modeli için MAPE ölçümünü kullanarak, bir ayı geleceğe doğru genişleten tahminler genellikle yaklaşık 8%hataları içerir. Ancak gelecekte bir yıl boyunca yapılan tahminlerde hata yaklaşık %10'a çıkıyor.
5. Adım: Modeli puanlayıp tahmin sonuçlarını kaydetme
Modeli puanlayıp tahmin sonuçlarını kaydedin.
Predict Transformer ile tahminde bulunma
Modeli yükleyin ve tahminlerde bulunmak için kullanın. machine learning modellerini kullanıma hazır hale getirmek için PREDICT, herhangi bir işlem altyapısında toplu puanlama özelliğini destekleyen ölçeklenebilir bir Microsoft Fabric işlevi kullanın.
PREDICT ve Microsoft Fabric içinde nasıl kullanılacağı hakkında daha fazla bilgi için bkz. bu kaynak.
from synapse.ml.predict import MLFlowTransformer
spark.conf.set("spark.synapse.ml.predict.enabled", "true")
model = MLFlowTransformer(
inputCols=future.columns.values,
outputCol="prediction",
modelName=f"{EXPERIMENT_NAME}-prophet",
modelVersion=BEST_MODEL_INDEX,
)
test_spark = spark.createDataFrame(data=future, schema=future.columns.to_list())
batch_predictions = model.transform(test_spark)
display(batch_predictions)
# Code for saving predictions into lakehouse
batch_predictions.write.format("delta").mode("overwrite").save(
f"{DATA_FOLDER}/predictions/batch_predictions"
)
# Determine the entire runtime
print(f"Full run cost {int(time.time() - ts)} seconds.")
İlgili içerik
- Microsoft Fabric'te Makine Öğrenimi Modeli
- Makine öğrenimi modellerini eğit
- Microsoft Fabric'de makine öğrenimi deneyleri