In logistische regressie gebruiken we vaak waarden voor classificatie in plaats van het retourneren van de kans. Waarden met een waarschijnlijkheid groter dan 0,5 krijgen de classificatie 1, terwijl waarden lager dan 0,5 de classificatie 0 krijgen. In de output van ons logistische regressiemodel, zoals weergegeven in de functie summary() in R, worden de coëfficiënten gepresenteerd als lineaire waarden. Dit lijkt tegenstrijdig, gezien het feit dat we werken met een logistische regressie, die van nature niet-lineair is door de binaire aard van de afhankelijke variabele. Wat er onder de motorkap gebeurt, is echter een transformatie van de afhankelijke variabele, die het ons mogelijk maakt de relaties in een lineair kader te interpreteren. In plaats van de werkelijke uitkomst y direct te voorspellen, modelleert logistische regressie de log-odds (of logit) van de waarschijnlijkheid dat de uitkomst zich in de ene categorie bevindt versus de andere.

In het resultaat van onze logistische regressie, zoals te zien in de legendarische status en de aanval, zien we een waarde van 0,037024 voor de coëfficiënt van de aanval. Dit vertegenwoordigt de toename in de log-odds van de legendarische status die we kunnen verwachten bij een toename van één punt in de aanval. Daarnaast krijgen we de deviance residuals. Deviance residuals zijn een maat voor de modelpassendheid en geven inzicht in het verschil tussen waargenomen uitkomsten en de uitkomsten die door het model worden voorspeld. Elke residual vertegenwoordigt de bijdrage van een datapunt aan de totale deviance van het model, wat vergelijkbaar is met het concept van variantie in lineaire regressie. De deviance in logistische regressie is een maat voor hoe goed het model het patroon van de waargenomen gegevens vastlegt. Lagere deviance betekent een betere fit en het onderzoeken van de verdeling van de deviance residuals kan helpen bij het identificeren van modelmispecificaties of specifieke datapunten die niet goed door het model worden verklaard.

We hebben ook een AIC-score of Akaike Information Criterion-score. In dit geval is deze score 366,63. Wat vertegenwoordigt deze waarde? Op zichzelf heeft deze waarde weinig betekenis, maar we kunnen deze gebruiken om verschillende modellen binnen dezelfde dataset met elkaar te vergelijken. Hoe lager deze score, hoe beter ons model de gegevens past. Laten we eens kijken of het toevoegen van snelheid en hp ook de kans vergroot dat ons model de legendarische status kan voorspellen.

We definiëren een nieuw logistisch model voor de voorspelling van legendarische status:

r
glm_2 <- glm(legendary ~ attack + hp + speed, family = binomial, data = pokemon) summary(glm_2)

De AIC-score van ons nieuwe model is 297,46. Dit betekent dat ons nieuwe logistische model beter in staat is om de gegevens uit te leggen dan het vorige model. Het is duidelijk dat het bepalen van hoe goed een model werkt voor logistische regressie anders is dan voor lineaire regressie. Daarom is de functie check_model() niet erg nuttig. Het vergelijken van modellen op basis van AIC stelt ons in staat om te bevestigen dat het toevoegen van variabelen helpt om ons fenomeen beter te verklaren.

Het bepalen van de variabelen die de legendarische status verhogen is interessant, maar waarschijnlijk willen we iets nuttigers voorspellen, zoals welke twee Pokémon zouden winnen in een gevecht. Hiervoor moeten we vier belangrijke stappen volgen: Ten eerste moeten we de gegevens inleiden van gevechten die al winnaars hebben; ten tweede moeten we een logistisch model maken om deze resultaten te verklaren; ten derde moeten we controleren hoe goed ons model werkt met de gegevens waarvoor we al de antwoorden hebben met behulp van een verwarringsmatrix; en ten slotte, als we bepalen dat de resultaten van het model voldoende zijn, kunnen we het gebruiken om nieuwe gevechten te voorspellen.

