- Je bouwt ICE-lijnen door één feature te variëren en de overige context per rij vast te houden.
- Je centreert per eigen anchor en onderscheidt afzonderlijke lijnen, een PDP-achtergrondgemiddelde en een causale verklaring.
Een gemiddeld modelverloop kan verschillende situaties verbergen. Misschien verandert de voorspelde bezorgtijd sterk met afstand bij grote orders, maar nauwelijks bij kleine. Hoe zie je dat zonder die verschillen direct weg te middelen?
Denk aan een rij met vaste context. Je schuift alleen de afstand langs een meetlat en vraagt hetzelfde model telkens opnieuw om een score. Doe dat voor meerdere contexten en je krijgt afzonderlijke lijnen voordat je een gemiddelde tekent.
Onze twee features en uitkomsten zijn genormaliseerde oefenscores. Het vaste model gebruikt twee gewichten en een interactie; er worden geen parameters opnieuw geleerd. Alle rijen zijn verzonnen.
1. Houd per rij de overige context vast
Een individuele responslijn (Individual Conditional Expectation, ICE) varieert één feature en houdt de andere per achtergrondrij vast. Conditional betekent hier niet dat je automatisch nieuwe rijen trekt uit de populatie die bij die afstand hoort. Je vraagt het gegeven model om voorspellingen bij de gemaakte combinaties.
Varieer één feature bij vaste rijcontexten. Vergelijk afzonderlijke responslijnen, veranderingen vanaf een eigen anchor en hun achtergrondgemiddelde.
Vast model: gewichten 1 / 2, bias 0, interactie 1.
De interactie maakt de eerste lijn vlak en de tweede stijgend. Eén gemiddelde verbergt dat verschil.
Oorspronkelijke modelrespons; er is geen anchor afgetrokken. Het uniforme gemiddelde is het gewone PDP van deze achtergrond.
- Rij 1: gewicht 0,5
- Rij 2: gewicht 0,5
- ● ━Achtergrondgemiddelde
| Grid | Rij 1 | Rij 2 | Gem. |
|---|---|---|---|
| -1 | -2 | 0 | -1 |
| 0 | -2 | 2 | 0 |
| 1 | -2 | 4 | 1 |
Welke achtergrond blijft per rij vast?
- Rij 1: oorspronkelijke x₀ 0, x₁ -1. Feature 0 wordt door elk gridpunt vervangen; de andere blijft gelijk.
- Rij 2: oorspronkelijke x₀ 1, x₁ 1. Feature 0 wordt door elk gridpunt vervangen; de andere blijft gelijk.
Een gemiddelde kan verschillende hellingen verbergen. Centreren trekt per lijn haar eigen anchor af. Gewichten kiezen een achtergrond; zij laten de andere feature niet automatisch met het grid meeveranderen en maken de curve geen causale verklaring.
Alle modellen en rijen zijn verzonnen en blijven vast. Deze uitleg beschrijft modelgedrag bij de gekozen gegevens en ingreep; zij bewijst geen causaliteit, dataherkomst of geldigheid buiten deze oefening.
Noem het model f, de gekozen feature j, een gridwaarde z en de overige featurewaarden van rij i x_C^(i). Elke lijn bestaat uit f bij z en die vaste context. Het grid geeft de horizontale volgorde; i blijft dezelfde achtergrondrij.
Kies een model met gewicht één voor de eerste feature, twee voor de tweede en een interactie van één, zonder bias. De eerste feature heet x_0 en de tweede x_1. Hun product laat het effect van de eerste afhangen van de tweede.
Varieer de eerste feature van min één via nul naar één. Bij de tweede feature min één is de voorspelling steeds min twee. Bij de tweede feature één wordt zij nul, twee en vier: de interactie maakt de hellingen verschillend.
model = {'weights':[1.,2.],
'bias':0.,'interaction':1.}
data = [[0.,-1.],[1.,1.]]
grid = [-1.,0.,1.]
lines = ice_values(model,data,0,grid)
for row in lines:
print(row.tolist())
# [-2.0, -2.0, -2.0]
# [0.0, 2.0, 4.0]
De oorspronkelijke x0 van iedere rij wordt bij iedere gridwaarde vervangen; x1 blijft vast. Een waarde kopiëren naar de verkeerde kolom of rijen verwisselen zou dus een andere vraag beantwoorden. Er zijn geen labels nodig om dit modelgedrag uit te rekenen.
012. Vergelijk veranderingen vanaf een eigen startpunt
Verschillende beginhoogtes kunnen het vergelijken van lijnen lastig maken. Centreren trekt daarom per rij haar eigen voorspelling bij één gekozen anchorpunt af. De helling blijft behouden; je trekt niet een gemiddelde over alle rijen af.
Noem de anchor-index a en de bijbehorende gridwaarde z_a. De gecentreerde lijn C_i begint bij nul op dat punt. Standaard is a nul, dus het eerste gridpunt.
Onze eerste lijn verschuift van min twee naar nul op alle punten. De tweede start al op nul en blijft nul, twee, vier. Het verschil in verandering blijft dus zichtbaar nadat de beginhoogtes zijn gelijkgezet.
centered = center_ice(lines)
for row in centered:
print(row.tolist())
# [0.0, 0.0, 0.0]
# [0.0, 2.0, 4.0]
023. Middel over een expliciete achtergrond
Een gedeeltelijke-afhankelijkheidscurve (Partial Dependence Plot, PDP) middelt de voorspellingen over de gekozen achtergrondrijen. Noem hun aantal N. Met gelijke gewichten neem je bij elk gridpunt het gemiddelde van de ICE-waarden op diezelfde positie.
Het gemiddelde van min twee en nul is min één; daarna krijg je nul en één. Die enkele lijn verbergt dat één context helemaal niet verandert terwijl de andere sterk stijgt. Bekijk daarom de afzonderlijke lijnen naast het gemiddelde.
average = mean_response(lines)
print(average['response'].tolist())
print(average['weights'].tolist())
# [-1.0, 0.0, 1.0]
# [0.5, 0.5]
Je kunt ook vooraf publieke, niet-negatieve achtergrondgewichten w_i kiezen. De functie normaliseert ze tot α_i met som één; dat verandert de gekozen referentieverdeling, niet het model. Een zwaarder gewogen context telt meer mee in de samenvatting.
Geef de eerste context gewicht 0,25 en de tweede 0,75. Bij de eerste gridwaarde levert de eerste lijn min twee maal een kwart: min een half; de tweede draagt nul bij. De andere twee gewogen gemiddelden zijn één en 2,5.
weighted = mean_response(
lines,[.25,.75])
print(weighted['response'].tolist())
# [-0.5, 1.0, 2.5]
03Waar de uitleg ophoudt
Bij samenhangende kenmerken kunnen gridcombinaties buiten de waargenomen gegevens liggen. De curve toetst niet of zulke combinaties realistisch zijn. Een verandering in de voorspelling bewijst bovendien niet wat een echte ingreep in de wereld zou veroorzaken.
De functies accepteren ook aangeleverde curvematrices; zij bewijzen de herkomst daarvan niet. Een PDP is hier een gemiddelde over een expliciete achtergrond, geen automatische conditionele populatieverwachting. Achtergrondkeuze, modelkwaliteit en individuele verschillen blijven onderdeel van de interpretatie.
Wat je nu kunt
- Je varieert één feature terwijl de overige context per rij vastblijft.
- Je centreert op een eigen anchor zonder verschillende hellingen weg te poetsen.
- Je onderscheidt afzonderlijke lijnen, hun achtergrondgemiddelde en een causale verklaring.
Hierna kijk je naar alignment en veiligheid: welke doelen sturen het systeem en hoe controleer je gewenst gedrag?