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
- Ücretli bir F64 veya üzeri Doku kapasitesi kaynağı.
- Yapay zeka becerisi kiracı anahtarı etkinleştirildi.
- Copilot kiracı anahtarı etkinleştirildi.
- Uygunsa yapay zeka için coğrafi bölgeler arası paylaşım etkinleştirilir.
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.
Çalışma alanında yapay zeka becerinizi oluşturmak istediğiniz yeni bir not defteri oluşturun.
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.
Ü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)
Tümünü çalıştır'ı seçin.
Birkaç dakika sonra göl evi gerekli verilerle doldurulur.
Yapay zeka becerisi oluşturma
Yeni bir yapay zeka becerisi oluşturmak için Veri Bilimi deneyimine gidin ve Yapay Zeka Becerisi'ni seçin.
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:
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ınFactResellerSales
.
Soruyu yeniden sormak, Mountain-200 Black, 46
bu ekran görüntüsünde gösterildiği gibi farklı bir yanıt döndürür:
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ınFactResellerSales
. - 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ştirinDimDate
. - 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çindeDimProduct
, önerilen satış fiyatı, içinde iseUnitPrice
FactInternetSales
veFactResellerSales
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:
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.
Ardından bir örneği karşıya yükleyebilirsiniz.
Sorunun tekrarı geliştirilmiş bir yanıt döndürür.
Ö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 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 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:
Yapay zeka becerisinin yayımlanan URL'si, bu ekran görüntüsünde gösterildiği gibi görünür:
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"])