Python ile zaman serisi tahmin modelini eğitmek için AutoML'yi ayarlama

ŞUNLAR IÇIN GEÇERLIDIR: Python SDK azure-ai-ml v2 (geçerli)

Bu makalede, Azure Machine Learning Python SDK'sında Azure Machine Learning otomatik ML ile zaman serisi tahmin modelleri için AutoML eğitimini ayarlamayı öğreneceksiniz.

Bunun için şunları yapın:

  • Verileri eğitim için hazırlama.
  • Tahmin İşinde belirli zaman serisi parametrelerini yapılandırın.
  • Eğitilmiş zaman serisi modellerinden tahminler alın.

Düşük kod deneyimi için Azure Machine Learning stüdyosu otomatik ML kullanarak zaman serisi tahmin örneği için Öğretici: Otomatik makine öğrenmesi ile talebi tahmin etme bölümüne bakın.

AutoML, tahmin oluşturmak için standart makine öğrenmesi modellerinin yanı sıra iyi bilinen zaman serisi modellerini kullanır. Yaklaşımımız, eğitim sırasında birden çok bağlamsal değişkeni ve bunların birbiriyle ilişkisini birleştirir. Birden çok faktör bir tahmini etkileyebileceğinden, bu yöntem kendisini gerçek dünya tahmin senaryolarıyla iyi hizalar. Örneğin, satış tahmininde bulunurken geçmiş eğilimlerin, döviz kurunun ve fiyatın etkileşimleri, satış sonucunu birlikte yönlendirebilir. Daha fazla ayrıntı için tahmin metodolojisi makalemize bakın.

Önkoşullar

Bu makale için

Eğitim ve doğrulama verileri

AutoML tahmini için giriş verileri tablo biçiminde geçerli zaman serisi içermelidir. Her değişkenin veri tablosunda kendi ilgili sütunu olmalıdır. AutoML için en az iki sütun gerekir: zaman eksenini temsil eden bir zaman sütunu ve tahmin edilen miktar olan hedef sütun . Diğer sütunlar tahmin aracı olarak görev yapabilir. Diğer ayrıntılar için bkz. AutoML verilerinizi nasıl kullanır.

Önemli

Gelecekteki değerleri tahmin eden bir model eğitirken, eğitimde kullanılan tüm özelliklerin hedeflenen ufkunuz için tahminler çalıştırılırken kullanılabildiğinden emin olun.

Örneğin, geçerli hisse senedi fiyatına yönelik bir özellik eğitim doğruluğunu büyük ölçüde artırabilir. Bununla birlikte, uzun bir ufukla tahminde bulunacaksanız, gelecekteki zaman serisi noktalarına karşılık gelen gelecekteki hisse senedi değerlerini doğru tahmin edemeyebilirsiniz ve model doğruluğu zarar görebilir.

AutoML tahmin işleri, eğitim verilerinizin bir MLTable nesnesi olarak gösterilmesini gerektirir. MLTable bir veri kaynağını ve verileri yükleme adımlarını belirtir. Daha fazla bilgi ve kullanım örnekleri için MLTable nasıl yapılır kılavuzuna bakın. Basit bir örnek olarak, eğitim verilerinizin yerel dizindeki ./train_data/timeseries_train.csvbir CSV dosyasında yer aldığı varsayılır. Aşağıdaki YAML kodunu yeni bir dosyaya ./train_data/MLTablekopyalayarak yeni bir MLTable tanımlayabilirsiniz:

$schema: https://azuremlschemas.azureedge.net/latest/MLTable.schema.json

type: mltable
paths:
    - file: ./timeseries_train.csv

transformations:
    - read_delimited:
        delimiter: ','
        encoding: ascii

Artık AzureML Python SDK'sını kullanarak bir eğitim işi başlatmak için gereken bir giriş veri nesnesi tanımlayabilirsiniz:

from azure.ai.ml.constants import AssetTypes
from azure.ai.ml import Input

# Training MLTable defined locally, with local data to be uploaded
my_training_data_input = Input(
    type=AssetTypes.MLTABLE, path="./train_data"
)

MlTable ve giriş veri nesnesi oluşturarak doğrulama verilerini benzer şekilde belirtebilirsiniz. Alternatif olarak, doğrulama verileri sağlamazsanız AutoML, model seçiminde kullanmak üzere eğitim verilerinizden otomatik olarak çapraz doğrulama bölmeleri oluşturur. Daha fazla ayrıntı için model seçimini tahmin etme makalemize bakın. Ayrıca bir tahmin modelini başarıyla eğitmek için ne kadar eğitim verisine ihtiyacınız olduğuyla ilgili ayrıntılar için eğitim verileri uzunluğu gereksinimlerine bakın.

