Detecteren van scraper-bots via scrollgedrag

We kunnen deze waarden gebruiken om het gedrag van verzonden e-mails, teksten of zelfs hartslagen te analyseren wanneer alleen het tijdstip waarop deze gebeurtenissen plaatsvonden bekend is. Op basis van een dataset van reeds geclassificeerde data kunnen we hiermee duidelijk vaststellen welke patronen menselijk zijn en welke niet. We weten dat mensen op een 'bursty' manier reageren op berichten (de tijd die ze nodig hebben om te antwoorden is niet uniform), terwijl eenvoudige bots zo snel mogelijk reageren. Hierdoor hebben ze verschillende B- en M-coëfficiënten.

(Bron: Goh, K.-I., & Barabási, A.-L. (2008), Figuur 4)

In eerder persoonlijk onderzoek heb ik deze twee waarden gebruikt om onderscheid te maken tussen menselijke sessies en botsessies op basis van de timing van hun verzoeken. Hoewel dit meestal werkte, identificeerde deze aanpak sessies als menselijk zodra ze werden verzonden vanuit een browser die CSS- en JS-bestanden lade. Hierdoor konden geavanceerdere bots, zoals ClaudeBot, menselijk overkomen door gebruik te maken van een headless browser. In essentie maakte het onderscheid tussen handmatig gemaakte verzoeken en verzoeken verzonden via een echte browser, in plaats van tussen een bot en een mens.

Het scrollwiel

Een tijd geleden viel me een specifiek menselijk gedrag op dat naar mijn mening niet gemakkelijk door bots kan worden nagebootst: scrollen. Wanneer ik met het scrollwiel door een pagina navigeer op zoek naar informatie, scroll ik meestal niet lineair naar beneden tot ik vind wat ik zoek; ik doe dit in een 'bursty' patroon. Dit patroon vertoont meer gelijkenis met tijdreeksen 'a' of 'e' dan met 'c'.

(Bron: Goh, K.-I., & Barabási, A.-L. (2008), Figuur 1)

Ik vermoed dat de meeste ontwikkelaars van scraping-bots hun scrollpatroon nog niet hebben geperfectioneerd. Daarom besloot ik te testen of burstiness en memory, toegepast op de intervallen tussen scroll-events, variabelen zijn met voorspellende kracht in een machine learning-model om onderscheid te maken tussen mensen en bots.

Hiervoor heb ik de dataset gebruikt die is verstrekt door het artikel "FP-Agent: Fingerprinting AI Browsing Agents" van Ethan Wang et al. In dit artikel leggen de auteurs uit hoe zij een machine learning-model hebben gebouwd dat verschillende AI-browsing-agents kan onderscheiden in een gecontroleerde omgeving (een website die specifiek voor dit doel is gemaakt). Zij legden data vast van verschillende agents en mensen die door hun website navigeerden. Hoewel hun model goede resultaten gaf, denk ik niet dat het effectief zou zijn in een echte omgeving op verschillende websites vanwege de grote variatie. Desalniettemin stelden zij de dataset beschikbaar voor download via OSF.io.

Ik heb de burstiness- en memory-waarden berekend voor de JavaScript- "scroll"-events van elke agent op elke pagina (één waarde voor B en M per bezochte pagina).

De resultaten laten zien dat de menselijke distributie duidelijk verschilt van die van de andere agents; mensen vertonen een hogere Burstiness-coëfficiënt en bijna geen Memory. De enige agent die soms op mensen lijkt, is de ChatGPT Agent. Deze data lijken veelbelovend. Om verder te bewijzen of deze twee waarden voorspellende waarde hebben, heb ik een LightGBM-model (decision tree gradient boosting) getraind om elke interactie op een enkele pagina te classificeren.

Het model had slechts twee kenmerken tot zijn beschikking, B en M, en moest voorspellen welke agent de interacties uitvoerde. Het resultaat was een nauwkeurigheid van 73,4%, wat niet slecht is. Zoals verwacht verwisselde het model voornamelijk mensen met de ChatGPT Agent. Dit is waarschijnlijk te wijten aan het lage aantal kenmerken of een te kleine dataset (ongeveer 150 datapunten per agent is te weinig); het model zou extra kenmerken nodig hebben om een scherper onderscheid te kunnen maken.

Conclusie

Scrollgedrag lijkt een relevant datapunt te zijn voor het onderscheiden van bots en mensen, en Burstiness en Memory zijn in een gecontroleerde omgeving effectief gebleken als voorspellende factoren. Deze aanpak zal uiteraard niet werken op websites waar niet gescrold hoeft te worden, maar blogs of informatieve sites zoals Wikipedia kunnen juist optimaal profiteren van deze methode.

Het model in dit artikel is nog niet nauwkeurig genoeg. Echter, indien gecombineerd met meer kenmerken afgeleid van andere acties — zoals muisbewegingen of typgedrag — geloof ik dat het mogelijk is om een algemeen model te creëren dat websites kan beschermen tegen scraper-bots.

Ik zal mijn onderzoek op deze website blijven delen. De volgende stap is een analyse van muisbewegingspatronen.