Esimerkki tekoälyn taidoista AdventureWorks-tietojoukossa (esikatselu)
Tässä artikkelissa kerrotaan, miten voit määrittää tekoälytaidon AdventureWorks-tietojoukossa.
Edellytykset
- Maksullinen F64 tai uudempi Fabric-kapasiteetin resurssi.
- Tekoälyn taitojen vuokraajan valitsin on käytössä.
- Copilot-vuokraajavalitsin on käytössä.
- Tekoälyn Geon välinen jakaminen on tarvittaessa käytössä.
Luo lakehouse AdventureWorksDW:n avulla
Luo ensin lakehouse ja täytä se tarvittavilla tiedoilla.
Jos sinulla on jo AdventureWorksDW-esiintymä varastossa tai lakehousessa, voit ohittaa tämän vaiheen. Jos ei, luo lakehouse muistikirjasta. Muistikirjan avulla voit täyttää Lakehousen tiedoilla.
Luo työtilaan uusi muistikirja, johon haluat luoda tekoälytaitosi.
Valitse resurssienhallintaruudun vasemmasta reunasta + Tietolähteet. Tämä vaihtoehto lisää olemassa olevan lakehousen tai luo uuden lakehousen.
Lisää yläreunan soluun seuraava koodikatkelman:
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)
Valitse Suorita kaikki.
Muutaman minuutin kuluttua Lakehouse täytetään tarvittavilla tiedoilla.
Tekoälytaidon luominen
Jos haluat luoda uuden tekoälytaidon, siirry datatieteen kokemukseen ja valitse Tekoälyn taito.
Anna nimi tekoälytaidon luomiseksi.
Valitse tiedot
Valitse luomasi lakehouse-kohta ja valitse Yhdistä. Valitse sitten taulukot, joihin haluat tekoälytaidon olevan käytettävissä.
Tässä harjoituksessa käytetään seuraavia taulukoita:
DimCustomer
DimDate
DimGeography
DimProduct
DimProductCategory
DimPromotion
DimReseller
DimSalesTerritory
FactInternetSales
FactResellerSales
Anna ohjeet
Kun esität tekoälyn taitokysymykset luettelossa olevien taulukoiden ollessa valittuina, tekoälytaidot vastaavat niihin melko hyvin. Esimerkiksi kysymykselle Mikä on myydyin tuote?, tekoälyn taidot palauttavat arvon:
Long-Sleeve Logo Jersey, L
SQL-kysely tarvitsee kuitenkin jonkin verran parannusta. Ensinnäkin se tarkastelee vain taulukkoa FactResellerSales
. Se ohittaa FactInternetSales
taulukon. Toiseksi se tilaa tuotteet tilausmäärän mukaan, kun tuotteeseen liittyvä kokonaismyyntituotto on tärkein huomioita, kuten tässä näyttökuvassa esitetään:
Jos haluat parantaa kyselyn luontia, anna tässä esimerkissä esitetyt ohjeet:
- Aina kun kysyn eniten myydyistä tuotteista tai kohteista, koron mittausarvo on kokonaismyyntituotto tilausmäärän sijaan.
- Käytettävä ensisijainen taulukko on
FactInternetSales
. Käytä vainFactResellerSales
, jos sitä kysytään eksplisiittisesti uusista myynneistä tai kun sinulta kysytään kokonaismyynnistä.
Kysymyksen esittäminen uudelleen palauttaa toisen vastauksen, Mountain-200 Black, 46
kuten tässä näyttökuvassa näkyy:
Vastaava SQL ammentaa taulukosta FactInternetSales
, ja se lajittelee myyntisumman mukaan. Tekoäly noudatti ohjeita.
Kun jatkat kyselyjen kokeilemista, lisää lisää ohjeita.
Tässä skenaariossa käytetään seuraavia ohjeita:
- Aina kun kysyn eniten myydyistä tuotteista tai kohteista, koron mittausarvo on myyntituotto eikä tilausmäärä.
- Käytettävä ensisijainen taulukko on
FactInternetSales
. Käytä vainFactResellerSales
, jos sitä kysytään eksplisiittisesti uusista myynneistä tai kun sinulta kysytään kokonaismyynnistä. - Kun sinulta kysytään kampanjoiden vaikutuksesta, tee se myyntitulojen kasvulle, ei vain myytyjen yksiköiden määrälle.
- Asiakkaan merkityksellisissä toiminnoissa painopisteenä on kokonaismyyntimäärä asiakasta kohden tilausten määrän sijaan.
- -parametrin avulla
DimDate
voit poimia tiettyjä ajanjaksoja (esimerkiksi vuosi, kuukausi) aikaan perustuvan analyysin suorittamisessa. - Kun analysoit maantieteellisiä tietoja, priorisoi kokonaismyyntituotto ja keskimääräinen myynti tilausta kohden kullakin alueella.
- Tuoteluokan merkitykselliset tiedot on aina ryhmitellä
DimProductCategory
tuotteet sen mukaan. - Kun vertailet myyntiä alueiden välillä, käytä tätä
DimSalesTerritory
tarkkojen aluetietojen tarkkuudella. - Käytä tätä
DimCurrency
myyntitietojen normalisointiin eri valuuttojen myyntiä analysoitaessa. - Saat tarkat tuotetiedot liittyen aina :n
FactInternetSales
kanssaDimProduct
. - Käytä tätä
DimPromotion
erilaisten kampanjoiden tehokkuuden analysointiin. - Jälleenmyyjän tuloksessa painopisteenä on kokonaismyyntimäärä eikä pelkästään myytyjen tuotteiden määrää.
- Kun analysoit ajan mittaan syntyviä trendejä, käytä
FactInternetSales
ryhmittele tietoja ja liity niiden kanssaDimDate
kuukauden, vuosineljänneksen tai vuoden mukaan. - Tarkista aina tietojen yhdenmukaisuus liittymällä
FactInternetSales
vastaaviin dimensiotaulukoihin. - Käytä SUM-funktiota myyntitietojen koostamiseen, jotta voit varmistaa, että kokonaisarvot ovat oikein tallennettuja.
- Priorisoi myyntituoton mittarit tilausmäärän sijaan, jotta voit arvioida taloudellista vaikutusta tarkasti.
- Ryhmittele aina asianmukaisten dimensioiden mukaan (esimerkiksi tuote, asiakas, päivämäärä) saadaksesi yksityiskohtaisia tietoja.
- Kun sinulta kysytään asiakkaiden demografisista taulukoista, liity
DimCustomer
asianmukaisiin faktataulukoihin. - Jos kyseessä on myynti ylentämällä, liity :n
FactInternetSales
kanssaDimPromotion
ja ryhmittele kampanjan nimen mukaan. - Normalisoi myyntiluvut käyttämällä
DimCurrency
eri valuuttoihin liittyviä vertailuja. - Käytä
ORDER BY
lauseita tulosten lajittelemiseen korkomittarin mukaan (esimerkiksi myyntituotto, tilausten kokonaismäärä). ListPrice
onDimProduct
ehdotettu myyntihinta, kun taasUnitPrice
FactInternetSales
in jaFactResellerSales
on todellinen hinta, jolla kukin yksikkö myytiin. Useimmissa tuoton käyttötapauksissa tulee käyttää yksikköhintaa.- Aseta parhaat jälleenmyyjät paremmuusjärjestykseen myyntisumman mukaan.
Jos kopioit tämän tekstin mallin tekstiruudun muistiinpanoihin, tekoäly viittaa näihin ohjeisiin, kun se luo SQL-kyselynsä.
Anna esimerkkejä
Ohjeiden lisäksi myös esimerkkejä on tehokas tapa ohjata tekoälyä. Jos sinulla on kysymyksiä, joita tekoälytaitosi usein vastaanottaa tai jos sinulla on kysymyksiä, jotka edellyttävät monimutkaisia liitoksia, harkitse esimerkkien lisäämistä niistä.
Esimerkiksi kysymys Siitä, montako aktiivista asiakasta meillä oli 1.6.2013 , luo kelvollisen SQL:n, kuten tässä näyttökuvassa esitetään:
Se ei kuitenkaan ole hyvä vastaus.
Osa ongelmaa on se, että "aktiivisella asiakkaalla" ei ole muodollista määritelmää. Lisäohjeista mallin tekstiruudun huomautuksista voi olla apua, mutta käyttäjät saattavat usein esittää tämän kysymyksen. Varmista, että tekoäly käsittelee kysymyksen oikein. Asianmukainen kysely on kohtalaisen monimutkainen, joten anna esimerkki valitsemalla Muokkaa-painike.
Sen jälkeen voit ladata esimerkin.
Kysymyksen toistaminen palauttaa parannetun vastauksen.
Voit lisätä esimerkkejä manuaalisesti, mutta voit myös ladata ne JSON-tiedostosta. Esimerkkien lisääminen tiedostosta on hyödyllistä, kun sinulla on useita SQL-kyselyitä, jotka haluat ladata kaikki kerrallaan sen sijaan, että lataat kyselyt manuaalisesti yksi kerrallaan. Käytä tässä harjoituksessa seuraavia esimerkkejä:
{
"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;"
}
Tekoälytaidon testaaminen ja muokkaaminen
Sekä ohjeet että esimerkit lisättiin tekoälytaitoihin. Testauksen edetessä lisää esimerkkejä ja ohjeita voi parantaa tekoälytaitoa entisestään. Kysy työtovereiltasi, oletko antanut esimerkkejä ja ohjeita siitä, millaisia kysymyksiä he haluavat esittää.
Tekoälytaitojen ohjelmallinen käyttö
Voit käyttää tekoälytaitoa ohjelmallisesti Fabric-muistikirjassa. Voit määrittää, onko tekoälytaidolla julkaistu URL-arvo, valitsemalla Asetukset tässä näyttökuvassa esitetyllä tavalla:
Ennen kuin julkaiset tekoälytaidon, sillä ei ole julkaistua URL-arvoa seuraavassa näyttökuvassa esitetyllä tavalla:
Kun olet vahvistanut tekoälytaidon suorituskyvyn, voit halutessasi julkaista sen. Valitse tässä tapauksessa Julkaise tässä näyttökuvassa esitetyllä tavalla:
Tekoälytaidolle julkaistu URL-osoite tulee näkyviin seuraavassa näyttökuvassa esitetyllä tavalla:
Voit sitten kopioida julkaistun URL-osoitteen ja käyttää sitä Fabric-muistikirjassa. Näin voit tehdä kyselyjä tekoälytaidoista kutsumalla tekoälyn taitojen ohjelmointirajapintaa Fabric-muistikirjassa. Liitä kopioitu URL-osoite tähän koodikatkelmaan. Korvaa sitten kysymys millä tahansa tekoälytaidollesi liittyvällä kyselyllä. Tätä esimerkkiä käytetään \<generic published URL value\>
URL-osoitteena.
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"])