AutoML'nin aşırı sığdırmayı önlemek için çapraz doğrulamayı nasıl uyguladığı hakkında daha fazla bilgi edinin.

Deneme çalıştırmak için işlem

AutoML, eğitim işini çalıştırmak için tam olarak yönetilen bir işlem kaynağı olan AzureML İşlem'i kullanır. Aşağıdaki örnekte adlı cpu-compute bir işlem kümesi oluşturulur:

from azure.ai.ml.entities import AmlCompute

# specify aml compute name.
cpu_compute_target = "cpu-cluster"

try:
    ml_client.compute.get(cpu_compute_target)
except Exception:
    print("Creating a new cpu compute target...")
    compute = AmlCompute(
        name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
    )
    ml_client.compute.begin_create_or_update(compute).result()

Denemeyi yapılandırma

AutoML tahmin denemenizi yapılandırmak için kullanabileceğiniz çeşitli seçenekler vardır. Bu yapılandırma parametreleri automl.forecasting() görev yönteminde ayarlanır. ayrıca sırasıyla set_training() ve set_limits() işlevleriyle iş eğitimi ayarlarını ve çıkış ölçütlerini ayarlayabilirsiniz.

Aşağıdaki örnek, birincil ölçüm ve otomatik olarak yapılandırılmış çapraz doğrulama katlamaları olarak normalleştirilmiş kök ortalama hata karesi ile bir tahmin işinin nasıl oluşturulacağını gösterir:

from azure.ai.ml import automl

# note that the below is a code snippet -- you might have to modify the variable values to run it successfully
forecasting_job = automl.forecasting(
    compute=compute_name,
    experiment_name=exp_name,
    training_data=my_training_data_input,
    target_column_name=target_column_name,
    primary_metric="NormalizedRootMeanSquaredError",
    n_cross_validations="auto",
)

# Limits are all optional
forecasting_job.set_limits(
    timeout_minutes=120,
    trial_timeout_minutes=30,
    max_concurrent_trials=4,
)

Yapılandırma ayarları

Tahmin görevleri, tahmine özgü birçok ayara sahiptir. Tahmin parametrelerini ayarlamak için Bir ForecastingJob'ın set_forecast_settings() yöntemini kullanın. Aşağıdaki örnekte, eğitim verilerinde saat sütununun adını sağlar ve tahmin ufkunu ayarlarız:

# Forecasting specific configuration
forecasting_job.set_forecast_settings(
    time_column_name=time_column_name,
    forecast_horizon=24
)

Zaman sütunu adı gerekli bir ayardır ve tahmin ufkunu genellikle tahmin senaryonuza göre ayarlamanız gerekir. Verileriniz birden çok zaman serisi içeriyorsa, zaman serisi kimlik sütunlarının adlarını belirtebilirsiniz. Bu sütunlar gruplandırıldığında tek tek serileri tanımlar. Örneğin, farklı mağazalardan ve markalardan saatlik satışlardan oluşan verileriniz olduğunu varsayalım. Aşağıdaki örnekte, verilerin "store" ve "brand" adlı sütunlar içerdiği varsayılarak zaman serisi kimlik sütunlarının nasıl ayarlanacağı gösterilmektedir:

# Forecasting specific configuration
# Add time series IDs for store and brand
forecasting_job.set_forecast_settings(
    ...,  # other settings
    time_series_id_column_names=['store', 'brand']
)

AutoML, belirtilmemişse verilerinizdeki zaman serisi kimlik sütunlarını otomatik olarak algılamaya çalışır.

Diğer ayarlar isteğe bağlıdır ve isteğe bağlı ayarlar bölümünde gözden geçirilir.

İsteğe bağlı ayarlar

Derin öğrenmeyi etkinleştirme ve hedef sıralı pencere toplamayı belirtme gibi tahmin görevleri için isteğe bağlı yapılandırmalar kullanılabilir. Parametrelerin tam listesi forecast_settings API belgesinde bulunur.

Model arama ayarları

AutoML'nin en iyi allowed_training_algorithms modeli arayacağı model alanını denetleyebilen iki isteğe bağlı ayar vardır ve blocked_training_algorithms. Arama alanını belirli bir model sınıfları kümesiyle kısıtlamak için aşağıdaki örnekte olduğu gibi allowed_training_algorithms kullanın:

