Aracılığıyla paylaş


AdventureWorks veri kümesiyle yapay zeka beceri örneği (önizleme)

Bu makalede AdventureWorks veri kümesinde yapay zeka becerisini yapılandırma gösterilmektedir.

Önemli

Bu özellik önizleme aşamasındadır.

Önkoşullar

AdventureWorksDW ile göl evi oluşturma

İlk olarak bir göl evi oluşturun ve gerekli verilerle doldurun.

Bir depoda veya göl evinde zaten bir AdventureWorksDW örneğiniz varsa bu adımı atlayabilirsiniz. Aksi takdirde, not defterinden bir göl evi oluşturun. Lakehouse'u verilerle doldurmak için not defterini kullanın.

  1. Çalışma alanında yapay zeka becerinizi oluşturmak istediğiniz yeni bir not defteri oluşturun.

  2. Gezgin bölmesinin sol tarafında + Veri kaynakları'nı seçin. Bu seçenek mevcut bir göl evi ekler veya yeni bir göl evi oluşturur.

  3. Üst hücreye aşağıdaki kod parçacığını ekleyin:

    import pandas as pd
    from tqdm.auto import tqdm
    base = "https://synapseaisolutionsa.blob.core.windows.net/public/AdventureWorks"
    
    # load list of tables
    df_tables = pd.read_csv(f"{base}/adventureworks.csv", names=["table"])
    
    for table in (pbar := tqdm(df_tables['table'].values)):
        pbar.set_description(f"Uploading {table} to lakehouse")
    
        # download
        df = pd.read_parquet(f"{base}/{table}.parquet")
    
        # save as lakehouse table
        spark.createDataFrame(df).write.mode('overwrite').saveAsTable(table)
    
  4. Tümünü çalıştır'ı seçin.

    AdventureWorks karşıya yükleme kodunu içeren bir not defterini gösteren ekran görüntüsü.

Birkaç dakika sonra göl evi gerekli verilerle doldurulur.

Yapay zeka becerisi oluşturma

  1. Yeni bir yapay zeka becerisi oluşturmak için Veri Bilimi deneyimine gidin ve Yapay Zeka Becerisi'ni seçin.

    Yapay zeka becerilerinin nerede oluşturulacağını gösteren ekran görüntüsü.

  2. Yapay zeka becerisi oluşturmak için bir ad girin.

Verileri seçme

Oluşturduğunuz göl evi'ni seçin ve Bağlan'ı seçin. Ardından yapay zeka becerisinin kullanılabilir erişime sahip olmasını istediğiniz tabloları seçmeniz gerekir.

Bu alıştırmada şu tablolar kullanılır:

  • DimCustomer
  • DimDate
  • DimGeography
  • DimProduct
  • DimProductCategory
  • DimPromotion
  • DimReseller
  • DimSalesTerritory
  • FactInternetSales
  • FactResellerSales

Yönergeleri sağlayın

Listelenen tabloların seçili olduğu yapay zeka becerileri sorularını ilk kez sorduğunuzda yapay zeka becerisi bunları oldukça iyi yanıtlar. Örneğin, en çok satılan ürün nedir? sorusu için yapay zeka becerisi şunları döndürür:

  • Long-Sleeve Logo Jersey, L

Ancak SQL sorgusunun biraz geliştirilmesi gerekir. İlk olarak, yalnızca tabloya FactResellerSales bakar. Tabloyu yoksayar FactInternetSales . İkinci olarak, bu ekran görüntüsünde gösterildiği gibi ürünle ilişkili toplam satış geliri en önemli nokta olduğunda ürünleri sipariş miktarına göre sipariş eder:

İlk örnek yapay zeka becerisi en yüksek satış ürünü sorusunu gösteren ekran görüntüsü.

Sorgu oluşturmayı geliştirmek için aşağıdaki örneklerde gösterildiği gibi bazı yönergeler sağlayın:

  • "En çok satılan" ürünler veya ürünler hakkında her soru sorduğumda, ilgi alanı ölçümü sipariş miktarı değil toplam satış geliridir.
  • Kullanılacak birincil tablo şeklindedir FactInternetSales. Yalnızca yeniden satışlar hakkında açıkça sorulduğunda veya toplam satışlar sorulduğunda kullanın FactResellerSales .

Soruyu yeniden sormak, Mountain-200 Black, 46bu ekran görüntüsünde gösterildiği gibi farklı bir yanıt döndürür:

İkinci örnek yapay zeka becerisi en yüksek satış ürünü sorusunu gösteren ekran görüntüsü.

Karşılık gelen SQL tablodan FactInternetSales çizer ve satış tutarının toplamına göre sıralanır. Yapay zeka yönergeleri takip etti.

Sorgularla deneme yapmaya devam ettikçe, daha fazla yönerge eklemeniz gerekir.

