Der Multi-Armed-Algorithmus ist ein Reinforcement-Studying-Algorithmus, der für die Ressourcenzuweisung und Entscheidungsfindung verwendet wird. Wir erklären, wie die Multi-Armed-Technik dabei hilft, ein Empfehlungssystem für einen On-line-Store für Stofftiere aufzubauen.
Konkret besteht das Ziel dieses Algorithmus darin, zunächst zufällig verschiedene Optionen auszuprobieren (Waffen), sammelt Daten zum Ergebnis und weist beim Sammeln von Daten dynamisch mehr Ressourcen der Possibility mit dem besten Ergebnis zu.
Wir werden in die Particulars eintauchen, um zu erklären, wie es in drei Schritten funktioniert:
- Datenexploration: Verstehen Sie unsere Daten und Produkte durch Experimente.
- Datenausbeutung: Wege finden, zuvor erforschte Daten zu nutzen.
- Fortlaufendes Lernen: Verbessern Sie das Ergebnis durch die Einführung neuer Produkte und die Anpassung an geänderte Benutzerpräferenzen.
Schließlich werden wir a sehen konzeptioneller Beweiß für unseren Enterprise Case mit Python-Code.
Nehmen wir an, wir haben drei Kategorien von Stofftieren: Kätzchen, Welpen Und Löwenbabys.
Nach unseren historischen Daten haben wir folgende Einkaufsquoten:
- Kätzchen: 8 %
- Welpen: 6 %
- Löwenbabys: 10 %
Der Algorithmus empfiehlt dem ersten Kunden nach dem Zufallsprinzip eine Kategorie und speichert das Ergebnis, beispielsweise einen erfolgreichen Kauf. Nach dem Kauf werden die Informationen der Kategorie aktualisiert.
Während der Algorithmus neue Daten erforscht, analysiert und nutzt er auch Daten.
Kaufpreis
Nachdem der Algorithmus einige Informationen gesammelt und untersucht hat, ist er nun bereit, die Daten auszuwerten. Nehmen wir an, wir haben die folgenden Verkaufsinformationen gesammelt:
- Kätzchen: Aufrufe: 100, Kauf: 7
- Welpen: Aufrufe: 120, Kauf: 6
- Löwenbabys: Aufrufe: 150, Kauf: 9
Wir müssen die Kaufrate für jede Kategorie berechnen (Kauf/Ansichten) * 100.
- Kätzchen: 7 %
- Welpen: 5 %
- Löwenbabys: 6 %
Basierend auf diesem Ergebnis empfiehlt der Algorithmus dem Kunden anschließend die beste Kategorie (Kätzchen).
Es gibt verschiedene statistische Ansätze zur Umsetzung dieser Empfehlung, die wir verwenden Obere Vertrauensgrenze (UCB).
Obere Vertrauensgrenze
Der Zweck der Higher Confidence Certain-Technik besteht darin, bei jedem Schritt die beste Possibility (Arm) auszuwählen. Die Stärke dieser Technik besteht darin, die beobachtete Kaufrate mit einem Explorationszeitraum zu kombinieren. Ziel ist es, Exploration und Ausbeutung in Einklang zu bringen.
Die Formel lautet: Kaufrate + Explorationsfaktor * rsqrt((2 * log(Gesamtaufrufe))
Um die Erklärung zu vereinfachen, verwenden wir an Explorationsfaktor von 1. Das bedeutet, dass wir Exploration und Ausbeutung gleichermaßen in Einklang bringen. Eine Erhöhung des Explorationsfaktors fördert die Exploration, während eine Reduzierung die Nutzung von Daten fördert.
Zuerst berechnen wir den UCB für jede Kategorie
- Kätzchen: UCB(Kätzchen) = Kaufrate(Kätzchen) + sqrt((2 * log(Gesamtansichten)) / Ansichten(Kätzchen)) = 7 % + sqrt((2 * log(370)) / 100) ≈ 7 % + 0,23 ≈ 7,23 %
- Welpen: UCB(Welpen) = Kaufrate(Welpen) + sqrt((2 * log(Gesamtaufrufe)) / Aufrufe(Welpen)) = 5 % + sqrt((2 * log(370)) / 120) ≈ 5 % + 0,21 ≈ 5,21 %
- Löwenbabys: UCB(Löwenbabys) = Kaufrate(Löwenbabys) + sqrt((2 * log(Gesamtansichten)) / Ansichten(Löwenbabys)) = 6 % + sqrt((2 * log(370)) / 150) ≈ 6 % + 0,19 ≈ 6,19 %
Basierend auf den von uns berechneten UCB-Werten empfiehlt der Algorithmus die Kätzchen Kategorie an den nächsten Kunden weiter, da sie den höchsten Wert hat (7.23), vereinfacht ausgedrückt bedeutet dies, dass wir eine größere Likelihood haben, Kätzchen zu verkaufen als andere Kategorien.
Führen Sie eine neue Kategorie ein
Der mehrarmige Bandit ist ein adaptiver Algorithmus. Mit adaptiv meine ich, dass es während des gesamten Prozesses lernt und sich verbessert. In diesem Schritt veranschaulichen wir dies, indem wir eine neue Stofftierkategorie hinzufügen. Pandas.
Dazu nehmen wir frühere UCB-Ergebnisse:
- Kätzchen: 7,23 %
- Welpen: 5,21 %
- Löwenbabys: 6,19 %
Dann beginnen wir mit dem Verkauf eines neuen Stofftiers, Pandas.
Pandas: Aufrufe: 30, Kauf: 5
Kaufpreis: (3/30) * 100 = 10 %
UCB (Pandas) = 10 % + sqrt((2 * log(400)) / 100) ≈ 10 % + 0,23 ≈ 10,23 %
Die Gesamtanzahl der Aufrufe hat sich geändert, weil wir ein neues Stofftier hinzugefügt haben. Nach der Einführung neuer Kategorien müssen wir auch die neuen Daten für andere Kategorien erneut berücksichtigen.
Einkaufspreis neu berechnen
- Kätzchen: Aufrufe: 157, Kauf: 11-> Kaufquote 7 %
- Welpen: Aufrufe: 175, Kauf: 7-> Kaufquote 4 %
- Löwenbabys: Aufrufe: 200, Kauf: 16-> Kaufquote 8 %
Die Ergebnisse sind bereits interessant, wir sehen, dass die Kätzchen Die Kaufrate in der Kategorie bleibt gleich, die Welpenkäufe sinken um 1 %, während die Löwenbabykäufe um 2 % steigen.
UCB-Werte neu berechnen
Kätzchen = 7 % + sqrt((2 * log(400)) / 157) ≈ 7 % + 0,18 ≈ 7,18 %
Welpen = 4 % + sqrt((2 * log(400)) / 175) ≈ 4 % + 0,17 ≈ 4,17 %
Löwenbabys = 8 % + sqrt((2 * log(400)) / 200) ≈ 8 % + 0,16 ≈ 8,16 %
Entscheidung treffen
Wir haben die UCB-Werte für jede Kategorie berechnet, indem wir ein neues Stofftier eingeführt haben. Wir haben die folgenden Ergebnisse erhalten:
- Welpen: 4,17 %
- Kätzchen: 7,18 %
- Löwenbabys: 8,16 %
- Pandas: 10,23 %
Durch die Analyse dieser Ergebnisse erkennt der Algorithmus, dass die Kaufrate der Welpen sinkt, die Anzahl der Kätzchen gleich bleibt und die Zahl der Löwenbabys zunimmt. Es versteht sich, dass der Pandas-Kauf in der neuen Kategorie weit über andere Kategorien hinausgeht.
Wir werden unseren Geschäftsfall mit Python-Code veranschaulichen.
Bereiten Sie Kategorien vor
Zuerst initialisieren wir Variablen mit jeder Kategorie. Jede Kategorie ist ein „Arm“. Außerdem legen wir die Einkaufspreise anhand der von uns bereits erfassten Daten fest.
import numpy as np# Classes / Arms
arms = ['Kittens', 'Puppies', 'Lion cubs']
# Buy charges for every arm
purchase_rates = [0.08, 0.06, 0.1]
success_count = {arm: 0 for arm in arms}
total_count = {arm: 0 for arm in arms}
Simulieren Sie Kundenaktionen
Zur Veranschaulichung unserer Umsätze simulieren wir Kundenaktionen. Verwenden Sie die Numpy-Zufallsfunktion, um einen zufälligen Arm auszuwählen.
Die Funktion „simulate_customer_action“ gibt entweder 0 oder 1 zurück.
- 0 bedeutet den Kunden kauft nicht das Produkt.
- 1 bedeutet der Kunde Käufe das Produkt.
In unserem Beispiel gleichen wir Exploration und Exploitation aus, weshalb wir „exploration_ratio“ auf „exploration_ratio“ setzen 0,5.
Um eine Reihe von Kundenaktionen zu simulieren, durchlaufen wir 100.000 Iterationen.
Für alle 500 Iterationen gilt: Wir passen die Purchase_rates entsprechend dem vom Algorithmus bereits gesehenen Ergebnis an.
# Simulate buyer actions
def simulate_customer_action(selected_arm):
# Return the outcome (1 for profitable buy, 0 for unsuccessful buy)
# Simulate buyer motion based mostly on chance (buy price)
return np.random.selection([0, 1], p=[1 - purchase_rates[selected_arm], purchase_rates[selected_arm]])# Set Exploration/Exploitation ratio
exp_ratio = 0.5
for i in vary(100000):
# Exploration
if np.random.random() < exp_ratio: # Carry out as a lot Exploration than Exploitation, Exploitation issue = 1
selected_arm = np.random.selection(vary(len(arms)))
else:
# Exploitation
selected_arm = np.argmax([success_count[arm] / total_count[arm] if total_count[arm] > 0 else 0 for arm in arms])
# Simulate buyer motion and observe the outcome
outcome = simulate_customer_action(selected_arm)
success_count[arms[selected_arm]] += outcome
total_count[arms[selected_arm]] += 1
# Replace buy charges each 500 iterations
if i % 500 == 0 and that i != 0:
for j, arm in enumerate(arms):
if total_count[arm] > 0:
purchase_rates[j] = success_count[arm] / total_count[arm]
print(success_count)
print(total_count)
Ergebnis analysieren
Zum Abschluss drucken wir die Ergebnisse aus Löwenbabys sind der Bestseller. Im nächsten Abschnitt (Fortlaufendes Lernen) werden wir ein neues Produkt vorstellen, Pandas.
# Calculate the success price (buy price) for every arm
success_rate = {arm: success_count[arm] / total_count[arm] for arm in arms}# Choose the arm with the best success price
selected_arm = max(success_rate, key=success_rate.get)
print(success_rate)
print(selected_arm)
Fortlaufendes Lernen
Wir nutzen die Kraft der mehrarmigen Banditen, um ein neues Produkt vorzustellen: Pandas Stofftier. Schließlich werden nach dem erneuten Ausführen der Erkundungs-/Ausbeutungsschritte erneut Schritte ausgeführt (Kundenaktion simulieren Abschnitt)Wir kommen zu dem Schluss, dass Pandas mit einer Kaufquote von 20 % mittlerweile weit vor den anderen liegt. 🎉🎉🎉
# Introduce a brand new arm, Pandas
arms.append('Pandas')# Replace the counts for the brand new arm
success_count['Pandas'] = 0
total_count['Pandas'] = 0
purchase_rates.append(0.2) # Set a default buy price
Sie können den Code in meinem Github-Repo abrufen:
https://github.com/walterwhites/machine_learning/blob/main/Build_a_recommendation_system.ipynb
Der mehrarmige Bandit ist eine großartige Technik, um die Erforschung/Ausbeutung von Daten in Einklang zu bringen. Wir veranschaulichen, wie man diese Technik zum Aufbau eines Empfehlungssystems mit verstärkendem Lernen im Kontext eines On-line-Outlets, der Stofftiere verkauft, nutzt.
Der Algorithmus lernt den Verkaufstrend und berücksichtigt neue Produkte. Es erkennt das wertvollste Produkt, das in einem bestimmten Zeitraum empfohlen werden kann, und steigert so den Umsatz.