# Only search ExponentialSmoothing and ElasticNet models
forecasting_job.set_training(
    allowed_training_algorithms=["ExponentialSmoothing", "ElasticNet"]
)

Bu durumda, tahmin işi yalnızca Üstel Düzeltme ve Elastik Net modeli sınıflarında arama uygular. Belirli bir model sınıfları kümesini arama alanından kaldırmak için aşağıdaki örnekte olduğu gibi blocked_training_algorithms kullanın:

# Search over all model classes except Prophet
forecasting_job.set_training(
    blocked_training_algorithms=["Prophet"]
)

Şimdi, iş Kahin hariç tüm model sınıflarını arar. ve blocked_training_algorithmsiçinde allowed_training_algorithms kabul edilen tahmin modeli adlarının listesi için bkz. desteklenen tahmin modelleri ve desteklenen regresyon modelleri.

Derin öğrenmeyi etkinleştirme

AutoML adlı ForecastTCNözel bir derin sinir ağı (DNN) modeliyle birlikte sunulur. Bu model, zaman serisi modellemesine yaygın görüntüleme görevi yöntemlerini uygulayan bir zamansal kıvrımlı ağ veya TCN'dir. Yani, tek boyutlu "nedensel" convolutions ağın omurgasını oluşturur ve modelin eğitim geçmişinde uzun süreler boyunca karmaşık desenleri öğrenmesini sağlar.

AutoML'nin ForecastTCN'sinin ana bileşenlerini gösteren diyagram.

ForecastTCN genellikle eğitim geçmişinde binlerce veya daha fazla gözlem olduğunda standart zaman serisi modellerinden daha yüksek doğruluk elde eder. Ancak, daha yüksek kapasiteleri nedeniyle ForecastTCN modellerini eğitmek ve süpürmek de daha uzun sürer.

set_training() yönteminde bayrağını enable_dnn_training aşağıdaki gibi ayarlayarak AutoML'de ForecastTCN'yi etkinleştirebilirsiniz:

# Include ForecastTCN models in the model search
forecasting_job.set_training(
    enable_dnn_training=True
)

Azure Machine Learning stüdyosu oluşturulan bir AutoML denemesinde DNN'yi etkinleştirmek için studio kullanıcı arabirimindeki görev türü ayarlarına nasıl yapılır bölümüne bakın.

Not

  • SDK ile oluşturulan denemeler için DNN'yi etkinleştirdiğinizde , en iyi model açıklamaları devre dışı bırakılır.
  • Otomatik Makine Öğrenmesi'nde tahmin için DNN desteği Databricks'te başlatılan çalıştırmalar için desteklenmez.
  • DNN eğitimi etkinleştirildiğinde GPU işlem türleri önerilir

Hedef sıralı pencere toplama

Hedefin son değerleri genellikle tahmin modelindeki etkili özelliklerdir. Sıralı pencere toplamaları, veri değerlerinin sıralı toplamalarını özellik olarak eklemenize olanak sağlar. Bu özelliklerin ek bağlamsal veriler olarak oluşturulması ve kullanılması, eğitim modelinin doğruluğuna yardımcı olur.

Hava durumu verilerinin ve geçmiş talebin kullanılabildiği bir enerji talebi tahmin senaryosu düşünün. Tablo, en son üç saat içinde pencere toplama uygulandığında ortaya çıkan özellik mühendisliğini gösterir. Minimum, maksimum ve toplam sütunları, tanımlanan ayarlara göre üç saatlik bir kayan pencerede oluşturulur. Örneğin, 8 Eylül 2017 04:00'te geçerli olan gözlem için en yüksek, en düşük ve toplam değerleri 8 Eylül 2017 13:00 - 03:00 için talep değerleri kullanılarak hesaplanır. Üç saatlik bu pencere, kalan satırların verilerini doldurmak için birlikte kayar.

hedef sıralı pencere

Sıralı pencere toplama özelliklerini etkinleştirebilir ve set_forecast_settings() yöntemi aracılığıyla pencere boyutunu ayarlayabilirsiniz. Aşağıdaki örnekte, AutoML'nin verileriniz için iyi bir değeri otomatik olarak belirlemesi için pencere boyutunu "otomatik" olarak ayarlayacağız:

forecasting_job.set_forecast_settings(
    ...,  # other settings
    target_rolling_window_size='auto'
)

