Öğretici: Azure Notebook'ta Kişiselleştirme'i kullanma
Bu öğretici, Bir Kişiselleştirme döngüsünün sona erer yaşam döngüsünü gösteren bir Azure Notebook'ta Kişiselleştirme döngüsü çalıştırır.
döngüsü, müşterinin hangi kahve türünü sipariş etmek gerektiğini önerir. Kullanıcılar ve tercihleri bir kullanıcı veri kümesinde depolanır. Kahveyle ilgili bilgiler bir kahve veri kümesinde depolanır.
Kullanıcılar ve kahve
Bir web sitesiyle kullanıcı etkileşiminin benzetimini yapılan not defteri, veri kümesinden rastgele bir kullanıcı, günün saati ve hava durumu türünü seçer. Kullanıcı bilgisinin özeti şu şekildedir:
| Müşteriler - bağlam özellikleri | Günün Saatleri | Hava durumu türleri |
|---|---|---|
| Alice Bob Cathy Demirci |
Sabah Öğle -den sonra Akşam |
Güneşli Yağmurlu Karlı |
Kişiselleştirme'nin zaman içinde öğrenmesini yardımcı olmak için sistem, her bir kişiye yönelik kahve seçimiyle ilgili ayrıntıları da biliyor.
| Kahve - eylem özellikleri | Sıcaklık türleri | Kaynak yerler | Kavurma türleri | Organik |
|---|---|---|---|---|
| Cappacino | Sık Erişimli | Kenya | Koyu | Organik |
| Soğuk kahve | Soğuk | Brezilya | Açık | Organik |
| Iced mocha | Soğuk | Etiyopya | Açık | Organik değil |
| Latte | Sık Erişimli | Brezilya | Koyu | Organik değil |
Kişiselleştirme döngüsünde amaç, kullanıcılarla kahve arasındaki en iyi eşleşmeyi mümkün olduğunca bulmaktır.
Bu öğreticinin kodu, kişiselleştirme örnekleri GitHub kullanılabilir.
Simülasyon nasıl çalışır?
Çalışan sistemin başında Kişiselleştirme'den gelen öneriler yalnızca %20 ile %30 arasında başarılı olur. Bu başarı, Kişiselleştirme Ödülü API'sinde 1 puanıyla geri gönderilen ödülle belirtilmiştir. Bazı Derece ve Ödül çağrıları sonrasında sistem iyiye ilerler.
İlk istekler sonrasında çevrimdışı bir değerlendirme çalıştırın. Bu, Kişiselleştirme'nin verileri gözden geçirmesini ve daha iyi bir öğrenme ilkesi önermesini sağlar. Yeni öğrenme ilkesi uygulama ve not defterini önceki istek sayımının %20'si ile yeniden çalıştırma. Döngü, yeni öğrenme ilkesiyle daha iyi performans sergileyecek.
Derece ve ödül çağrıları
Kişiselleştirme hizmetine yapılan birkaç bin çağrının her biri için Azure Notebook, Sıralama isteğini REST API:
- Sıralama/İstek olayı için benzersiz bir kimlik
- Bağlam özellikleri - Kullanıcının, hava durumunun ve günün saatlerinin rastgele bir seçimi; bir web sitesinde veya mobil cihazda bir kullanıcının benzetimlerini yapmak
- Özelliklerle Eylemler - Kişiselleştirme'nin öneride bulunan tüm kahve verileri
Sistem isteği alır, ardından bu tahmini kullanıcının bilinen seçimiyle gün ve hava durumuyla aynı saatle karşılar. Bilinen seçim, tahmin edilen seçimle aynı ise 1 Ödülü Kişiselleştirme'ye geri gönderilir. Aksi takdirde geri gönderilen ödül 0 olur.
Not
Bu bir simülasyondur, dolayısıyla ödülün algoritması basittir. Gerçek dünya senaryosunda algoritma, ödül puanını belirlemek için müşteri deneyiminin çeşitli yönlerine göre ağırlıklarla birlikte iş mantığını kullansa iyi olur.
Önkoşullar
- Bir Azure Notebook hesabı.
- Bir Azure Kişiselleştirme kaynağı.
- Kişiselleştirme kaynağını zaten kullandıysanız, kaynağın veri kaynağı için Azure portal emin olun.
- Upload için tüm dosyaları bir Azure Notebook projesine dönüştürebilirsiniz.
Dosya açıklamaları:
- Kişiselleştirme.ipynb, bu öğreticinin Jupyter not defteridir.
- Kullanıcı veri kümesi bir JSON nesnesinde depolanır.
- Kahve veri kümesi bir JSON nesnesinde depolanır.
- Örnek İstek JSON'u, Derece API'sini post isteği için beklenen biçimdir.
Kişiselleştirme kaynağını yapılandırma
Bu Azure portal, Kişiselleştirme kaynağınızı güncelleştirme modeli sıklığı 15 saniye ve ödül bekleme süresi 15 saniye olacak şekilde yapılandırabilirsiniz. Bu değerler Yapılandırma sayfasında bulunur.
| Ayar | Değer |
|---|---|
| model sıklığını güncelleştirme | 15 saniye |
| ödül bekleme süresi | 15 saniye |
Bu öğreticide yapılan değişiklikleri göstermek için bu değerlerin süresi çok kısadır. Bu değerler, Kişiselleştirme döngüyüzle hedefinize ulaşmalarını doğrulamadan bir üretim senaryosunda kullanılmaması gerekir.
Azure Notebook'ları ayarlama
- Çekirdeği olarak
Python 3.6değiştirme. Personalizer.ipynbdosyasını açın.
Not defteri hücrelerini çalıştırma
Her yürütülebilir hücreyi çalıştırın ve geri dönmesini bekleyin. Bunun, hücrenin yanındaki köşeli ayraçlar yerine bir sayı görüntüleye zaman * yapılır. Aşağıdaki bölümlerde her hücrenin program aracılığıyla ne yaptığı ve çıkış için neler beklentiği açıklanmaktadır.
Python modüllerini dahil etmek
Gerekli Python modüllerini dahil etmek. Hücrenin çıkışı yok.
import json
import matplotlib.pyplot as plt
import random
import requests
import time
import uuid
Kişiselleştirme kaynak anahtarını ve adını ayarlama
Bu Azure portal, Kişiselleştirme kaynağınıza yönelik Hızlı Başlangıç sayfasında anahtarınızı ve uç noktanızı bulun. değerini Kişiselleştirme <your-resource-name> kaynağınıza göre değiştirebilirsiniz. değerini Kişiselleştirme <your-resource-key> anahtarınız olarak değiştirme.
# Replace 'personalization_base_url' and 'resource_key' with your valid endpoint values.
personalization_base_url = "https://<your-resource-name>.cognitiveservices.azure.com/"
resource_key = "<your-resource-key>"
Geçerli tarih ve saati yazdırma
Yinelemeli işlevin yinelemelerinin başlangıç ve bitiş saatlerini not etmek için bu işlevi kullanın.
Bu hücrelerin çıkışı yoktur. İşlev, çağrıldık zaman geçerli tarih ve saati çıkış olarak verir.
# Print out current datetime
def currentDateTime():
currentDT = datetime.datetime.now()
print (str(currentDT))
Son model güncelleştirme zamanlarını al
işlevi çağrıldıkça işlev, modelin get_last_updated güncelleştirilmiş olduğu son değiştirme tarihini ve saati yazdırır.
Bu hücrelerin çıkışı yoktur. İşlev, çağrıldık son model eğitim tarihini verir.
İşlev, model özelliklerini almak REST API bir GET işlevi kullanır.
# ititialize variable for model's last modified date
modelLastModified = ""
def get_last_updated(currentModifiedDate):
print('-----checking model')
# get model properties
response = requests.get(personalization_model_properties_url, headers = headers, params = None)
print(response)
print(response.json())
# get lastModifiedTime
lastModifiedTime = json.dumps(response.json()["lastModifiedTime"])
if (currentModifiedDate != lastModifiedTime):
currentModifiedDate = lastModifiedTime
print(f'-----model updated: {lastModifiedTime}')
İlke ve hizmet yapılandırmasını al
Bu iki REST çağrısıyla hizmetin durumunu doğrulama.
Bu hücrelerin çıkışı yoktur. İşlev çağrıldıkta hizmet değerlerinin çıkışını verir.
def get_service_settings():
print('-----checking service settings')
# get learning policy
response = requests.get(personalization_model_policy_url, headers = headers, params = None)
print(response)
print(response.json())
# get service settings
response = requests.get(personalization_service_configuration_url, headers = headers, params = None)
print(response)
print(response.json())
URL'leri oluşturma ve JSON veri dosyalarını okuma
Bu hücre
- REST çağrılarında kullanılan URL'leri derleme
- Kişiselleştirme kaynak anahtarınızı kullanarak güvenlik üst bilginizi ayarlar
- Sıralama olay kimliği için rastgele çekirdeği ayarlar
- JSON veri dosyalarında okur
- calls
get_last_updatedmetodu - örnek çıktıda öğrenme ilkesi kaldırıldı - calls
get_service_settingsmetodu
Hücrenin ve işlevleri çağrısından get_last_updated çıkışı get_service_settings vardır.
# build URLs
personalization_rank_url = personalization_base_url + "personalizer/v1.0/rank"
personalization_reward_url = personalization_base_url + "personalizer/v1.0/events/" #add "{eventId}/reward"
personalization_model_properties_url = personalization_base_url + "personalizer/v1.0/model/properties"
personalization_model_policy_url = personalization_base_url + "personalizer/v1.0/configurations/policy"
personalization_service_configuration_url = personalization_base_url + "personalizer/v1.0/configurations/service"
headers = {'Ocp-Apim-Subscription-Key' : resource_key, 'Content-Type': 'application/json'}
# context
users = "users.json"
# action features
coffee = "coffee.json"
# empty JSON for Rank request
requestpath = "example-rankrequest.json"
# initialize random
random.seed(time.time())
userpref = None
rankactionsjsonobj = None
actionfeaturesobj = None
with open(users) as handle:
userpref = json.loads(handle.read())
with open(coffee) as handle:
actionfeaturesobj = json.loads(handle.read())
with open(requestpath) as handle:
rankactionsjsonobj = json.loads(handle.read())
get_last_updated(modelLastModified)
get_service_settings()
print(f'User count {len(userpref)}')
print(f'Coffee count {len(actionfeaturesobj)}')
ve çıkışların her ikisinin de rewardWaitTime modelExportFrequency 15 saniye olarak ayarlı olduğunu doğrulayın.
-----checking model
<Response [200]>
{'creationTime': '0001-01-01T00:00:00+00:00', 'lastModifiedTime': '0001-01-01T00:00:00+00:00'}
-----model updated: "0001-01-01T00:00:00+00:00"
-----checking service settings
<Response [200]>
{...learning policy...}
<Response [200]>
{'rewardWaitTime': '00:00:15', 'defaultReward': 0.0, 'rewardAggregation': 'earliest', 'explorationPercentage': 0.2, 'modelExportFrequency': '00:00:15', 'logRetentionDays': -1}
User count 4
Coffee count 4
İlk REST çağrısıyla ilgili sorunları giderme
Bu önceki hücre Kişiselleştirme'ye çağrıda bulunduran ilk hücredir. Çıkışta REST durum kodunun olduğundan emin <Response [200]> olun. 404 gibi bir hata alırsanız ancak kaynak anahtarınız ve adınız doğruysa not defterini yeniden yükleyin.
Kahve ve kullanıcı sayısı 4 olduğundan emin olun. Hata alırsanız 3 JSON dosyanın da karşıya yük olup olamay olduğunu kontrol edin.
Ölçüm grafiğini Azure portal
Bu öğreticinin devamlarında, 10.000 istekten uzun süre çalışan işlem, güncelleştirilen bir metin kutusuyla tarayıcıdan görülebilir. Uzun süre çalışan süreç sona erdiğinde grafikte veya toplam olarak görmek daha kolay olabilir. Bu bilgileri görüntülemek için kaynakla birlikte sağlanan ölçümleri kullanın. Artık hizmete bir istekte bulundurarak grafiği oluşturabilir ve ardından uzun süre çalışan işlem devam ederken grafiği düzenli aralıklarla yenileyin.
Veri Azure portal Kişiselleştirme kaynağınızı seçin.
Kaynak gezintisinde İzleme'nin altında Ölçümler'i seçin.
Grafikte Ölçüm ekle'yi seçin.
Kaynak ve ölçüm ad alanı zaten ayarlanmıştır. Yalnızca başarılı çağrıların ölçümlerini ve toplam toplamayı seçmeniz gerekir.
Zaman filtresini son 4 saat olarak değiştirme.