Bu senaryoda aşağıdaki yönergeler kümesi kullanılır:

  • "En çok satılan" ürünler veya ürünler hakkında her soru sorduğumda, ilgi alanı ölçümü sipariş miktarı değil satış geliridir.
  • Kullanılacak birincil tablo şeklindedir FactInternetSales. Yalnızca yeniden satışlar hakkında açıkça sorulduğunda veya toplam satışlar sorulduğunda kullanın FactResellerSales .
  • Promosyonların etkisi sorulduğunda, bunu yalnızca satılan birim sayısıyla değil, satış gelirindeki artış üzerinde yapın.
  • Müşteri içgörüleri için sipariş sayısı yerine müşteri başına toplam satış tutarına odaklanın.
  • Zaman tabanlı analiz gerçekleştirirken belirli zaman aralıklarını (örneğin, yıl, ay) ayıklamak için kullanın DimDate .
  • Coğrafi verileri analiz ederken, her bölge için sipariş başına toplam satış geliri ve ortalama satış önceliğini belirleyin.
  • Ürün kategorisi içgörüleri için, ürünleri her zaman uygun şekilde gruplandırmak için kullanın DimProductCategory .
  • Bölgeler arasındaki satışları karşılaştırırken, doğru bölge ayrıntıları için kullanın DimSalesTerritory .
  • Farklı para birimlerindeki satışları analiz ediyorsanız satış verilerini normalleştirmek için kullanın DimCurrency .
  • Ayrıntılı ürün bilgileri için her zaman ile katılın FactInternetSales DimProduct.
  • Farklı tanıtım kampanyalarının etkinliğini analiz etmek için kullanın DimPromotion .
  • Kurumsal bayi performansı için yalnızca satılan ürün sayısına değil toplam satış miktarına odaklanın.
  • Zaman içindeki eğilimleri analiz ederken verileri aya, çeyreğe veya yıla göre gruplandırmak için kullanın FactInternetSales ve birleştirin DimDate .
  • Her zaman ilgili boyut tablolarıyla birleştirerek FactInternetSales veri tutarlılığını denetleyin.
  • Toplam değerleri doğru bir şekilde yakaladığınızı güvence altına almak için satış verilerini toplamak için TOPLA işlevini kullanın.
  • Mali etkiyi doğru bir şekilde ölçmek için satış geliri ölçümlerini sipariş miktarına göre öncelik sırasına göre belirleyin.
  • Ayrıntılı içgörüler elde etmek için her zaman ilgili boyutlara (ürün, müşteri, tarih gibi) göre gruplandırma yapın.
  • Müşteri demografisi sorulduğunda ilgili olgu tablolarına katılın DimCustomer .
  • Promosyona göre satışlar için ile katılın FactInternetSales DimPromotion ve promosyon adına göre gruplandırma yapın.
  • Farklı para birimleri içeren karşılaştırmalar için kullanarak DimCurrency satış rakamlarını normalleştirin.
  • Sonuçları ilgilendiğiniz ölçüme göre sıralamak için yan tümceleri kullanın ORDER BY (örneğin, satış geliri, toplam siparişler).
  • ListPrice içinde DimProduct , önerilen satış fiyatı, içinde ise UnitPrice FactInternetSales ve FactResellerSales her birimin satıldığı gerçek fiyattır. Gelire ilişkin çoğu kullanım örneğinde birim fiyatı kullanılmalıdır.
  • En iyi kurumsal bayileri satış tutarına göre sırala.

Bu metni model metin kutusunun notlarına kopyalarsanız, yapay zeka SQL sorgularını oluştururken bu yönergelere başvurur.

Örnekler sağlayın

Yönergelere ek olarak, örnekler yapay zekaya yol göstermenin başka bir etkili yoludur. Yapay zeka becerinizin sıklıkla aldığı sorularınız veya karmaşık birleşimler gerektiren sorularınız varsa, bunlar için örnekler eklemeyi göz önünde bulundurun.

Örneğin, 1 Haziran 2013'te kaç etkin müşterimiz oldu sorusu, bu ekran görüntüsünde gösterildiği gibi bazı geçerli SQL'ler oluşturur:

İlk örnek yapay zeka becerisi etkin müşteri sayısı sorusunu gösteren ekran görüntüsü.

Ancak, bu iyi bir yanıt değildir.

Sorunun bir bölümü, "etkin müşterinin" resmi bir tanımı olmamasıdır. Model metin kutusuna ilişkin notlardaki diğer yönergeler yardımcı olabilir, ancak kullanıcılar bu soruyu sık sık sorabilir. Yapay zekanın soruyu doğru işlediğinden emin olmanız gerekir. İlgili sorgu orta derecede karmaşıktır, bu nedenle düzenle düğmesini seçerek bir örnek sağlayın.