Kısa seri işleme

Otomatik ML, model geliştirmenin tren ve doğrulama aşamalarını yürütmek için yeterli veri noktası yoksa zaman serisini kısa bir seri olarak değerlendirir. Uzunluk gereksinimleri hakkında daha fazla ayrıntı için bkz. eğitim veri uzunluğu gereksinimleri .

AutoML'nin kısa seriler için gerçekleştirebileceği çeşitli eylemler vardır. Bu eylemler ayarıyla short_series_handling_config yapılandırılabilir. Varsayılan değer "otomatik"tir. Aşağıdaki tabloda ayarlar açıklanmaktadır:

Ayar Açıklama
auto Kısa seri işleme için varsayılan değer.
- Tüm seriler kısaysa verileri doldurma.
- Tüm seriler kısa değilse, kısa seriyi bırakın.
pad ise short_series_handling_config = pad, otomatik ML bulunan her kısa seriye rastgele değerler ekler. Aşağıda sütun türleri ve bunların nelerle doldurulup doldurulmadıkları listelenmiştir:
- NaN'leri olan nesne sütunları
- 0 içeren sayısal sütunlar
- False ile Boole/mantıksal sütunlar
- Hedef sütun sıfır ortalaması ve standart sapma değeri 1 olan rastgele değerlerle doldurulur.
drop ise short_series_handling_config = drop, otomatik ML kısa seriyi bırakır ve eğitim veya tahmin için kullanılmaz. Bu seriler için tahminler NaN'leri döndürür.
None Hiçbir seri doldurulmamış veya bırakılmamış

Aşağıdaki örnekte, tüm kısa serilerin minimum uzunluğa doldurulması için kısa seri işlemeyi ayarlayacağız:

forecasting_job.set_forecast_settings(
    ...,  # other settings
    short_series_handling_config='pad'
)

Uyarı

Doldurma sonucunda elde edilen modelin doğruluğu etkilenebilir, çünkü yapay verileri yalnızca hata olmadan eğitimden geçmek için kullanıma sunuyoruz. Serilerin birçoğu kısaysa, açıklanabilirlik sonuçlarında da bazı etkiler görebilirsiniz

Sıklık & hedefi veri toplama

Düzensiz verilerin neden olduğu hataları önlemek için sıklık ve veri toplama seçeneklerini kullanın. Saatlik veya günlük gibi belirli bir tempoya uymayan verileriniz düzensizdir. Satış noktası verileri, düzensiz verilere iyi bir örnektir. Böyle durumlarda AutoML, verilerinizi istenen sıklıkta toplayabilir ve ardından toplamalardan bir tahmin modeli oluşturabilir.

Düzensiz verileri işlemek için ve target_aggregate_function ayarlarını ayarlamanız frequency gerekir. Frequency ayarı Pandas DateOffset dizelerini giriş olarak kabul eder. Toplama işlevi için desteklenen değerler şunlardır:

İşlev Açıklama
sum  Hedef değerlerin toplamı
mean  Hedef değerlerin ortalaması veya ortalaması
min Hedefin en küçük değeri
max Hedefin en büyük değeri
  • Hedef sütun değerleri belirtilen işleme göre toplanır. Genellikle toplam çoğu senaryo için uygundur.
  • Verilerinizdeki sayısal tahmin aracı sütunları toplam, ortalama, minimum değer ve maksimum değere göre toplanır. Sonuç olarak, otomatik ML toplama işlevi adıyla ekli yeni sütunlar oluşturur ve seçili toplama işlemini uygular.
  • Kategorik tahmin sütunları için veriler, penceredeki en belirgin kategori olan moda göre toplanır.
  • Tarih tahmincisi sütunları minimum değer, en büyük değer ve mod tarafından toplanır.

Aşağıdaki örnek sıklığı saatlik olarak, toplama işlevini de toplama olarak ayarlar:

# Aggregate the data to hourly frequency
forecasting_job.set_forecast_settings(
    ...,  # other settings
    frequency='H',
    target_aggregate_function='sum'
)

Özel çapraz doğrulama ayarları

