
Technologie
Machine learning met ML.NET
Machine learning is tegenwoordig overal te vinden, van aanbevelingen op Netflix tot aan spraakassistenten op je telefoon. Maar hoe pas je dit nou toe als .NET developer zonder over te stappen naar Python? ML.NET biedt gelukkig de perfecte manier om dit direct toe te passen binnen het .NET ecosysteem.
In deze blog duiken we in een praktisch voorbeeld uit de maritieme sector: het voorspellen van brandstofverbruik van schepen. We laten zien hoe je met ML.NET en een dataset vol waardevolle gegevens een machine learning model kunt trainen om brandstofverbruik te voorspellen.
Waarom ML.NET?
Bij Garansys werken we voornamelijk met .NET en andere Microsoft technologieën. Vaak hoor je dat machine learning betekent dat je moet overstappen op Python of gespecialiseerde frameworks zoals Tensorflow. Maar met ML.NET kunnen we machine learning toepassen binnen de bestaande .NET omgeving, zonder extra tooling.
ML.NET biedt de mogelijkheid om direct in C# modellen te trainen en te gebruiken, wat betekent:
- Geen extra tooling nodig
- Makkelijk te integreren
- Toegankelijk
Met ML.NET kunnen we patronen ontdekken, voorspellingen doen en data-analyse uitvoeren, allemaal zonder de vertrouwde technologieën los te laten.
Het project: brandstofverbruik voorspellen
In de maritieme sector is het brandstofverbruik één van de grootste kostenposten. Hoeveel brandstof een schip verbruikt, hangt af van verschillende factoren, zoals de afstand, het weer en het type schip. Door een machine learning-model te trainen met historische data kunnen we voorspellen hoeveel brandstof een schip nodig zal hebben voor een bepaalde reis. Dit helpt bij het besparen van kosten en efficiënter plannen.
Welke data gebruiken we?
Om een goed model te bouwen, hebben we een dataset met de volgende gegevens nodig:
- Scheepstype (bijvoorbeeld tanker, containerschip, bulk carrier)
- Route (welke havens worden aangedaan)
- Afgelegde afstand
- Maand
- Brandstoftype (HFO, diesel, LNG)
- Weersomstandigheden (kalm, gematigd, stormachtig)
- Motorefficiëntie (hoe zuinig de motor is)
- CO2 uitstoot
- Werkelijk brandstofverbruik (onze doelwaarde die we willen voorspellen)
Door deze variabelen te analyseren, leert ons model welke factoren invloed hebben op het brandstofverbruik. Vervolgens kan het model op basis van nieuwe gegevens een voorspelling maken voor toekomstige reizen.
Stap 1: Data voorbereiden
Het succes van een machine learning-model wordt bepaald door de data die het krijgt. Voor een model dat brandstofverbruik voorspelt, moeten we ervoor zorgen dat de data goed is gestructureerd en bruikbaar is. In de ruwe vorm heeft de dataset tekstwaarden zoals scheepstype en brandstoftype. Een model kan hier niet veel mee. Daarom zetten we deze om in getallen met One-Hot encoding. Met deze methode krijgt elke unieke categorie zijn eigen kolom met 0 of 1, zodat het model geen verkeerde opvattingen krijgt van de volgorden van deze waardes.
Daarnaast bevatten sommige kolommen extreem uiteenlopende waardes, zoals de afstand en motorefficiëntie. Als we dit direct in het model zouden stoppen dan zou een waarde zoals ‘3000KM’ veel zwaarder wegen dan een kleine waarde zoals ‘85% efficiëntie’, terwijl ze niet persé belangrijker zijn. Door de data te normaliseren met een MinMax-scaling brengen we alles naar dezelfde schaal.
Tot slot moeten we kritisch gaan kijken naar de variabelen die we willen gebruiken. CO2-uitstoot is bijvoorbeeld direct afhankelijk van brandstofverbruik. Als we dit als input meenemen, leert het model simpelweg een berekening in plaats van echte patronen. Daarom laten we deze weg.
Door deze stappen uit te voeren, leert het model echt patronen te herkennen en kan het een betrouwbare voorspelling geven.
Stap 2: Model trainen
Nu we de data hebben voorbereid, kunnen we het model gaan trainen. Voor dit probleem kiezen we een regressiemodel, omdat we een continue waarde willen voorspellen: het brandstofverbruik van een schip. Ml.NET heeft verschillende regressie-algoritmes die je kunt gebruiken. Vaak is het experimenteren om te bepalen welke het beste werkt voor de data waar je mee werkt. In dit geval bleek FastTree de beste prestaties te leveren voor deze dataset.
In ML.NET bouwen we een pipeline waarin we alle stappen combineren: het kopiëren van de doel variabel (fuel_consumption), het transformeren van de data en het trainen van het model.
In code ziet dat er zo uit:
Met deze regels zorgen we ervoor dat alle benodigde transformaties op de dataset worden toegepast voordat we het model gaan trainen. Vervolgens kunnen we het model met een simpele regel trainen:
Na het trainen kunnen we het model direct gaan gebruiken om voorspellingen te doen op nieuwe data. Maar voordat we hiermee beginnen, moeten we eerst controleren of het model wel betrouwbaar genoeg is.
Stap 3: Model evalueren
Een machine learning-model is pas echt bruikbaar als het betrouwbare voorspellingen kan doen. Daarom evalueren we het model op een aparte test dataset die niet is gebruikt tijdens de training. Zo krijgen we een realistisch beeld van de prestaties.
Om te meten hoe goed het model echt werkt, gebruiken we de volgende statistieken:
· R²-score: Deze score meet hoe goed een model past bij de data. Een score van 1 betekent een perfecte voorspelling, terwijl een score van 0 betekent dat het model nauwelijks beter is dan gokken.
· MAE (Mean Absolute Error : Dit laat zien hoeveel de voorspellingen gemiddeld afwijken van de echte waarden. Hoe lager deze waarde, des te beter.
· RMSE (Root Mean Squared Error): Deze waarde geeft extra gewicht aan grotere fouten waardoor uitschieters beter zichtbaar worden.
In de code ziet dat er als volgt uit:
Het getrainde model behaalde een R²-score van 0.9533, wat betekent dat het model heel nauwkeurig is in het voorspellen van het verbruik. Toch lag de RMSE hoger dan de MAE, wat suggereert dat er wat uitschieters zijn waarbij het model moeite heeft om deze goed te voorspellen. Door hier verder onderzoek naar te doen en het model te verfijnen, zouden we dit naar beneden kunnen brengen.
Stap 4: Resultaten visualiseren
Een model trainen is één ding, maar om echt inzicht te krijgen in de prestaties is het nuttig om de resultaten te visualiseren. Dit helpt bij het begrijpen van de prestaties en laat zien waar het model goed scoort en waar er nog verbeteringen mogelijk zijn.
In ons geval hebben we een scatterplot gemaakt die de werkelijke brandstofconsumptie vergelijkt met de voorspelde waarden:
De rode lijn toont de ideale voorspelling als het model perfect zou zijn, maar zo ver zijn we nog niet. In de praktijk zien we dat de meeste voorspellingen redelijk in de buurt liggen met een paar afwijkingen hier en daar. Dit kan wijzen op factoren die niet goed zijn meegenomen in het model of op onverwachte variaties in de dataset.
Door deze visualisatie kunnen we het model niet alleen numeriek beoordelen, maar ook beter begrijpen waar de sterke en zwakke punten liggen.
Conclusie
Dit experiment met ML.NET laat zien dat machine learning binnen het .NET ecosysteem zeer toegankelijk is. We hebben zonder externe tools of ingewikkelde AI-frameworks een model gebouwd dat het brandstofverbruik van schepen kan voorspellen.
De mogelijkheden van machine learning gaan veel verder dan alleen dit voorbeeld. In de maritieme sector kan machine learning ook worden ingezet om efficiëntere routes te berekenen of voorspellingen te doen over benodigd onderhoud. Niet alleen deze industrie heeft hier baat bij, maar ook in de logistiek, finance en productie kan data-analyse nieuwe inzichten brengen die anders niet herkend zouden worden.
Tijdens dit project werd ook duidelijk dat machine learning niet alleen zorgt voor betere voorspellingen, maar ook dwingt om gestructureerder met data om te gaan. Door data zorgvuldig te verwerken en analyseren kun je patronen herkennen die anders onopgemerkt zouden blijven.
Bij Garansys zoeken we continu naar manier om te innoveren en nieuwe technologieën praktisch toepasbaar te maken. Machine learning biedt hierin interessante mogelijkheden, van optimalisatie in de scheepsvaart tot aan slimmere besluitvorming in andere sectoren. ML.NET laat zien dat AI niet iets abstracts of onbereikbaars hoeft te zijn, maar juist een waardevolle toevoeging kan zijn aan bestaande applicaties. Door slimme data-analyse en voorspellingen kunnen we bedrijfsprocessen verbeteren en onze klanten helpen om beter onderbouwde beslissingen te nemen.
Voor ons als .NET-ontwikkelaars is dit een mooie kans om machine learning niet als een apart vakgebied te zien, maar als een concrete tool om software slimmer en effectiever te maken. Bij Garansys blijven we deze ontwikkelingen verkennen en kijken we hoe we AI kunnen inzetten om échte impact te maken.
Wil je zelf experimenteren met ML.NET? Kijk eens in de officiële documentatie en probeer een model te trainen op een dataset die relevant is voor jouw projecten. Wie weet ontdek je een toepassing die direct waarde toevoegt aan je werk!
Geschreven door: Samsor Wali