Yapay zekaya sağladığınız örnekleri nerede düzenleyebileceğinizi gösteren ekran görüntüsü.

Ardından bir örneği karşıya yükleyebilirsiniz.

Örnek yapay zeka becerisi SQL sorgusunu gösteren ekran görüntüsü.

Sorunun tekrarı geliştirilmiş bir yanıt döndürür.

İkinci örnek yapay zeka becerisi etkin müşteri sayısı sorusunu gösteren ekran görüntüsü.

Örnekleri el ile ekleyebilirsiniz, ancak bunları bir JSON dosyasından da karşıya yükleyebilirsiniz. Bir dosyadan örnek sağlamak, sorguları tek tek el ile yüklemek yerine aynı anda yüklemek istediğiniz çok sayıda SQL sorgunuz olduğunda yararlı olur. Bu alıştırma için şu örnekleri kullanın:

{
    "how many active customers did we have June 1st, 2010?": "SELECT COUNT(DISTINCT fis.CustomerKey) AS ActiveCustomerCount FROM factinternetsales fis JOIN dimdate dd ON fis.OrderDateKey = dd.DateKey WHERE dd.FullDateAlternateKey BETWEEN DATEADD(MONTH, -6, '2010-06-01') AND '2010-06-01' GROUP BY fis.CustomerKey HAVING COUNT(fis.SalesOrderNumber) >= 2;",
    "which promotion was the most impactful?": "SELECT dp.EnglishPromotionName, SUM(fis.SalesAmount) AS PromotionRevenue FROM factinternetsales fis JOIN dimpromotion dp ON fis.PromotionKey = dp.PromotionKey GROUP BY dp.EnglishPromotionName ORDER BY PromotionRevenue DESC;",
    "who are the top 5 customers by total sales amount?": "SELECT TOP 5 CONCAT(dc.FirstName, ' ', dc.LastName) AS CustomerName, SUM(fis.SalesAmount) AS TotalSpent FROM factinternetsales fis JOIN dimcustomer dc ON fis.CustomerKey = dc.CustomerKey GROUP BY CONCAT(dc.FirstName, ' ', dc.LastName) ORDER BY TotalSpent DESC;",
    "what is the total sales amount by year?": "SELECT dd.CalendarYear, SUM(fis.SalesAmount) AS TotalSales FROM factinternetsales fis JOIN dimdate dd ON fis.OrderDateKey = dd.DateKey GROUP BY dd.CalendarYear ORDER BY dd.CalendarYear;",
    "which product category generated the highest revenue?": "SELECT dpc.EnglishProductCategoryName, SUM(fis.SalesAmount) AS CategoryRevenue FROM factinternetsales fis JOIN dimproduct dp ON fis.ProductKey = dp.ProductKey JOIN dimproductcategory dpc ON dp.ProductSubcategoryKey = dpc.ProductCategoryKey GROUP BY dpc.EnglishProductCategoryName ORDER BY CategoryRevenue DESC;",
    "what is the average sales amount per order by territory?": "SELECT dst.SalesTerritoryRegion, AVG(fis.SalesAmount) AS AvgOrderValue FROM factinternetsales fis JOIN dimsalesterritory dst ON fis.SalesTerritoryKey = dst.SalesTerritoryKey GROUP BY dst.SalesTerritoryRegion ORDER BY AvgOrderValue DESC;",
    "what is the total sales amount by currency?": "SELECT dc.CurrencyName, SUM(fis.SalesAmount) AS TotalSales FROM factinternetsales fis JOIN dimcurrency dc ON fis.CurrencyKey = dc.CurrencyKey GROUP BY dc.CurrencyName ORDER BY TotalSales DESC;",
    "which product had the highest sales revenue last year?": "SELECT dp.EnglishProductName, SUM(fis.SalesAmount) AS TotalRevenue FROM factinternetsales fis JOIN dimproduct dp ON fis.ProductKey = dp.ProductKey JOIN dimdate dd ON fis.ShipDateKey = dd.DateKey WHERE dd.CalendarYear = YEAR(GETDATE()) - 1 GROUP BY dp.EnglishProductName ORDER BY TotalRevenue DESC;",
    "what are the monthly sales trends for the last year?": "SELECT dd.CalendarYear, dd.MonthNumberOfYear, SUM(fis.SalesAmount) AS TotalSales FROM factinternetsales fis JOIN dimdate dd ON fis.ShipDateKey = dd.DateKey WHERE dd.CalendarYear = YEAR(GETDATE()) - 1 GROUP BY dd.CalendarYear, dd.MonthNumberOfYear ORDER BY dd.CalendarYear, dd.MonthNumberOfYear;",
    "how did the latest promotion affect sales revenue?": "SELECT dp.EnglishPromotionName, SUM(fis.SalesAmount) AS PromotionRevenue FROM factinternetsales fis JOIN dimpromotion dp ON fis.PromotionKey = dp.PromotionKey WHERE dp.StartDate >= DATEADD(MONTH, 0, GETDATE()) GROUP BY dp.EnglishPromotionName ORDER BY PromotionRevenue DESC;",
    "which territory had the highest sales revenue?": "SELECT dst.SalesTerritoryRegion, SUM(fis.SalesAmount) AS TotalSales FROM factinternetsales fis JOIN dimsalesterritory dst ON fis.SalesTerritoryKey = dst.SalesTerritoryKey GROUP BY dst.SalesTerritoryRegion ORDER BY TotalSales DESC;",
    "who are the top 5 resellers by total sales amount?": "SELECT TOP 5 dr.ResellerName, SUM(frs.SalesAmount) AS TotalSales FROM factresellersales frs JOIN dimreseller dr ON frs.ResellerKey = dr.ResellerKey GROUP BY dr.ResellerName ORDER BY TotalSales DESC;",
    "what is the total sales amount by customer region?": "SELECT dg.EnglishCountryRegionName, SUM(fis.SalesAmount) AS TotalSales FROM factinternetsales fis JOIN dimcustomer dc ON fis.CustomerKey = dc.CustomerKey JOIN dimgeography dg ON dc.GeographyKey = dg.GeographyKey GROUP BY dg.EnglishCountryRegionName ORDER BY TotalSales DESC;",
    "which product category had the highest average sales price?": "SELECT dpc.EnglishProductCategoryName, AVG(fis.UnitPrice) AS AvgPrice FROM factinternetsales fis JOIN dimproduct dp ON fis.ProductKey = dp.ProductKey JOIN dimproductcategory dpc ON dp.ProductSubcategoryKey = dpc.ProductCategoryKey GROUP BY dpc.EnglishProductCategoryName ORDER BY AvgPrice DESC;"
}