Tahmin işleri için çapraz doğrulamayı denetleyebilen iki özelleştirilebilir ayar vardır: katlama sayısı ve katlamalar n_cross_validationsarasındaki zaman uzaklığını tanımlayan adım boyutu. cv_step_size Bu parametrelerin anlamı hakkında daha fazla bilgi için bkz. tahmin modeli seçimi . Varsayılan olarak, AutoML her iki ayarı da verilerinizin özelliklerine göre otomatik olarak ayarlar, ancak ileri düzey kullanıcılar bunları el ile ayarlamak isteyebilir. Örneğin, günlük satış verileriniz olduğunu ve doğrulama kurulumunuzun bitişik katlar arasında yedi günlük uzaklık içeren beş katlamadan oluşmasını istediğinizi varsayalım. Aşağıdaki kod örneğinde bunların nasıl ayarlanacağı gösterilmektedir:

from azure.ai.ml import automl

# Create a job with five CV folds
forecasting_job = automl.forecasting(
    ...,  # other training parameters
    n_cross_validations=5,
)

# Set the step size between folds to seven days
forecasting_job.set_forecast_settings(
    ...,  # other settings
    cv_step_size=7
)

Özel özellik geliştirme

AutoML, modellerin doğruluğunu artırmak için eğitim verilerini varsayılan olarak tasarlanmış özelliklerle artırır. Daha fazla bilgi için bkz. otomatik özellik mühendisliği . Ön işlem adımlarından bazıları, tahmin işinin set_featurization() yöntemi kullanılarak özelleştirilebilir.

Tahmin için desteklenen özelleştirmeler şunlardır:

Özelleştirme Açıklama Seçenekler
Sütun amaçlı güncelleştirme Belirtilen sütun için otomatik algılanan özellik türünü geçersiz kılın. "Kategorik", "DateTime", "Sayısal"
Transformer parametre güncelleştirmesi Belirtilen imputer için parametreleri güncelleştirin. {"strategy": "constant", "fill_value": <value>}, {"strategy": "median"}, {"strategy": "ffill"}

Örneğin, verilerin fiyat, "satışta" bayrağı ve ürün türü gibi özellikleri içerdiği bir perakende talep senaryonuz olduğunu varsayalım. Aşağıdaki örnek, bu özellikler için özelleştirilmiş türleri ve imputer'leri nasıl ayarlayabileceğinizi gösterir:

from azure.ai.ml.automl import ColumnTransformer

# Customize imputation methods for price and is_on_sale features
# Median value imputation for price, constant value of zero for is_on_sale
transformer_params = {
    "imputer": [
        ColumnTransformer(fields=["price"], parameters={"strategy": "median"}),
        ColumnTransformer(fields=["is_on_sale"], parameters={"strategy": "constant", "fill_value": 0}),
    ],
}

# Set the featurization
# Ensure that product_type feature is interpreted as categorical
forecasting_job.set_featurization(
    mode="custom",
    transformer_params=transformer_params,
    column_name_and_types={"product_type": "Categorical"},
)

Denemeniz için Azure Machine Learning stüdyosu kullanıyorsanız bkz. Stüdyoda özellik geliştirmeyi özelleştirme.

Denemeyi çalıştırma

Tüm ayarlar yapılandırıldıktan sonra tahmin işini mlcient şu şekilde başlatabilirsiniz:

# Submit the AutoML job
returned_job = ml_client.jobs.create_or_update(
    forecasting_job
)

print(f"Created job: {returned_job}")

# Get a URL for the status of the job
returned_job.services["Studio"].endpoint

Eğitilmiş modelle tahmin etme

En iyi modeli eğitmek ve seçmek için AutoML'yi kullandıktan sonra, sonraki adım modeli değerlendirmektir. Gereksinimlerinizi karşılıyorsa, geleceğe yönelik tahminler oluşturmak için kullanabilirsiniz. Bu bölümde değerlendirme ve tahmin için Python betikleri yazma işlemi gösterilmektedir. Çıkarım betiğiyle eğitilmiş bir modeli dağıtma örneği için örnek not defterimize bakın.

Sıralı tahminle model doğruluğunu değerlendirme

Bir modeli üretime yerleştirmeden önce, eğitim verilerinden tutulan bir test kümesinde bu modelin doğruluğunu değerlendirmeniz gerekir. En iyi yöntem yordamı, eğitilen tahminciyi test kümesinde zaman içinde ileriye doğru yuvarlayan ve çeşitli tahmin pencerelerinde hata ölçümlerini ortalamaya alan sıralı bir değerlendirmedir. İdeal olan değerlendirme için test kümesinin modelin tahmin ufkunun uzun olmasıdır. Tahmin hatası tahminleri aksi takdirde istatistiksel olarak gürültülü ve dolayısıyla daha az güvenilir olabilir.