Grafikte üç başarılı çağrı görüyor gerekir.
Benzersiz bir olay kimliği oluşturma
Bu işlev, her derece çağrısı için benzersiz bir kimlik üretir. Kimlik, derece ve ödül çağrısı bilgilerini tanımlamak için kullanılır. Bu değer, web görünümü kimliği veya işlem kimliği gibi bir iş sürecinden gelebilir.
Hücrenin çıkışı yok. İşlev çağrıldıkta benzersiz kimliği verir.
def add_event_id(rankjsonobj):
eventid = uuid.uuid4().hex
rankjsonobj["eventId"] = eventid
return eventid
Rastgele kullanıcı, hava durumu ve günün saati bilgilerini al
Bu işlev benzersiz bir kullanıcı, hava durumu ve günün saati seçer ve ardından sıralama isteğine göndermek için bu öğeleri JSON nesnesine ekler.
Hücrenin çıkışı yok. İşlev çağrıldı mı, rastgele kullanıcının adını, rastgele hava durumunu ve günün rastgele saatlerini döndürür.
4 kullanıcının listesi ve onların tercihleri - yalnızca bazı tercihler daha fazla bilgi için gösterilir:
{
"Alice": {
"Sunny": {
"Morning": "Cold brew",
"Afternoon": "Iced mocha",
"Evening": "Cold brew"
}...
},
"Bob": {
"Sunny": {
"Morning": "Cappucino",
"Afternoon": "Iced mocha",
"Evening": "Cold brew"
}...
},
"Cathy": {
"Sunny": {
"Morning": "Latte",
"Afternoon": "Cold brew",
"Evening": "Cappucino"
}...
},
"Dave": {
"Sunny": {
"Morning": "Iced mocha",
"Afternoon": "Iced mocha",
"Evening": "Iced mocha"
}...
}
}
def add_random_user_and_contextfeatures(namesoption, weatheropt, timeofdayopt, rankjsonobj):
name = namesoption[random.randint(0,3)]
weather = weatheropt[random.randint(0,2)]
timeofday = timeofdayopt[random.randint(0,2)]
rankjsonobj['contextFeatures'] = [{'timeofday': timeofday, 'weather': weather, 'name': name}]
return [name, weather, timeofday]
Tüm kahve verilerini ekleme
Bu işlev, sıralama isteğine göndermek için kahve listesinin tamamını JSON nesnesine ekler.
Hücrenin çıkışı yok. İşlev çağrıldıklarda rankjsonobj işlevini değiştirir.
Tek bir kahvenin özelliklerine örnek olarak şunlardır:
{
"id": "Cappucino",
"features": [
{
"type": "hot",
"origin": "kenya",
"organic": "yes",
"roast": "dark"
}
}
def add_action_features(rankjsonobj):
rankjsonobj["actions"] = actionfeaturesobj
Tahmini bilinen kullanıcı tercihi ile karşılaştırma
Bu işlev, Her yineleme için Derece API'si çağrıldıktan sonra çağrılır.
Bu işlev, kullanıcının kahve tercihini hava durumuna ve günün saatlerine göre karşılaştırıldığında Kişiselleştirme'nin bu filtreler için kullanıcıya yönelik önerisini karşılar. Öneri eş olursa 1 puanı döndürülür, aksi takdirde puan 0 olur. Hücrenin çıkışı yok. İşlev çağrıldıkta puanın çıkışını verir.
def get_reward_from_simulated_data(name, weather, timeofday, prediction):
if(userpref[name][weather][timeofday] == str(prediction)):
return 1
return 0
Rank ve Reward çağrıları arasında döngü
Sonraki hücre Not Defterinin ana işidir; rastgele bir kullanıcı alır, kahve listesini alır ve ikisini de Derece API'sine gönderir. Tahmini kullanıcının bilinen tercihleriyle karşılaştırarak ödülü Kişiselleştirme hizmetine geri gönderme.
Döngü, süreler için num_requests çalışır. Kişiselleştirme için model oluşturmak için Derece ve Ödül için birkaç bin çağrı yapılması gerekir.
Derece API'sinde gönderilen JSON örneği aşağıdaki gibidir. Kahve listesi henüz tamamlanmadı. kahve için tüm JSON'u içinde coffee.json görüyorsunuz.
Derece API'sini JSON ile gönderebilirsiniz:
{
'contextFeatures':[
{
'timeofday':'Evening',
'weather':'Snowy',
'name':'Alice'
}
],
'actions':[
{
'id':'Cappucino',
'features':[
{
'type':'hot',
'origin':'kenya',
'organic':'yes',
'roast':'dark'
}
]
}
...rest of coffee list
],
'excludedActions':[
],
'eventId':'b5c4ef3e8c434f358382b04be8963f62',
'deferActivation':False
}
Derece API'lerinden JSON yanıtı:
{
'ranking': [
{'id': 'Latte', 'probability': 0.85 },
{'id': 'Iced mocha', 'probability': 0.05 },
{'id': 'Cappucino', 'probability': 0.05 },
{'id': 'Cold brew', 'probability': 0.05 }
],
'eventId': '5001bcfe3bb542a1a238e6d18d57f2d2',
'rewardActionId': 'Latte'
}
Son olarak, her döngü kullanıcı, hava durumu, günün saati ve belirlenen ödül rastgele seçimini gösterir. 1 ödülü Kişiselleştirme kaynağının belirli bir kullanıcı, hava durumu ve günün saati için doğru kahve türünü seçmiş olduğunu gösterir.
1 Alice Rainy Morning Latte 1
İşlev şunları kullanır:
def iterations(n, modelCheck, jsonFormat):
i = 1
# default reward value - assumes failed prediction
reward = 0
# Print out dateTime
currentDateTime()
# collect results to aggregate in graph
total = 0
rewards = []
count = []
# default list of user, weather, time of day
namesopt = ['Alice', 'Bob', 'Cathy', 'Dave']
weatheropt = ['Sunny', 'Rainy', 'Snowy']
timeofdayopt = ['Morning', 'Afternoon', 'Evening']
while(i <= n):
# create unique id to associate with an event
eventid = add_event_id(jsonFormat)
# generate a random sample
[name, weather, timeofday] = add_random_user_and_contextfeatures(namesopt, weatheropt, timeofdayopt, jsonFormat)
# add action features to rank
add_action_features(jsonFormat)
# show JSON to send to Rank
print('To: ', jsonFormat)
# choose an action - get prediction from Personalizer
response = requests.post(personalization_rank_url, headers = headers, params = None, json = jsonFormat)
# show Rank prediction
print ('From: ',response.json())
# compare personalization service recommendation with the simulated data to generate a reward value
prediction = json.dumps(response.json()["rewardActionId"]).replace('"','')
reward = get_reward_from_simulated_data(name, weather, timeofday, prediction)
# show result for iteration
print(f' {i} {currentDateTime()} {name} {weather} {timeofday} {prediction} {reward}')
# send the reward to the service
response = requests.post(personalization_reward_url + eventid + "/reward", headers = headers, params= None, json = { "value" : reward })
# for every N rank requests, compute total correct total
total = total + reward
# every N iteration, get last updated model date and time
if(i % modelCheck == 0):
print("**** 10% of loop found")
get_last_updated(modelLastModified)
# aggregate so chart is easier to read
if(i % 10 == 0):
rewards.append( total)
count.append(i)
total = 0
i = i + 1
# Print out dateTime
currentDateTime()
return [count, rewards]
10.000 yineleme için çalıştırma
10.000 yineleme için Kişiselleştirme döngüsü çalıştırın. Bu uzun süre çalışan bir olaydır. Not defterini çalıştıran tarayıcıyı kapatabilirsiniz. Hizmete yapılan toplam çağrıları görmek için Azure portal ölçüm grafiğini düzenli aralıklarla yenileyin. Döngüde her yineleme için yaklaşık 20.000 çağrı, derece ve ödül çağrısı olduğunda yinelemeler yapılır.
# max iterations
num_requests = 200
# check last mod date N% of time - currently 10%
lastModCheck = int(num_requests * .10)
jsonTemplate = rankactionsjsonobj
# main iterations
[count, rewards] = iterations(num_requests, lastModCheck, jsonTemplate)
İyileştirmeyi görmek için grafik sonuçları
ve 'den bir grafik count rewards oluşturun.
def createChart(x, y):
plt.plot(x, y)
plt.xlabel("Batch of rank events")
plt.ylabel("Correct recommendations per batch")
plt.show()
10.000 sıralama isteği için grafik çalıştırma
İşlevi createChart çalıştırın.
createChart(count,rewards)
Grafiği okuma
Bu grafik, geçerli varsayılan öğrenme ilkesi için modelin başarısını gösterir.

Testin sonunda döngü, araştırmadan yüzde 100'e yakın bir başarı oranı elde etmek için ideal hedeftir. Araştırmanın varsayılan değeri %20'dir.
100-20=80
Bu keşif değeri, Azure portal kaynağı için Yapılandırma sayfasında bulunur.
Derece API'sinde verilerinizi temel alan daha iyi bir öğrenme ilkesi bulmak için Kişiselleştirme döngüniz için portalda çevrimdışı değerlendirme çalıştırın.
Çevrimdışı değerlendirme çalıştırma
Bu Azure portal Kişiselleştirme kaynağının Değerlendirmeler sayfasını açın.
Değerlendirme Oluştur'a seçin.
Döngü değerlendirmesi için gerekli değerlendirme adını ve tarih aralığını girin. Tarih aralığı yalnızca değerlendirmeniz için odaklanan günleri içermeli.

Bu çevrimdışı değerlendirmeyi çalıştırmanın amacı, bu döngüde kullanılan özellikler ve eylemler için daha iyi bir öğrenme ilkesi olup olmadığını belirlemektir. Daha iyi öğrenme ilkesi bulmak için İyileştirme Bulma'nın açık olduğundan emin olun.
Değerlendirmeye başlamak için Tamam'ı seçin.
Bu Değerlendirmeler sayfası yeni değerlendirmeyi ve geçerli durumunu listeler. Sahip olduğunuz veriye bağlı olarak bu değerlendirme biraz zaman alır. Sonuçları görmek için birkaç dakika sonra bu sayfaya dönebilirsiniz.
Değerlendirme tamamlandığında değerlendirmeyi seçin ve ardından Farklı öğrenme ilkelerinin karşılaştırması'na seçin. Bu, kullanılabilir öğrenme ilkelerini ve verilerle nasıl davranacağını gösterir.
Tabloda en çok öğrenme ilkesi seçin ve Uygula'ya seçin. Bu, modelinize en iyi öğrenme ilkesi uygular ve yeniden eğiter.
Model güncelleştirme sıklığını 5 dakika olarak değiştirme
- Veri Azure portal, Yine Kişiselleştirme kaynağında Yapılandırma sayfasını seçin.
- Model güncelleştirme sıklığı ve ödül bekleme süresi'yi 5 dakika olarak değiştirerek Kaydet'i seçin.
Ödül bekleme süresi ve model güncelleştirme sıklığı hakkında daha fazla bilgi.
#Verify new learning policy and times
get_service_settings()
ve çıkışların her ikisinin de rewardWaitTime modelExportFrequency 5 dakika olarak ayarlı olduğunu doğrulayın.
-----checking model
<Response [200]>
{'creationTime': '0001-01-01T00:00:00+00:00', 'lastModifiedTime': '0001-01-01T00:00:00+00:00'}
-----model updated: "0001-01-01T00:00:00+00:00"
-----checking service settings
<Response [200]>
{...learning policy...}
<Response [200]>
{'rewardWaitTime': '00:05:00', 'defaultReward': 0.0, 'rewardAggregation': 'earliest', 'explorationPercentage': 0.2, 'modelExportFrequency': '00:05:00', 'logRetentionDays': -1}
User count 4
Coffee count 4
Yeni öğrenme ilkesi doğrulama
Azure Notebooks dosyasına geri dönüp aynı döngüyü çalıştırarak devam edin, ancak yalnızca 2.000 yineleme için. Hizmete yapılan toplam çağrıları görmek Azure portal ölçüm grafiğini düzenli aralıklarla yenileyin. Döngüde her yineleme için yaklaşık 4.000 çağrı, derece ve ödül çağrısı olduğunda yinelemeler yapılır.
# max iterations
num_requests = 2000
# check last mod date N% of time - currently 10%
lastModCheck2 = int(num_requests * .10)
jsonTemplate2 = rankactionsjsonobj
# main iterations
[count2, rewards2] = iterations(num_requests, lastModCheck2, jsonTemplate)
2.000 sıralama isteği için grafik çalıştırma
İşlevi createChart çalıştırın.
createChart(count2,rewards2)
İkinci grafiği gözden geçirme
İkinci grafikte, kullanıcı tercihleriyle hizalanmış Derece tahminlerinde görünür bir artış gösterebilirsiniz.

Kaynakları temizleme
Öğretici serisine devam etmeyi amacınız yoksa aşağıdaki kaynakları temizleyin:
- Azure Notebook projenizi silin.
- Kişiselleştirme kaynağınızı silin.
Sonraki adımlar
Bu örnekte kullanılan Jupyter not defteri ve veri dosyaları, Kişiselleştirme için GitHub veri GitHub kullanılabilir.