Yapay zeka becerisini test edin ve düzeltin

Yapay zeka becerisine hem yönergeler hem de örnekler eklendi. Test işlemi devam ettikçe daha fazla örnek ve yönerge yapay zeka becerisini daha da geliştirebilir. İş arkadaşlarınızla birlikte çalışarak, sormak istedikleri soru türlerini kapsayan örnekler ve yönergeler sağlayıp sağlamadığınıza bakın.

Yapay zeka becerisini program aracılığıyla kullanma

Yapay zeka becerisini bir Doku not defteri içinde program aracılığıyla kullanabilirsiniz. Yapay zeka becerisinin yayımlanmış bir URL değerine sahip olup olmadığını belirlemek için, bu ekran görüntüsünde gösterildiği gibi Ayarlar'ı seçin:

Yapay zeka beceri ayarlarının seçimini gösteren ekran görüntüsü.

Yapay zeka becerisini yayımlamadan önce, bu ekran görüntüsünde gösterildiği gibi yayımlanmış bir URL değeri yoktur:

Yapay zeka becerisinin yayımlanmadan önce yayımlanmış bir URL değerine sahip olmadığını gösteren ekran görüntüsü.

Yapay zeka becerisinin performansını doğruladıktan sonra yayımlamaya karar verebilirsiniz. Bu durumda, bu ekran görüntüsünde gösterildiği gibi Yayımla'yı seçin:

Yayımla seçeneğinin seçimini gösteren ekran görüntüsü.

Yapay zeka becerisinin yayımlanan URL'si, bu ekran görüntüsünde gösterildiği gibi görünür:

Yayımlanan URL'yi gösteren ekran görüntüsü.

Ardından yayımlanan URL'yi kopyalayıp Doku not defterinde kullanabilirsiniz. Bu şekilde, Bir Doku not defterinde yapay zeka beceri API'sine çağrılar yaparak yapay zeka becerisini sorgulayabilirsiniz. Kopyalanan URL'yi bu kod parçacığına yapıştırın. Ardından soruyu yapay zeka becerinizle ilgili herhangi bir sorguyla değiştirin. Bu örnekte URL olarak kullanılır \<generic published URL value\> .

import requests
import json
import pprint
from synapse.ml.mlflow import get_mlflow_env_config


# the URL could change if the workspace is assigned to a different capacity
url = "https://<generic published URL value>"

configs = get_mlflow_env_config()

headers = {
    "Authorization": f"Bearer {configs.driver_aad_token}",
    "Content-Type": "application/json; charset=utf-8"
}

question = "{userQuestion: \"what is an example product?\"}"

response = requests.post(url, headers=headers, data = question)

print("RESPONSE: ", response)

print("")

response = json.loads(response.content)

print(response["result"])