Örneğin, gelecekte iki haftaya (14 güne) kadar talebi tahmin etmek için bir modeli günlük satışlar üzerinde eğitmiş olduğunuzu varsayalım. Yeterli geçmiş veri varsa, test kümesi için verilerin son birkaç ayını bir yıl kadar ayırabilirsiniz. Sıralı değerlendirme, test kümesinin ilk iki haftası için 14 günlük ön tahmin oluşturarak başlar. Ardından, tahmin aracı test kümesine birkaç gün kadar ilerletilir ve yeni konumdan 14 gün ileriye yönelik başka bir tahmin oluşturursunuz. Test kümesinin sonuna gelene kadar işlem devam eder.

Sıralı değerlendirme yapmak için yöntemini fitted_modelçağırırsınız rolling_forecast ve ardından sonuç üzerinde istenen ölçümleri hesaplarsınız. Aşağıdaki kod örneğinde sıralı değerlendirme çıkarımı betiği gösterilir:

"""
This is the script that is executed on the compute instance. It relies
on the model.pkl file which is uploaded along with this script to the
compute instance.
"""

import os
import pandas as pd

from sklearn.externals import joblib


def init():
    global target_column_name
    global fitted_model

    target_column_name = os.environ["TARGET_COLUMN_NAME"]
    # AZUREML_MODEL_DIR is an environment variable created during deployment
    # It is the path to the model folder (./azureml-models)
    # Please provide your model's folder name if there's one
    model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model.pkl")
    try:
        fitted_model = joblib.load(model_path)
    except Exception:
        print("Loading pickle failed. Trying torch.load()")

        import torch
        model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model.pt") 
        device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
        fitted_model = torch.load(model_path, map_location=device)


def run(mini_batch):
    print(f"run method start: {__file__}, run({mini_batch})")
    resultList = []
    for test in mini_batch:
        if not test.endswith(".csv"):
            continue
        X_test = pd.read_csv(test, parse_dates=[fitted_model.time_column_name])
        y_test = X_test.pop(target_column_name).values

        # Make a rolling forecast, advancing the forecast origin by 1 period on each iteration through the test set
        X_rf = fitted_model.rolling_forecast(
            X_test, y_test, step=1, ignore_data_errors=True
        )

        resultList.append(X_rf)

    return pd.concat(resultList, sort=False, ignore_index=True)

Bu örnekte, sıralı tahminin adım boyutu bir olarak ayarlanmıştır. Bu, tahmin edenin her yinelemede bir dönem veya talep tahmini örneğimizde bir gün ileri düzey olduğu anlamına gelir. tarafından rolling_forecast döndürülen toplam tahmin sayısı, test kümesinin uzunluğuna ve bu adım boyutuna bağlıdır. Diğer ayrıntılar ve örnekler için rolling_forecast() belgelerine ve Eğitim verilerinden uzakta tahmin etme not defterine bakın.

Geleceğe yönelik tahmin

forecast_quantiles(), tahmin dağılımının belirli nicelleri için tahminler oluşturur. Böylece bu yöntem, etrafında belirsizlik konisi olan bir nokta tahmini almak için bir yol sağlar. Eğitim verilerinden uzakta tahmin etme not defterinde daha fazla bilgi edinin.

Aşağıdaki örnekte, ilk olarak içindeki y_pred tüm değerleri ile NaNdeğiştirirsiniz. Bu örnekte tahmin kaynağı eğitim verilerinin sonundadır. Ancak, yalnızca ikinci yarısını y_pred ile NaNdeğiştirirseniz, işlev ilk yarıdaki sayısal değerleri değiştirilmemiş olarak bırakır, ancak ikinci yarıdaki değerleri tahmin NaN eder. İşlev hem tahmin edilen değerleri hem de hizalanmış özellikleri döndürür.

Belirtilen tarihe forecast_destination kadar olan değerleri tahmin etmek için işlevindeki forecast_quantiles() parametresini de kullanabilirsiniz.

label_query = test_labels.copy().astype(np.float)
label_query.fill(np.nan)
label_fcst, data_trans = fitted_model.forecast_quantiles(
    test_dataset, label_query, forecast_destination=pd.Timestamp(2019, 1, 8)
)