Om de basis te leggen voor het ontwikkelen van een voorspellend model, beginnen we met het importeren van gegevens die een synthetisch historisch record van Pokémon-gevechten bevatten, met informatie over de strijdende partijen en de geïdentificeerde winnaars van elk conflict. Het is belangrijk om te onthouden dat deze gevechtsgegevens zijn gegenereerd door een op maat gemaakte algoritme en de werkelijke spelmechanismen mogelijk niet volledig weerspiegelen. Niettemin dient deze dataset, die rijk is aan gelabelde instanties – waar de "labels" verwijzen naar de bekende uitkomsten (winnaars) van de gesimuleerde gevechten – als trainingsgrond voor wat in machine learning wordt aangeduid als “supervised learning”.

Supervised learning is vergelijkbaar met een onderwijsproces waarbij een model, net als een student, leert van voorbeelden met bekende uitkomsten. Het gebruikt de gelabelde synthetische historische gegevens om de complexe patronen en relaties die de resultaten van een gevecht beïnvloeden, te herkennen en te internaliseren binnen de vereenvoudigde regels van de dataset. Denk aan elk record van een Pokémon-gevecht als een gedetailleerde case study uit deze gegenereerde dataset, waarbij de overwinnaar duidelijk is aangeduid. Door deze gegevens in ons model te voeren, leren we het model herkennen welke factoren – of het nu het type Pokémon is, de aanvalskracht, verdedigingstatistieken of andere eigenschappen – het meest voorspellend zijn voor de gevechtsresultaten binnen deze specifieke, vereenvoudigde dataset.

Deze benadering verschilt van “unsupervised learning,” waarin geen vooraf gelabelde uitkomsten zijn. Bij unsupervised learning moet het algoritme door de gegevens gaan en zelf proberen structuur of patronen te ontdekken, vaak door gegevenspunten in clusters te groeperen of patronen te vinden die de inherente structuur van de gegevens definiëren. Het is als een zelfgeleide ontdekkingsreis waarbij het algoritme de gegevens moet begrijpen zonder een leidraad van antwoorden.

Laten we nu onze gegevens inladen en ze onderzoeken:

r
battles <- read.csv("data/ch5_battles.csv") glimpse(battles)

In deze dataset hebben we drie kolommen:

  • first_pokemon: de id van de Pokémon die in het gevecht is gegaan (bijvoorbeeld de aanvaller)

  • second_pokemon: de id van de verdedigende Pokémon

  • winner: de id van de winnende Pokémon

We moeten enkele extra stappen ondernemen om deze gegevens nuttig te maken voor analyse. We beginnen met het maken van een kolom die aangeeft of de aanvallende Pokémon de winnaar was. Dit zal ons een eenvoudige binaire kolom opleveren die we kunnen gebruiken om een logistisch model te trainen.

r
battles <- battles |> mutate(attacker_winner = ifelse(winner == first_pokemon, 1, 0))

Daarna moeten we de dataset samenvoegen met onze Pokémon-statistieken. We gaan de inner_join()-functie gebruiken om de eerste en tweede Pokémon met hun id te matchen. Aangezien alle kolomnamen hetzelfde zijn, voegen we een suffix toe om aan te geven welke statistieken bij de aanvaller en welke bij de verdediger horen.

r
battles <- battles |> inner_join(pokemon, by = c("first_pokemon" = "id")) |> inner_join(pokemon, by = c("second_pokemon" = "id"), suffix = c(".attacker", ".defender"))

Nu we onze gegevens hebben, kunnen we doorgaan naar de tweede stap in ons proces: het maken van een logistisch regressiemodel. We willen ervoor zorgen dat ons model alleen de variabelen bevat die essentieel zijn voor het maken van voorspellingen, specifiek de statistische eigenschappen van de Pokémon en de uitkomst van het gevecht.

Hoe de Vroege Zwarte Filmindustrie Creatief omging met Beperkingen

In de vroege twintigste eeuw bevond de zwarte filmindustrie zich in een uitdagende positie. Financiële beperkingen waren veel strikter dan die van de mainstream filmindustrie. Dit dwingt ons om niet alleen de productieomstandigheden, maar ook de inventiviteit en veerkracht van de zwarte filmgemeenschap te begrijpen. De lage budgetten betekenden dat de betrokkenen bij de productie van race films vaak verschillende rollen vervulden. Dit was niet enkel een pragmatische keuze vanwege de kosten, maar getuigde ook van de creativiteit die kenmerkend was voor de makers van deze films. Het kwam vaak voor dat een individu niet alleen als acteur optrad, maar ook als regisseur of cameraman werkte. Deze multidisciplinaire betrokkenheid was een noodzakelijke en gedurfde reactie op de economische realiteit, die tegelijk de artistieke en professionele grenzen van deze gemeenschap vergrootte.

