AI, klimaudfordringer og sammenstyrtede broer
Formål
I 2018 styrtede dele af Morandi broen i Genova, Italien sammen og 43 mennesker omkom. En del af grunden til katastrofen var for ringe beton.
I 2021 styrtede dele af en 12-etagers bygning sammen i Miami, Florida. 98 mennesker døde. Også her var betonens styrke en del af grunden til katastrofen.
Cement er en betydelig del af beton, og produktionen af cement udgør (https://en.wikipedia.org/wiki/Cement?utm_source=chatgpt.com) af verdens \(\textrm{CO}_2\) udledning, og har derfor en betydelig indflydelse på klimakrisen.
Den årlige produktion af beton er ca. 30 mia. tons, hvilket gør beton til det næstmest anvendte materiale efter vand.
Det er derfor af flere grunde vigtigt at se på modeller for, hvordan beton kan laves med tilstrækkelig høj styrke, men samtidig med så lavt indhold af cement som muligt.
Kemiske laboratorieforsøg er naturligvis meget vigtige til dette – men de er også både dyre og tidskrævende. Så derfor ser man også på matematiske modeller.
Formålet med dette forløb er derfor at se på forskellige metoder til at lave en model for en betons styrke ud fra cementindholdet, vandindholdet og alderen af betonen. Vi vil se på almindelig lineær regression, multipel lineær regression og neurale netværk til at gøre dette.
Introduktion
Vi vil bruge en del af datasættet Concrete Compressive Strength.
I den del af datasættet vi ser på, har vi information om mængden af cement, mængden af vand, hvor mange dage betonen har hærdet (alder) og betonens trykstyrke.
Vi vil lave forskellige modeller til at forudsige trykstyrken ud fra de øvrige tre variable: cement, vand og alder.
Vi vil bruge 80% af datasættet til at træne modellen og 20% af datasættet til at teste, hvor god modellen så er blevet. Det gør vi for at undgå det, man kalder for overfitting, hvor modellen tilpasser sig de konkrete data for godt og derfor bliver ringere til at prædiktere nye data.
Lineær regression
Vi starter med helt almindelig lineær regression, hvor vi både forsøger med cement, vand og alder som forklarende variabel.
Det skulle gerne være tydeligt, at ingen af de tre simple lineære modeller er særligt gode. Inden vi går videre til mere komplicerede modeller, vil vi lave det, man kalder for feature-engineering, hvor vi vil gøre to ting:
Den første er, at vi vil se på \(\log(\textrm{alder})\) som variabel i stedet for alder. Betons styrke bliver hurtigt bedre i starten, men derefter er virkningen af alder aftagende. Da grafen for \(\log(\textrm{x})\) netop har den egenskab, at den vokser hurtigere i starten, og derefter flader ud, vil vi forvente, at \(\log(\textrm{alder})\) giver en bedre forklaring.
Den anden pointe er, at mere cement i sig selv gør beton stærkere, mens mere vand gør beton svagere. Det betyder dog ikke, at man helt kan undvære vand, da det netop er blandingen af cement og vand, der skaber betonens styrke gennem hydratiseringsprocessen. Vi tilføjer derfor en ny variabel, \(\frac{\textrm{vand}}{\textrm{cement}}\) (også kendt som vand-cement-forholdet), som udtrykker den præcise balance mellem de to ingredienser, der bestemmer betonens endelige kvalitet.
Multipel lineær regression
Vi har nu fire forklarende variable, hvoraf ingen af dem i sig selv er særligt god til at forklare styrken, men mon det kan gøres bedre, hvis vi bruger alle fire samtidig?
Til det skal vi bruge en ny type model, som kaldes for multipel lineær regression.
\[ \begin{aligned} y_{\textrm{styrke}} = a_{\textrm{cement}} \cdot x_{\textrm{cement}} + & a_{\textrm{vand}} \cdot x_{\textrm{vand}} + \\ &a_{\log(\textrm{alder})} \cdot x_{\log(\textrm{alder})} + a_{\frac{\textrm{vand}}{\textrm{cement}}} \cdot x_{\frac{\textrm{vand}}{\textrm{cement}}} + b \end{aligned} \]
Man kan lave multipel lineær regression i mange forskellige værktøjer for eksempel Excel, Maple eller NSpire.
For de almindelige lineære regressioner kunne vi lave et punktplot (scatterplot) med den forklarende variabel (som kaldes for en feature) på \(x\)-aksen og den afhængige variabel (som kaldes for target) på \(y\)-aksen samt regressionslinjen. Den mulighed har vi ikke, når der nu er flere forklarende variable (features), så vi må lave et andet type plot.
Vi vil lave et plot, hvor den rigtige værdi af styrke er på \(x\)-aksen og modellens prædikterede værdi er på \(y\)-aksen. Der skulle nemlig gerne være stor overensstemmelse mellem de to.
Vi vil bruge de fem modeller, vi har lavet – men nu vil vi inddrage de 20% af data, som vi netop havde taget fra til at teste modellerne.
Lad os se på et lille eksempel, inden du selv skal i gang igen. Da vi så på modellen med cement som den eneste forklarende variabel, gav regressionen
\[ y_{\textrm{styrke}} = 0.0779 \cdot x_{\textrm{cement}} + 13.785 \]
I Excel-filen med testdata, ser vi i den første række, at mængden af cement er \(266\) og styrken af betonen \(52.9\). Indsættes \(266\) i modellen, giver det
\[ y_{\textrm{styrke}} = 0.0779 \cdot 266 + 13.785 =34.5 \]
Vi skal derfor have et punkt \((y_{\textrm{data}}, y_{\textrm{model}}) = (52.9, 34.5)\) i plottet. Tilsvarende skal modellens \(y\)-værdien bestemmes for de øvrige rækker i testdata.
Inden vi kan lave samme plot og regression for de øvrige modeller, skal du tilføje søjlerne med \(\log(\textrm{alder})\) og \(\frac{\textrm{vand}}{\textrm{cement}}\) til Excel-arket med testdata.
Det er, igen, åbenlyst, at en model med kun én forklarende variabel er utilstrækkelig. Hældningskoefficienten for regressionen skulle optimalt være \(1\), men er i alle tilfælde langt under \(1\).
Neuralt netværk
Okay, det var betydeligt bedre, men stadig med plads til forbedringer. Måske du har tænkt på, at vi lovede, at vi skulle bruge AI. Lad os derfor se på, om AI i form af et såkaldt neuralt netværk kan lave en model, som klarer opgaven med at prædiktere betonens styrke bedre.
Som du lige har opdaget, er det neurale netværk i stand til at klare opgaven lidt bedre end den multiple lineære regression.
Flere forklarende variable
Lad os til sidst se, om vi kan lave en endnu mere præcis model, hvis vi inddrager flere forklarende variable (features).
Her er træningsdata 80% af datasættet til at træne modellen og 20% af datasættet til at teste den.
Åbn hver af de to filer. Tilføj to søjler inden alder, hvor du beregner \(\log(\textrm{alder})\) og \(\frac{\textrm{vand}}{\textrm{cement}}\) (på den måde kommer alle de forklarende variable til at stå i et sammenhængende område).
Vi ender altså med en rimeligt præcist model, når vi tager alle variable med – hvor det neurale netværk gør det bedre end multipel lineær regression.
Fordelen ved den multiple lineære model er, at vi kan tolke på værdierne af koefficienterne. Ulempen er, at modellen har sværere ved at fange ikke-lineære tendenser i data.
Fordelen ved det neurale net er, at det er rigtigt godt til at fange ikke-lineære tendenser. Ulempen er, at vi ikke får koefficienter, som vi kan forstå betydningen af.