Burada nicel belirtilmediğinden yalnızca nokta tahmini oluşturulur. Dağılımın belirli bir nicelindeki tahminleri anlamak isteyebilirsiniz. Örneğin, bir bulut hizmeti için market öğeleri veya sanal makineler gibi envanteri denetlemek için tahmin kullanıldığında. Böyle durumlarda denetim noktası genellikle "öğenin stokta olmasını ve zamanın %99'unun dolmasını istemiyoruz" gibi bir şeydir. Aşağıdaki örnek, 50. veya 95. yüzdebirlik gibi tahmin nicellerinin nasıl belirtileceğini gösterir:

# Get forecasts for the 5th, 50th, and 90th percentiles 
fitted_model.quantiles = [0.05, 0.5, 0.9]
fitted_model.forecast_quantiles(
    test_dataset, label_query, forecast_destination=pd.Timestamp(2019, 1, 8)
)

Model performansını tahmin etmeye yardımcı olmak için kök ortalama kare hatası (RMSE) veya ortalama mutlak yüzde hatası (MAPE) gibi model ölçümlerini hesaplayabilirsiniz. Örnek için Bike share demand not defterinin Evaluate bölümüne bakın.

Genel model doğruluğu belirlendikten sonra, sonraki en gerçekçi adım bilinmeyen gelecekteki değerleri tahmin etmek için modeli kullanmaktır.

Test kümesiyle aynı biçimde ancak gelecek tarih saatleriyle bir veri kümesi test_dataset sağlayın; sonuçta elde edilen tahmin kümesi, her zaman serisi adımı için tahmin edilen değerlerdir. Veri kümesindeki son kayıtların 31 Aralık 2018'e yönelik olduğunu varsayalım. Talebi tahmin etmek için 1 Ocak 2019'dan itibaren her mağaza için bir zaman serisi kaydı oluşturun.

day_datetime,store,week_of_year
01/01/2019,A,1
01/01/2019,A,1

Bu gelecekteki verileri bir veri çerçevesine yüklemek için gerekli adımları yineleyin ve ardından gelecekteki değerleri tahmin etmek için komutunu çalıştırın best_run.forecast_quantiles(test_dataset) .

Not

Ve/veya target_rolling_window_size etkinleştirildiğinde target_lags otomatik ML ile tahmin için örnek içi tahminler desteklenmez.

Uygun ölçekte tahmin

ŞUNLAR IÇIN GEÇERLIDIR:Python SDK azureml v1

Önemli

Birçok model ve hiyerarşik zaman serisi şu anda yalnızca AzureML v1'de desteklenmektedir. AzureML v2 desteği yakında sunulacaktır.

Tek bir makine öğrenmesi modelinin yetersiz olduğu ve birden çok makine öğrenmesi modeline ihtiyaç duyulduğu senaryolar vardır. Örneğin, bir marka için her bir mağazanın satışlarını tahmin etme veya bir deneyimi tek tek kullanıcılara uyarlama. Her örnek için bir model oluşturmak, birçok makine öğrenmesi sorununda iyileştirilmiş sonuçlara yol açabilir.

Gruplandırma, zaman serisi tahmininde grup başına tek bir modeli eğitmek için zaman serisinin birleştirilmesine olanak tanıyan bir kavramdır. Bu yaklaşım özellikle düzeltme, doldurma veya gruptaki geçmiş veya diğer varlıkların eğilimlerinden yararlanabilecek varlıklar gerektiren zaman serileriniz varsa yararlı olabilir. Birçok model ve hiyerarşik zaman serisi tahmini, bu büyük ölçekli tahmin senaryoları için otomatik makine öğrenmesi tarafından desteklenen çözümlerdir.

Birçok model

Otomatik makine öğrenmesine sahip Azure Machine Learning birçok model çözümü, kullanıcıların milyonlarca modeli paralel olarak eğitmesini ve yönetmesini sağlar. Çok Modelli Çözüm Hızlandırıcısı, modeli eğitmek için Azure Machine Learning işlem hatlarını kullanır. Özellikle, bir Pipeline nesnesi ve ParalleRunStep kullanılır ve ParallelRunConfig aracılığıyla belirli yapılandırma parametrelerinin ayarlanmasını gerektirir.

Aşağıdaki diyagramda birçok model çözümü için iş akışı gösterilmektedir.

Birçok model kavram diyagramı

Aşağıdaki kod, kullanıcıların çok sayıda modelin çalıştırılmasını ayarlaması gereken anahtar parametreleri gösterir. Birçok model tahmin örneği için Bkz. Çok Modelli- Otomatik ML not defteri