Als we de data van de vroege zwarte films analyseren, zien we dat sommige individuen essentieel waren voor het industrieklimaat en bijdroegen aan meerdere filmprojecten. In onze gegevens worden deze bijdragen weergegeven in de vorm van een lijst van filmtitels die aan elke naam zijn gekoppeld. Zo zien we bijvoorbeeld dat Howard August in zowel Smiling Hate als Children of Fate te zien is. De opzet van deze gegevens brengt echter uitdagingen met zich mee voor eenvoudige kwantitatieve analyses. Het verkrijgen van antwoorden op basale vragen, zoals het aantal films waarin een acteur verscheen of welke films de meest diverse cast hadden, wordt bemoeilijkt door de niet-gestandaardiseerde opzet van de gegevens. Dit betekent dat we vaak genoodzaakt zijn om de titels van films op te splitsen in afzonderlijke waarnemingen om de analyse te vereenvoudigen.

Wanneer we de top tien van meest voorkomende acteurs in onze dataset bekijken, blijkt dat Lawrence Chenault opvalt met maar liefst 22 filmverschijningen. Op de voet gevolgd door Will Starks, Sam Robinson en Samuel Jacks, wat doet vermoeden dat de race filmindustrie een relatief klein aantal talenten in verschillende producties betrok. Deze cijfers roepen de vraag op of dit een uitzondering was, of dat het normaal was voor acteurs om in meerdere films op te treden.

Bij het verder onderzoeken van de data blijkt uit de verdeling van het aantal filmverschijningen per acteur (zie figuur 7.2) dat de meerderheid van de acteurs slechts in één film verscheen. Dit geeft ons inzicht in de werking van de race films. Voor veel acteurs was het optreden in een race film waarschijnlijk eenmalig. Gezien de lage budgetten van de meeste van deze films, is het goed mogelijk dat regisseurs veelal hun eigen sociale netwerk aanhieven om kleine rollen in te vullen. Zelfs de acteurs die meerdere keren optraden, konden niet van hun verschijningen in deze films leven. Dit beeld van tijdelijke betrokkenheid wordt versterkt door het feit dat de filmindustrie zelf vaak over beperkte middelen beschikte.

Toch zijn er enkele uitzonderingen op deze norm. Zoals blijkt uit figuur 7.3, springt de film Deceit uit 1923 van Oscar Micheaux eruit door het grote aantal van 25 acteurs in de cast, wat aanzienlijk is in vergelijking met andere films uit die tijd. Dit is bijzonder opvallend, aangezien Micheaux bekend stond om zijn vermogen om beperkte middelen optimaal in te zetten. Hij wist een balans te vinden tussen het creatieve en economische aspect van filmproductie, wat zijn films tot enkele van de belangrijkste werken in de vroege zwarte filmgeschiedenis maakte. De aanwezigheid van zulke grote casts in films als Deceit en Within Our Gates toont de transformatie van deze films van nicheproducties naar belangrijke culturele artefacten.

Daarnaast is het relevant om te begrijpen dat, ondanks de vooruitgang in de representatie van Afro-Amerikanen in de filmindustrie, deze films een directe reactie waren op de heersende raciale structuren van de samenleving. Ze boden niet alleen vermaak, maar ook een platform voor zwarte stemmen die anders uitgesloten zouden zijn van de mainstream cinema. De personages en verhalen die in deze films naar voren kwamen, reflecteerden de sociale en politieke dynamiek van de tijd en boden een alternatief voor de vaak stereotiepe weergaven van zwarte mensen in de grotere filmindustrie.

Een ander belangrijk element om te overwegen is hoe deze vroege films de fundamenten legden voor de latere successen van zwarte filmmakers en acteurs. De uitdagingen waarmee zij werden geconfronteerd, dwongen hen om voortdurend buiten de gebaande paden te denken. Deze creativiteit, aangevuld met de vastberadenheid om ondanks de beperkte middelen films te maken, speelde een cruciale rol in het vormgeven van een identiteit voor de zwarte filmindustrie die tot op de dag van vandaag voortduurt.