Biedingen optimaliseren (Amazon)

Uit De Vliegende Brigade
Versie door Jeroen Strompf (overleg | bijdragen) op 13 okt 2018 om 17:46 (→‎In essentie)
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Naar navigatie springen Naar zoeken springen

Hoe optimaliseer je biedingen op Amazon?

In essentie

In tegenstelling tot Google Ads, lijkt er geen Quality Score te zijn en ook geen ranking. Daarnaast zijn er veel minder parameters dan op Google Ads. Optimalisatie op Amazon is daarom vermoedelijk relatief eenvoudig.

Onder de aanname van ceteris paribus heb je deze drietrapsrakket:

  1. Periodiek meetgegevens verzamelen (bv. per zoekterm: bod + resulterende winst, etc.)
  2. Overdrachtsfunctie winst(bod) modelleren ahv. deze getallen
  3. Bod optimaliseren.

Voorbeeld

Periode   Bod      Imp   Clicks   Conv   Kosten   Omzet   ACoS   Winst (ACoS_max=40%)
-------   ------   ---   ------   ----   ------   -----   ----   ------------------------------------
1         € 0,25   120   20       5      €  5     € 50    10%    40%*€ 50 - €  5 = € 20 - €  5 = € 15 
2         € 0,50   200   30       8      € 15     € 80    19%    40%*€ 80 - € 15 = € 32 - € 15 = € 17

Consequenties

Het voorbeeld hierboven toont een paar complicaties & consequenties:

  • Het verband tussen de input-grootheid bod en de output-grootheid winst is niet-lineair en vermoedelijk kwadratisch. Je heb dus minimaal drie datapunten nodig hebben voor curve-fitting.
  • Gebruik bv. een hunt & bisectioning-algorithme om het volgende input-datapunt te vinden. Zie ook hieronder tav. éénstaps-optimalisatie
  • In dit voorbeeld zijn er respectievelijk 5 en 8 conversies per periode. Dat is al aardig wat, maar vermoedelijk aan de lage kant om statistisch significant te zijn. Dat probleem wordt erger als het om bv. maar 1 of 2 conversies per periode gaat
  • ⇒ Per periode altijd het bod aanpassen (vermits er een conversie is geweest), om de overdrachtsfunctie in kaart te brengen. De kans dat een optimalisatie-algorithme niet met een aangepast bod komt, is vrijwel uitgesloten
  • Handig om per AdGroup 1 product te hebben, maar ook maar 1 zoekterm. Vaak heb ik vergelijkbare zoektermen per AdGroup, maar dat werkt niet optimaal qua optimalisatie
  • De aanname van ceteris paribus, is tricky: In Amazon verkrijg ik veel minder data per tijdsperiode, dan in Google Ads.

Eénstaps-optimalisatie

Vaak zijn er situaties waarin ik in één stap ahv. één datapunt een nieuw bod wil bepalen. Dat kan, onder aanname van een aantal heuristieken:

  • Doelwaarde ACoS: 50% van ACoS_max
  • Aantal klikken als functie van het bod: Clicks = constante * sqrt(bod)
  • Relatie klikken & conversie: Onafhankelijk van het bod
  • Conversie-ratio: Waarschijnlijk beschik je over een meetwaarde. Zoniet (dat zou heel gek zijn), gebruik dan 2%
  • Omzet/conversie: Constant; onafhankelijk van het bod. Gebruik historische data of whatever
  • Relatie CPC & bod: Aanname: Identiteit.

De truuk is, om de waarde van de constante te achterhalen. En da's niet zo moeilijk, want die heb je in het beschikbare datapunt (hoe inadequaat dat ook moge zijn). In de voorbeelden eerder in dit artikel:

Situatie   Bod      sqrt(Bod)   Clicks   Constante
--------   ------   ---------   ------   --------------
1          € 0,25   € 0,5       20       C=20/0,5  = 40
2          € 0,5    € 0,71      30       C=30/0,71 = 42

De formule wordt zoiets als:

Nettowinst = ACoS_max * { alpha * sqrt(bod) * CR * Revenue/conversie } - {bod * clicks}

Dit wil ik herschrijven tot nettowinst als functie van bod, maar daar kom ik nu even niet uit. Zal wel een tweedegraads-functie zijn. Wat je in ieder geval kunt zien: De kosten nemen lineair toe met het bod, terwijl de winst toeneemt met de wortel van het bod.

Vuistregel

  • ACoS met een factor-x verhogen? ⇒ Bod met een factor sqrt(x) verhogen
  • ACoS met een factor-x verlagen? ⇒ Bod met een factor sqrt(x) verlagen

Toegepast op het voorbeeld

Als ik deze vuistregel toepas op het voorbeeld eerder in dit artikel:

* ACoS verdubbelen ⇒
* Bod verhogen met factor sqrt(2) = 1,4
* Oude bod:   € 0,25
* Nieuwe bod: € 0,34

Dit ziet er een stuk aannemelijker uit, dan de verdubbeling in het voorbeeld.

Eénstaps-optimalisatie - Algorithme

  • Gebruik alleen datapunten met omzet. Datapunten zonder omzet zijn niet bruikbaar. Detecteren wanneer advertenties voor een product gestopt moeten worden? ⇒ Da's een andere discussie dan in dit artikel
  • Optimaliseer afzonderlijk per marktplaats, want te heterogeen
  • Aanname: Bod & CPC zijn identiek
  • Aanname: ACoS_max = 40%.

Tjakka:

drop table if exists results_per_keyword_tmp;

create table results_per_keyword_tmp

select distinct

   marketplace,
   campaign_name,
   ad_group_name,
   sum(impressions)				as impressions,
   sum(clicks)					as clicks,
   sum(spend)					as costs,
   sum(seven_day_total_sales)			as revenue,
   sum(seven_day_total_orders)			as conversions,
   sum(acos)					as acos,
   0.4*sum(seven_day_total_sales)-sum(spend)	as profit

from str_tmp
group by ad_group_name;

select

    marketplace,
    campaign_name,
    ad_group_name,
    impressions,
    clicks,
    conversions,
    concat("€ ",round(costs,2)) as costs,
    concat("€ ",round(revenue,2)) as revenue,
    # acos,
    concat(round(100*acos,2),"%") as acos,
    0.2/acos as acos_factor,
    sqrt(0.2/acos) as acos_factor_sqrt,
    profit,
    concat("€ ",round(costs/clicks,2)) as cpc_old,
    concat("€ ",round((sqrt(0.2/acos))*costs/clicks,2)) as cpc_new

from results_per_keyword_tmp where revenue>0

order by marketplace, campaign_name, ad_group_name;

Zie ook

Bronnen