from azureml.train.automl.runtime._many_models.many_models_parameters import ManyModelsTrainParameters

partition_column_names = ['Store', 'Brand']
automl_settings = {"task" : 'forecasting',
                   "primary_metric" : 'normalized_root_mean_squared_error',
                   "iteration_timeout_minutes" : 10, #This needs to be changed based on the dataset. Explore how long training is taking before setting this value 
                   "iterations" : 15,
                   "experiment_timeout_hours" : 1,
                   "label_column_name" : 'Quantity',
                   "n_cross_validations" : "auto", # Could be customized as an integer
                   "cv_step_size" : "auto", # Could be customized as an integer
                   "time_column_name": 'WeekStarting',
                   "max_horizon" : 6,
                   "track_child_runs": False,
                   "pipeline_fetch_max_batch_size": 15,}

mm_paramters = ManyModelsTrainParameters(automl_settings=automl_settings, partition_column_names=partition_column_names)

Hiyerarşik zaman serisi tahmini

Çoğu uygulamada müşterilerin tahminlerini işletmenin makro ve mikro düzeyinde anlaması gerekir; bunun, farklı coğrafi konumlardaki ürünlerin satışlarını tahmin etmek veya bir şirkette farklı kuruluşlar için beklenen iş gücü talebini anlamak olması. Hiyerarşi verilerini akıllı bir şekilde tahmin etmek için makine öğrenmesi modelini eğitmek çok önemlidir.

Hiyerarşik zaman serisi, serinin iç içe özniteliklere sahip olduğu bir yapıdır. Coğrafi veya ürün kataloğu öznitelikleri doğal örneklerdir. Aşağıdaki örnek, hiyerarşi oluşturan benzersiz özniteliklere sahip verileri gösterir. Hiyerarşimiz şu şekilde tanımlanır: kulaklık veya tablet gibi ürün türü, ürün türlerini aksesuarlara ve cihazlara ayıran ürün kategorisi ve ürünlerin satıldığı bölge.

Hiyerarşik veriler için örnek ham veri tablosu

Bunu daha da görselleştirmek için, hiyerarşinin yaprak düzeyleri öznitelik değerlerinin benzersiz birleşimlerine sahip tüm zaman serilerini içerir. Hiyerarşideki her üst düzey, zaman serisini tanımlamak için bir boyut daha az kabul eder ve alt düğüm kümelerini alt düzeyden üst düğüme toplar.

Veriler için hiyerarşi görseli

Hiyerarşik zaman serisi çözümü, Çok Modelli Çözüm'ün üzerine kurulmuştur ve benzer bir yapılandırma kurulumunu paylaşır.

Aşağıdaki kod, hiyerarşik zaman serisi tahmin çalıştırmalarınızı ayarlamak için anahtar parametreleri gösterir. Uçtan uca örnek için Hiyerarşik zaman serisi- Otomatik ML not defterine bakın.


from azureml.train.automl.runtime._hts.hts_parameters import HTSTrainParameters

model_explainability = True

engineered_explanations = False # Define your hierarchy. Adjust the settings below based on your dataset.
hierarchy = ["state", "store_id", "product_category", "SKU"]
training_level = "SKU"# Set your forecast parameters. Adjust the settings below based on your dataset.
time_column_name = "date"
label_column_name = "quantity"
forecast_horizon = 7


automl_settings = {"task" : "forecasting",
                   "primary_metric" : "normalized_root_mean_squared_error",
                   "label_column_name": label_column_name,
                   "time_column_name": time_column_name,
                   "forecast_horizon": forecast_horizon,
                   "hierarchy_column_names": hierarchy,
                   "hierarchy_training_level": training_level,
                   "track_child_runs": False,
                   "pipeline_fetch_max_batch_size": 15,
                   "model_explainability": model_explainability,# The following settings are specific to this sample and should be adjusted according to your own needs.
                   "iteration_timeout_minutes" : 10,
                   "iterations" : 10,
                   "n_cross_validations" : "auto", # Could be customized as an integer
                   "cv_step_size" : "auto", # Could be customized as an integer
                   }

hts_parameters = HTSTrainParameters(
    automl_settings=automl_settings,
    hierarchy_column_names=hierarchy,
    training_level=training_level,
    enable_engineered_explanations=engineered_explanations
)

Örnek not defterleri

Gelişmiş tahmin yapılandırmasının ayrıntılı kod örnekleri için tahmin örneği not defterlerine bakın:

Sonraki adımlar