2150 lines
82 KiB
HTML
2150 lines
82 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en"><head>
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js" integrity="sha512-bLT0Qm9VnAYZDflyKcBaQ2gg0hSYNQrJ8RilYldYQ1FxQYoCLtUjuuRuZo+fjqhx/qtq/1itJ0C2ejDxltZVFg==" crossorigin="anonymous"></script><script src="slides_files/libs/clipboard/clipboard.min.js"></script>
|
||
<script src="slides_files/libs/quarto-html/tabby.min.js"></script>
|
||
<script src="slides_files/libs/quarto-html/popper.min.js"></script>
|
||
<script src="slides_files/libs/quarto-html/tippy.umd.min.js"></script>
|
||
<link href="slides_files/libs/quarto-html/tippy.css" rel="stylesheet">
|
||
<link href="slides_files/libs/quarto-html/light-border.css" rel="stylesheet">
|
||
<link href="slides_files/libs/quarto-html/quarto-syntax-highlighting-549806ee2085284f45b00abea8c6df48.css" rel="stylesheet" id="quarto-text-highlighting-styles"><meta charset="utf-8">
|
||
<meta name="generator" content="quarto-1.6.40">
|
||
|
||
<title>Explainable AI</title>
|
||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
|
||
<link rel="stylesheet" href="slides_files/libs/revealjs/dist/reset.css">
|
||
<link rel="stylesheet" href="slides_files/libs/revealjs/dist/reveal.css">
|
||
<style>
|
||
code{white-space: pre-wrap;}
|
||
span.smallcaps{font-variant: small-caps;}
|
||
div.columns{display: flex; gap: min(4vw, 1.5em);}
|
||
div.column{flex: auto; overflow-x: auto;}
|
||
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
||
ul.task-list{list-style: none;}
|
||
ul.task-list li input[type="checkbox"] {
|
||
width: 0.8em;
|
||
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
|
||
vertical-align: middle;
|
||
}
|
||
/* CSS for syntax highlighting */
|
||
pre > code.sourceCode { white-space: pre; position: relative; }
|
||
pre > code.sourceCode > span { line-height: 1.25; }
|
||
pre > code.sourceCode > span:empty { height: 1.2em; }
|
||
.sourceCode { overflow: visible; }
|
||
code.sourceCode > span { color: inherit; text-decoration: inherit; }
|
||
div.sourceCode { margin: 1em 0; }
|
||
pre.sourceCode { margin: 0; }
|
||
@media screen {
|
||
div.sourceCode { overflow: auto; }
|
||
}
|
||
@media print {
|
||
pre > code.sourceCode { white-space: pre-wrap; }
|
||
pre > code.sourceCode > span { display: inline-block; text-indent: -5em; padding-left: 5em; }
|
||
}
|
||
pre.numberSource code
|
||
{ counter-reset: source-line 0; }
|
||
pre.numberSource code > span
|
||
{ position: relative; left: -4em; counter-increment: source-line; }
|
||
pre.numberSource code > span > a:first-child::before
|
||
{ content: counter(source-line);
|
||
position: relative; left: -1em; text-align: right; vertical-align: baseline;
|
||
border: none; display: inline-block;
|
||
-webkit-touch-callout: none; -webkit-user-select: none;
|
||
-khtml-user-select: none; -moz-user-select: none;
|
||
-ms-user-select: none; user-select: none;
|
||
padding: 0 4px; width: 4em;
|
||
color: #aaaaaa;
|
||
}
|
||
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
|
||
div.sourceCode
|
||
{ color: #003b4f; background-color: #f1f3f5; }
|
||
@media screen {
|
||
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
|
||
}
|
||
code span { color: #003b4f; } /* Normal */
|
||
code span.al { color: #ad0000; } /* Alert */
|
||
code span.an { color: #5e5e5e; } /* Annotation */
|
||
code span.at { color: #657422; } /* Attribute */
|
||
code span.bn { color: #ad0000; } /* BaseN */
|
||
code span.bu { } /* BuiltIn */
|
||
code span.cf { color: #003b4f; font-weight: bold; } /* ControlFlow */
|
||
code span.ch { color: #20794d; } /* Char */
|
||
code span.cn { color: #8f5902; } /* Constant */
|
||
code span.co { color: #5e5e5e; } /* Comment */
|
||
code span.cv { color: #5e5e5e; font-style: italic; } /* CommentVar */
|
||
code span.do { color: #5e5e5e; font-style: italic; } /* Documentation */
|
||
code span.dt { color: #ad0000; } /* DataType */
|
||
code span.dv { color: #ad0000; } /* DecVal */
|
||
code span.er { color: #ad0000; } /* Error */
|
||
code span.ex { } /* Extension */
|
||
code span.fl { color: #ad0000; } /* Float */
|
||
code span.fu { color: #4758ab; } /* Function */
|
||
code span.im { color: #00769e; } /* Import */
|
||
code span.in { color: #5e5e5e; } /* Information */
|
||
code span.kw { color: #003b4f; font-weight: bold; } /* Keyword */
|
||
code span.op { color: #5e5e5e; } /* Operator */
|
||
code span.ot { color: #003b4f; } /* Other */
|
||
code span.pp { color: #ad0000; } /* Preprocessor */
|
||
code span.sc { color: #5e5e5e; } /* SpecialChar */
|
||
code span.ss { color: #20794d; } /* SpecialString */
|
||
code span.st { color: #20794d; } /* String */
|
||
code span.va { color: #111111; } /* Variable */
|
||
code span.vs { color: #20794d; } /* VerbatimString */
|
||
code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */
|
||
</style>
|
||
<link rel="stylesheet" href="slides_files/libs/revealjs/dist/theme/quarto-bbe7401fe57d4b791b917637bb662036.css">
|
||
<link rel="stylesheet" href="custom.css">
|
||
<link href="slides_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.css" rel="stylesheet">
|
||
<link href="slides_files/libs/revealjs/plugin/reveal-menu/menu.css" rel="stylesheet">
|
||
<link href="slides_files/libs/revealjs/plugin/reveal-menu/quarto-menu.css" rel="stylesheet">
|
||
<link href="slides_files/libs/revealjs/plugin/quarto-support/footer.css" rel="stylesheet">
|
||
<style type="text/css">
|
||
.reveal div.sourceCode {
|
||
margin: 0;
|
||
overflow: auto;
|
||
}
|
||
.reveal div.hanging-indent {
|
||
margin-left: 1em;
|
||
text-indent: -1em;
|
||
}
|
||
.reveal .slide:not(.center) {
|
||
height: 100%;
|
||
}
|
||
.reveal .slide.scrollable {
|
||
overflow-y: auto;
|
||
}
|
||
.reveal .footnotes {
|
||
height: 100%;
|
||
overflow-y: auto;
|
||
}
|
||
.reveal .slide .absolute {
|
||
position: absolute;
|
||
display: block;
|
||
}
|
||
.reveal .footnotes ol {
|
||
counter-reset: ol;
|
||
list-style-type: none;
|
||
margin-left: 0;
|
||
}
|
||
.reveal .footnotes ol li:before {
|
||
counter-increment: ol;
|
||
content: counter(ol) ". ";
|
||
}
|
||
.reveal .footnotes ol li > p:first-child {
|
||
display: inline-block;
|
||
}
|
||
.reveal .slide ul,
|
||
.reveal .slide ol {
|
||
margin-bottom: 0.5em;
|
||
}
|
||
.reveal .slide ul li,
|
||
.reveal .slide ol li {
|
||
margin-top: 0.4em;
|
||
margin-bottom: 0.2em;
|
||
}
|
||
.reveal .slide ul[role="tablist"] li {
|
||
margin-bottom: 0;
|
||
}
|
||
.reveal .slide ul li > *:first-child,
|
||
.reveal .slide ol li > *:first-child {
|
||
margin-block-start: 0;
|
||
}
|
||
.reveal .slide ul li > *:last-child,
|
||
.reveal .slide ol li > *:last-child {
|
||
margin-block-end: 0;
|
||
}
|
||
.reveal .slide .columns:nth-child(3) {
|
||
margin-block-start: 0.8em;
|
||
}
|
||
.reveal blockquote {
|
||
box-shadow: none;
|
||
}
|
||
.reveal .tippy-content>* {
|
||
margin-top: 0.2em;
|
||
margin-bottom: 0.7em;
|
||
}
|
||
.reveal .tippy-content>*:last-child {
|
||
margin-bottom: 0.2em;
|
||
}
|
||
.reveal .slide > img.stretch.quarto-figure-center,
|
||
.reveal .slide > img.r-stretch.quarto-figure-center {
|
||
display: block;
|
||
margin-left: auto;
|
||
margin-right: auto;
|
||
}
|
||
.reveal .slide > img.stretch.quarto-figure-left,
|
||
.reveal .slide > img.r-stretch.quarto-figure-left {
|
||
display: block;
|
||
margin-left: 0;
|
||
margin-right: auto;
|
||
}
|
||
.reveal .slide > img.stretch.quarto-figure-right,
|
||
.reveal .slide > img.r-stretch.quarto-figure-right {
|
||
display: block;
|
||
margin-left: auto;
|
||
margin-right: 0;
|
||
}
|
||
</style>
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" integrity="sha512-c3Nl8+7g4LMSTdrm621y7kf9v3SDPnhxLNhcjFJbKECVnmZHTdo+IRO05sNLTH/D3vA6u1X32ehoLC7WFVdheg==" crossorigin="anonymous"></script>
|
||
|
||
<script type="application/javascript">define('jquery', [],function() {return window.jQuery;})</script>
|
||
</head>
|
||
<body class="quarto-light">
|
||
<div class="reveal">
|
||
<div class="slides">
|
||
|
||
<section id="title-slide" class="quarto-title-block center">
|
||
<h1 class="title">Explainable AI</h1>
|
||
<p class="subtitle">LIME & RBE auf Random Forest <br> mit Adult Census Datensatz</p>
|
||
|
||
<div class="quarto-title-authors">
|
||
</div>
|
||
|
||
<p class="date">11.4.2025</p>
|
||
</section>
|
||
<section>
|
||
<section id="datensatz" class="title-slide slide level1 center">
|
||
<h1>Datensatz</h1>
|
||
<p>Analyse der Daten</p>
|
||
</section>
|
||
<section id="adult-census-datensatz" class="slide level2">
|
||
<h2>Adult Census Datensatz</h2>
|
||
<ul>
|
||
<li class="fragment">Enthält demografische Informationen aus der US-Volkszählung</li>
|
||
<li class="fragment">Soll Einkommen einer Person vorhersagen (<|>50000$ pro Jahr)</li>
|
||
</ul>
|
||
</section>
|
||
<section id="datensatzauswahl" class="slide level2">
|
||
<h2>Datensatzauswahl</h2>
|
||
<ul>
|
||
<li class="fragment">Gut strukturiert und saubere Daten</li>
|
||
<li class="fragment">Weit verbreiteter Benchmark in der Forschung und im maschinellen Lernen –> wird in vielen Studien verwendet</li>
|
||
<li class="fragment">Vielfalt der Variablen Typen –> enthält sowohl kategorische als auch numerische Variablen</li>
|
||
<li class="fragment">Realistisches Datenset –> gut geeignet für praxisnahe Anwendungen</li>
|
||
</ul>
|
||
<aside class="notes">
|
||
<ol type="1">
|
||
<li>Gut strukturierte und saubere Daten Der Datensatz enthält strukturierte, tabellarische Daten mit klar definierten Spalten. Fehlende Werte sind begrenzt, sodass weniger Datenbereinigung erforderlich ist.</li>
|
||
<li>Klassifikationsproblem für Machine Learning Zielvariable: Einkommen (über oder unter 50.000 USD jährlich). Ideal für binäre Klassifikationsmodelle (z. B. Logistic Regression, Decision Trees, Random Forests, Neural Networks).</li>
|
||
<li>Vielfältige Feature-Typen Beinhaltet sowohl kategorische (z. B. Beruf, Geschlecht, Bildungsniveau) als auch numerische (z. B. Alter, Arbeitsstunden pro Woche) Variablen. Ermöglicht das Testen verschiedener Feature-Engineering-Methoden.</li>
|
||
<li>Ein realistisches Datenset Reale demografische und sozioökonomische Daten aus der US-Volkszählung (1994). Praktisch für praxisnahe Anwendungen wie Sozialforschung, Wirtschaftsanalyse oder politische Entscheidungsfindung.</li>
|
||
<li>Gut dokumentiert & weit verbreitet Häufig verwendet in Tutorials, Forschungsarbeiten und Kaggle-Wettbewerben. Viele Ressourcen und Beispielcodes verfügbar.</li>
|
||
<li>Ideal für Fairness- und Bias-Analysen Der Datensatz enthält sensible Merkmale wie Geschlecht und Ethnie. Eignet sich für Studien zur Diskriminierung und Fairness von Algorithmen.</li>
|
||
</ol>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="enthaltene-daten-im-datensatz" class="slide level2 smaller">
|
||
<h2>Enthaltene Daten im Datensatz</h2>
|
||
<table class="caption-top">
|
||
<thead>
|
||
<tr class="header">
|
||
<th>Column Name</th>
|
||
<th>Data Type</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="odd">
|
||
<td>age</td>
|
||
<td>int64</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td>workclass</td>
|
||
<td>object</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td>fnlwgt</td>
|
||
<td>int64</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td>education</td>
|
||
<td>object</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td>education.num</td>
|
||
<td>int64</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td>marital.status</td>
|
||
<td>object</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td>occupation</td>
|
||
<td>object</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td>relationship</td>
|
||
<td>object</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td>race</td>
|
||
<td>object</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td>sex</td>
|
||
<td>object</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td>capital.gain</td>
|
||
<td>int64</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td>capital.loss</td>
|
||
<td>int64</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td>hours.per.week</td>
|
||
<td>int64</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td>native.country</td>
|
||
<td>object</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td>income</td>
|
||
<td>object</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<aside class="notes">
|
||
<ol type="1">
|
||
<li>age (numerisch) Alter der Person (in Jahren).</li>
|
||
<li>workclass (kategorisch) Art der Anstellung der Person. Private (privatwirtschaftlich) Self-emp-not-inc (selbstständig, aber nicht als Unternehmen) Self-emp-inc (selbstständig mit Unternehmen) Government (staatliche Anstellung: Local, State, Federal) Without-pay (ohne Bezahlung) Never-worked (nie gearbeitet)</li>
|
||
<li>fnlwgt (numerisch) Final weight: Gewichtungsfaktor für Hochrechnungen in der Volkszählung -> gibt an wie viele Menschen mit ähnlichen Merkmalen in der Gesamtbevölkerung durch diese einzelne Person repräsentiert werden Wird meist für ML-Modelle nicht genutzt. –> für unseren Datensatz normalerweise nicht wichtig aber da wir eine Gewichtung machen</li>
|
||
<li>education (kategorisch) Bachelors (Bachelor-Abschluss) Masters (Master-Abschluss) Doctorate (Promotion)</li>
|
||
<li>education.num (numerisch) 9 (High School) 16 (Promotion)</li>
|
||
<li>marital.status (kategorisch) Familienstand der Person. Married (verheiratet) Divorced (geschieden) Never-married (nie verheiratet) Separated (getrennt lebend) Widowed (verwitwet)</li>
|
||
<li>occupation (kategorisch) Beruf der Person.</li>
|
||
<li>relationship (kategorisch) Beziehung zur Familie im Haushalt. Husband (Ehemann) Wife (Ehefrau) Own-child (eigenes Kind) Unmarried (unverheiratet)</li>
|
||
<li>race (kategorisch) Ethnische Zugehörigkeit der Person. White (weiß) Black (schwarz) Asian-Pac-Islander (asiatisch-pazifische Herkunft)</li>
|
||
<li>sex (kategorisch) Geschlecht der Person. Werte: Male (männlich), Female (weiblich)</li>
|
||
<li>capital.gain (numerisch) Kapitalgewinne (z. B. durch Investitionen).</li>
|
||
<li>capital.loss (numerisch) Kapitalverluste (z. B. aus Investitionen).</li>
|
||
<li>hours.per.week (numerisch) Durchschnittliche Arbeitsstunden pro Woche.</li>
|
||
<li>native.country (kategorisch) Herkunftsland der Person.</li>
|
||
<li>income (Zielvariable, kategorisch) Einkommensklasse der Person. <=50K (Jahreseinkommen ≤50.000 USD) >50K (Jahreseinkommen >50.000 USD)</li>
|
||
</ol>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="analyse-des-datensatzes" class="slide level2 smaller">
|
||
<h2>Analyse des Datensatzes</h2>
|
||
<ul>
|
||
<li class="fragment">Datensatzgröße</li>
|
||
<li class="fragment">Anzahl und Art der Datentypen</li>
|
||
<li class="fragment">Fehlende Werte in den einzelnen Spalten</li>
|
||
<li class="fragment">Statistische Zusammenfasung</li>
|
||
</ul>
|
||
<div class="fragment">
|
||
<div id="881a9903" class="cell" data-execution_count="1">
|
||
<div class="cell-output cell-output-display" data-execution_count="1">
|
||
<div>
|
||
<style scoped="">
|
||
.dataframe tbody tr th:only-of-type {
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.dataframe tbody tr th {
|
||
vertical-align: top;
|
||
}
|
||
|
||
.dataframe thead th {
|
||
text-align: right;
|
||
}
|
||
</style>
|
||
|
||
<table class="dataframe caption-top" data-quarto-postprocess="true" data-border="1">
|
||
<thead>
|
||
<tr class="header" style="text-align: right;">
|
||
<th data-quarto-table-cell-role="th"></th>
|
||
<th data-quarto-table-cell-role="th">age</th>
|
||
<th data-quarto-table-cell-role="th">fnlwgt</th>
|
||
<th data-quarto-table-cell-role="th">education.num</th>
|
||
<th data-quarto-table-cell-role="th">capital.gain</th>
|
||
<th data-quarto-table-cell-role="th">capital.loss</th>
|
||
<th data-quarto-table-cell-role="th">hours.per.week</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="odd">
|
||
<td data-quarto-table-cell-role="th">count</td>
|
||
<td>32561.000000</td>
|
||
<td>3.256100e+04</td>
|
||
<td>32561.000000</td>
|
||
<td>32561.000000</td>
|
||
<td>32561.000000</td>
|
||
<td>32561.000000</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td data-quarto-table-cell-role="th">mean</td>
|
||
<td>38.581647</td>
|
||
<td>1.897784e+05</td>
|
||
<td>10.080679</td>
|
||
<td>1077.648844</td>
|
||
<td>87.303830</td>
|
||
<td>40.437456</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td data-quarto-table-cell-role="th">std</td>
|
||
<td>13.640433</td>
|
||
<td>1.055500e+05</td>
|
||
<td>2.572720</td>
|
||
<td>7385.292085</td>
|
||
<td>402.960219</td>
|
||
<td>12.347429</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td data-quarto-table-cell-role="th">min</td>
|
||
<td>17.000000</td>
|
||
<td>1.228500e+04</td>
|
||
<td>1.000000</td>
|
||
<td>0.000000</td>
|
||
<td>0.000000</td>
|
||
<td>1.000000</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td data-quarto-table-cell-role="th">25%</td>
|
||
<td>28.000000</td>
|
||
<td>1.178270e+05</td>
|
||
<td>9.000000</td>
|
||
<td>0.000000</td>
|
||
<td>0.000000</td>
|
||
<td>40.000000</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td data-quarto-table-cell-role="th">50%</td>
|
||
<td>37.000000</td>
|
||
<td>1.783560e+05</td>
|
||
<td>10.000000</td>
|
||
<td>0.000000</td>
|
||
<td>0.000000</td>
|
||
<td>40.000000</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td data-quarto-table-cell-role="th">75%</td>
|
||
<td>48.000000</td>
|
||
<td>2.370510e+05</td>
|
||
<td>12.000000</td>
|
||
<td>0.000000</td>
|
||
<td>0.000000</td>
|
||
<td>45.000000</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td data-quarto-table-cell-role="th">max</td>
|
||
<td>90.000000</td>
|
||
<td>1.484705e+06</td>
|
||
<td>16.000000</td>
|
||
<td>99999.000000</td>
|
||
<td>4356.000000</td>
|
||
<td>99.000000</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section id="prozentuale-verteilung-der-personen-im-datensatz" class="slide level2">
|
||
<h2>Prozentuale Verteilung der Personen im Datensatz</h2>
|
||
<div class="quarto-figure quarto-figure-center">
|
||
<figure>
|
||
<p><img data-src="img/Verteilung_Einkommensklassen.png" class="quarto-figure quarto-figure-center" height="500"></p>
|
||
</figure>
|
||
</div>
|
||
</section></section>
|
||
<section>
|
||
<section id="datenvorverarbeitung" class="title-slide slide level1 center">
|
||
<h1>Datenvorverarbeitung</h1>
|
||
<p>Auffüllen von fehlenden Werten, Umwandlung von Variablen</p>
|
||
</section>
|
||
<section id="überprüfung-auf-fehlende-oder-ungültige-werte" class="slide level2">
|
||
<h2>Überprüfung auf fehlende oder ungültige Werte</h2>
|
||
<div id="88bd21a7" class="cell" data-execution_count="2">
|
||
<div class="sourceCode cell-code" id="cb1"><pre class="sourceCode numberSource python number-lines code-with-copy"><code class="sourceCode python"><span id="cb1-1"><a href=""></a><span class="co"># Überprüfen auf fehlende Werte oder '?'</span></span>
|
||
<span id="cb1-2"><a href=""></a><span class="cf">for</span> col <span class="kw">in</span> df.columns:</span>
|
||
<span id="cb1-3"><a href=""></a> missing_count <span class="op">=</span> df[df[col] <span class="op">==</span> <span class="st">'?'</span>].shape[<span class="dv">0</span>]</span>
|
||
<span id="cb1-4"><a href=""></a> <span class="cf">if</span> missing_count <span class="op">></span> <span class="dv">0</span>:</span>
|
||
<span id="cb1-5"><a href=""></a> <span class="bu">print</span>(<span class="ss">f"Spalte '</span><span class="sc">{</span>col<span class="sc">}</span><span class="ss">' hat </span><span class="sc">{</span>missing_count<span class="sc">}</span><span class="ss"> Einträge mit '?'"</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
|
||
<div class="cell-output cell-output-stdout">
|
||
<pre><code>Spalte 'workclass' hat 1836 Einträge mit '?'
|
||
Spalte 'occupation' hat 1843 Einträge mit '?'
|
||
Spalte 'native.country' hat 583 Einträge mit '?'</code></pre>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section id="ersetzung-von-fehlenden-ungültigen-werten-vorher" class="slide level2 smaller">
|
||
<h2>Ersetzung von fehlenden/ ungültigen Werten (vorher)</h2>
|
||
<div id="668ff690" class="cell" data-execution_count="3">
|
||
<div class="cell-output cell-output-display" data-execution_count="3">
|
||
<div>
|
||
<style scoped="">
|
||
.dataframe tbody tr th:only-of-type {
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.dataframe tbody tr th {
|
||
vertical-align: top;
|
||
}
|
||
|
||
.dataframe thead th {
|
||
text-align: right;
|
||
}
|
||
</style>
|
||
|
||
<table class="dataframe caption-top" data-quarto-postprocess="true" data-border="1">
|
||
<thead>
|
||
<tr class="header" style="text-align: right;">
|
||
<th data-quarto-table-cell-role="th"></th>
|
||
<th data-quarto-table-cell-role="th">age</th>
|
||
<th data-quarto-table-cell-role="th">workclass</th>
|
||
<th data-quarto-table-cell-role="th">fnlwgt</th>
|
||
<th data-quarto-table-cell-role="th">education</th>
|
||
<th data-quarto-table-cell-role="th">education.num</th>
|
||
<th data-quarto-table-cell-role="th">marital.status</th>
|
||
<th data-quarto-table-cell-role="th">occupation</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="odd">
|
||
<td data-quarto-table-cell-role="th">0</td>
|
||
<td>90</td>
|
||
<td>?</td>
|
||
<td>77053</td>
|
||
<td>HS-grad</td>
|
||
<td>9</td>
|
||
<td>Widowed</td>
|
||
<td>?</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td data-quarto-table-cell-role="th">1</td>
|
||
<td>82</td>
|
||
<td>Private</td>
|
||
<td>132870</td>
|
||
<td>HS-grad</td>
|
||
<td>9</td>
|
||
<td>Widowed</td>
|
||
<td>Exec-managerial</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td data-quarto-table-cell-role="th">2</td>
|
||
<td>66</td>
|
||
<td>?</td>
|
||
<td>186061</td>
|
||
<td>Some-college</td>
|
||
<td>10</td>
|
||
<td>Widowed</td>
|
||
<td>?</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td data-quarto-table-cell-role="th">3</td>
|
||
<td>54</td>
|
||
<td>Private</td>
|
||
<td>140359</td>
|
||
<td>7th-8th</td>
|
||
<td>4</td>
|
||
<td>Divorced</td>
|
||
<td>Machine-op-inspct</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td data-quarto-table-cell-role="th">4</td>
|
||
<td>41</td>
|
||
<td>Private</td>
|
||
<td>264663</td>
|
||
<td>Some-college</td>
|
||
<td>10</td>
|
||
<td>Separated</td>
|
||
<td>Prof-specialty</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section id="ersetzung-von-fehlenden-ungültigen-werten-nachher" class="slide level2 smaller">
|
||
<h2>Ersetzung von fehlenden/ ungültigen Werten (nachher)</h2>
|
||
<div id="10352235" class="cell" data-execution_count="4">
|
||
<div class="cell-output cell-output-display" data-execution_count="4">
|
||
<div>
|
||
<style scoped="">
|
||
.dataframe tbody tr th:only-of-type {
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.dataframe tbody tr th {
|
||
vertical-align: top;
|
||
}
|
||
|
||
.dataframe thead th {
|
||
text-align: right;
|
||
}
|
||
</style>
|
||
|
||
<table class="dataframe caption-top" data-quarto-postprocess="true" data-border="1">
|
||
<thead>
|
||
<tr class="header" style="text-align: right;">
|
||
<th data-quarto-table-cell-role="th"></th>
|
||
<th data-quarto-table-cell-role="th">age</th>
|
||
<th data-quarto-table-cell-role="th">workclass</th>
|
||
<th data-quarto-table-cell-role="th">fnlwgt</th>
|
||
<th data-quarto-table-cell-role="th">education</th>
|
||
<th data-quarto-table-cell-role="th">education.num</th>
|
||
<th data-quarto-table-cell-role="th">marital.status</th>
|
||
<th data-quarto-table-cell-role="th">occupation</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="odd">
|
||
<td data-quarto-table-cell-role="th">0</td>
|
||
<td>90</td>
|
||
<td>Private</td>
|
||
<td>77053</td>
|
||
<td>HS-grad</td>
|
||
<td>9</td>
|
||
<td>Widowed</td>
|
||
<td>Prof-specialty</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td data-quarto-table-cell-role="th">1</td>
|
||
<td>82</td>
|
||
<td>Private</td>
|
||
<td>132870</td>
|
||
<td>HS-grad</td>
|
||
<td>9</td>
|
||
<td>Widowed</td>
|
||
<td>Exec-managerial</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td data-quarto-table-cell-role="th">2</td>
|
||
<td>66</td>
|
||
<td>Private</td>
|
||
<td>186061</td>
|
||
<td>Some-college</td>
|
||
<td>10</td>
|
||
<td>Widowed</td>
|
||
<td>Prof-specialty</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td data-quarto-table-cell-role="th">3</td>
|
||
<td>54</td>
|
||
<td>Private</td>
|
||
<td>140359</td>
|
||
<td>7th-8th</td>
|
||
<td>4</td>
|
||
<td>Divorced</td>
|
||
<td>Machine-op-inspct</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td data-quarto-table-cell-role="th">4</td>
|
||
<td>41</td>
|
||
<td>Private</td>
|
||
<td>264663</td>
|
||
<td>Some-college</td>
|
||
<td>10</td>
|
||
<td>Separated</td>
|
||
<td>Prof-specialty</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section id="umwandlung-der-variablen" class="slide level2">
|
||
<h2>Umwandlung der Variablen</h2>
|
||
<ul>
|
||
<li class="fragment">Von Katergorischen Variablen zu Numerischen</li>
|
||
<li class="fragment">Beispiel Geschlecht:
|
||
<ul>
|
||
<li class="fragment">Mann -> 1</li>
|
||
<li class="fragment">Frau -> 0</li>
|
||
</ul></li>
|
||
<li class="fragment">Wird benötigt um mit dem Datensatz weiter zu arbeiten zu können -> ML-Modelle benötigen numerische Werte um sinnvolle Berechnungen durchführen zu können</li>
|
||
</ul>
|
||
</section></section>
|
||
<section>
|
||
<section id="ml-modell" class="title-slide slide level1 center">
|
||
<h1>ML-Modell</h1>
|
||
<p>Auswahl, Beschreibung, Hyperparameter, Güte</p>
|
||
</section>
|
||
<section id="auswahl-eines-geeigneten-modells" class="slide level2">
|
||
<h2>Auswahl eines geeigneten Modells</h2>
|
||
<p><br></p>
|
||
<table class="caption-top">
|
||
<colgroup>
|
||
<col style="width: 33%">
|
||
<col style="width: 66%">
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="header">
|
||
<th>Kriterium</th>
|
||
<th>Unsere Situation</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="odd">
|
||
<td>Art der Daten</td>
|
||
<td>Strukturiert</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td>Datenmenge</td>
|
||
<td>~32.500 Einträge</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td>Komplexität</td>
|
||
<td>13-dimensionale Daten –> eher komplex</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td>Ziel und Art der Klassifizierung</td>
|
||
<td>Binäre Klassifizierung (>/< 50.000$ Einkommen)</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><br></p>
|
||
<p>–> Gute Voraussetzungen für <strong>Random Forest</strong></p>
|
||
<aside class="notes">
|
||
<p>Außerdem:</p>
|
||
<ul>
|
||
<li>Rechenressourcen</li>
|
||
<li>Zeit für Training</li>
|
||
</ul>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="random-forest" class="slide level2">
|
||
<h2>Random Forest</h2>
|
||
<ul>
|
||
<li class="fragment"><strong>Ensemble-Learning-Verfahren</strong>, bestehend aus vielen Entscheidungsbaummodellen (bei uns 100 Bäume)</li>
|
||
<li class="fragment"><strong>Training:</strong> Jeder Baum wird auf zufälliger Teilmenge der Daten und zufälliger Teilmenge der Features trainiert</li>
|
||
<li class="fragment"><strong>Vorhersagen:</strong> Ergebnisse aller Bäume werden aggregiert, um eine finale Vorhersage zu erhalten</li>
|
||
<li class="fragment">Keine Aktivierungsfunktionen oder Layer</li>
|
||
</ul>
|
||
<aside class="notes">
|
||
<ul>
|
||
<li><strong>Ensemble Learning</strong>: Mehrere verschiedene Lernalgorithmen, um bessere Ergebnisse zu erhalten als mit einem einzelnen Lernalgorithmus</li>
|
||
<li>Gute Leistung bei verschiedenen Arten von Daten</li>
|
||
<li>Robustheit gegenüber Overfitting</li>
|
||
<li>Fähigkeit, mit fehlenden Werten und kategorischen Variablen umzugehen</li>
|
||
<li><strong>Eingebaute Feature Importance</strong></li>
|
||
<li><strong>Aktivierungsfunktionen:</strong> Entscheidungsbäume, basieren auf Regeln und Splits, ohne mathematische Aktivierungsfunktionen.</li>
|
||
<li><strong>Layers:</strong> Es gibt keine Schichten (Layers) im klassischen Sinne, wie bei neuronalen Netzwerken. Jeder Baum ist ein eigenständiger Klassifikator.</li>
|
||
</ul>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="random-forest-1" class="slide level2" data-background-image="img/Random_Forest_Tree_Example.png">
|
||
<h2>Random Forest</h2>
|
||
</section>
|
||
<section id="hyperparameter" class="slide level2">
|
||
<h2>Hyperparameter</h2>
|
||
<blockquote>
|
||
<p><em>Parameter, die vor dem Training festgelegt werden müssen</em></p>
|
||
</blockquote>
|
||
<table class="caption-top">
|
||
<colgroup>
|
||
<col style="width: 33%">
|
||
<col style="width: 66%">
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="header">
|
||
<th>Hyperparameter</th>
|
||
<th>Bedeutung</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="odd">
|
||
<td>n_estimators</td>
|
||
<td>Anzahl an Bäumen</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td>max_depth</td>
|
||
<td>Maximale Tiefe eines Baumes</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td>min_samples_split</td>
|
||
<td>Mindestanzahl an Samples, um ein Split durchzuführen</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td>min_samples_leaf</td>
|
||
<td>Mindestanzahl an Samples in einem Blatt</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</section>
|
||
<section id="hyperparameter-tuning" class="slide level2 smaller">
|
||
<h2>Hyperparameter-Tuning</h2>
|
||
<blockquote>
|
||
<p><em>Optimierung der Hyperparameter, um die Modellgüte zu verbessern</em></p>
|
||
</blockquote>
|
||
<div class="sourceCode" id="cb3" data-code-line-numbers="|2-7|10-11|15"><pre class="sourceCode numberSource python number-lines code-with-copy"><code class="sourceCode python"><span id="cb3-1"><a href=""></a><span class="co"># Hyperparameter-Grid definieren</span></span>
|
||
<span id="cb3-2"><a href=""></a>param_grid <span class="op">=</span> {</span>
|
||
<span id="cb3-3"><a href=""></a> <span class="st">'n_estimators'</span>: [<span class="dv">50</span>, <span class="dv">100</span>],</span>
|
||
<span id="cb3-4"><a href=""></a> <span class="st">'max_depth'</span>: [<span class="va">None</span>, <span class="dv">10</span>, <span class="dv">20</span>],</span>
|
||
<span id="cb3-5"><a href=""></a> <span class="st">'min_samples_split'</span>: [<span class="dv">2</span>, <span class="dv">5</span>],</span>
|
||
<span id="cb3-6"><a href=""></a> <span class="st">'min_samples_leaf'</span>: [<span class="dv">1</span>, <span class="dv">2</span>]</span>
|
||
<span id="cb3-7"><a href=""></a>}</span>
|
||
<span id="cb3-8"><a href=""></a></span>
|
||
<span id="cb3-9"><a href=""></a><span class="co"># GridSearchCV</span></span>
|
||
<span id="cb3-10"><a href=""></a>grid_search <span class="op">=</span> GridSearchCV(RandomForestClassifier(random_state<span class="op">=</span><span class="dv">42</span>), param_grid, cv<span class="op">=</span><span class="dv">3</span>, scoring<span class="op">=</span><span class="st">'accuracy'</span>)</span>
|
||
<span id="cb3-11"><a href=""></a>grid_search.fit(X_train, y_train)</span>
|
||
<span id="cb3-12"><a href=""></a></span>
|
||
<span id="cb3-13"><a href=""></a><span class="co"># Beste Parameter</span></span>
|
||
<span id="cb3-14"><a href=""></a><span class="bu">print</span>(<span class="st">"Beste Parameter:"</span>)</span>
|
||
<span id="cb3-15"><a href=""></a><span class="bu">print</span>(grid_search.best_params_)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
|
||
<div class="fragment">
|
||
<div class="sourceCode" id="cb4"><pre class="sourceCode numberSource json number-lines code-with-copy"><code class="sourceCode json"><span id="cb4-1"><a href=""></a><span class="fu">{</span></span>
|
||
<span id="cb4-2"><a href=""></a> <span class="er">'max_depth'</span><span class="fu">:</span> <span class="er">None</span><span class="fu">,</span> </span>
|
||
<span id="cb4-3"><a href=""></a> <span class="er">'min_samples_leaf'</span><span class="fu">:</span> <span class="dv">2</span><span class="fu">,</span> </span>
|
||
<span id="cb4-4"><a href=""></a> <span class="er">'min_samples_split'</span><span class="fu">:</span> <span class="dv">2</span><span class="fu">,</span> </span>
|
||
<span id="cb4-5"><a href=""></a> <span class="er">'n_estimators'</span><span class="fu">:</span> <span class="dv">100</span></span>
|
||
<span id="cb4-6"><a href=""></a><span class="fu">}</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="hyperparameter-tuning-1" class="slide level2 smaller">
|
||
<h2>Hyperparameter-Tuning</h2>
|
||
<div class="sourceCode" id="cb5" data-code-line-numbers="2-7,10-11,15|18,21|24-27"><pre class="sourceCode numberSource python number-lines code-with-copy"><code class="sourceCode python"><span id="cb5-1"><a href=""></a><span class="co"># Hyperparameter-Grid definieren</span></span>
|
||
<span id="cb5-2"><a href=""></a>param_grid <span class="op">=</span> {</span>
|
||
<span id="cb5-3"><a href=""></a> <span class="st">'n_estimators'</span>: [<span class="dv">50</span>, <span class="dv">100</span>],</span>
|
||
<span id="cb5-4"><a href=""></a> <span class="st">'max_depth'</span>: [<span class="va">None</span>, <span class="dv">10</span>, <span class="dv">20</span>],</span>
|
||
<span id="cb5-5"><a href=""></a> <span class="st">'min_samples_split'</span>: [<span class="dv">2</span>, <span class="dv">5</span>],</span>
|
||
<span id="cb5-6"><a href=""></a> <span class="st">'min_samples_leaf'</span>: [<span class="dv">1</span>, <span class="dv">2</span>]</span>
|
||
<span id="cb5-7"><a href=""></a>}</span>
|
||
<span id="cb5-8"><a href=""></a></span>
|
||
<span id="cb5-9"><a href=""></a><span class="co"># GridSearchCV</span></span>
|
||
<span id="cb5-10"><a href=""></a>grid_search <span class="op">=</span> GridSearchCV(RandomForestClassifier(random_state<span class="op">=</span><span class="dv">42</span>), param_grid, cv<span class="op">=</span><span class="dv">3</span>, scoring<span class="op">=</span><span class="st">'accuracy'</span>)</span>
|
||
<span id="cb5-11"><a href=""></a>grid_search.fit(X_train, y_train)</span>
|
||
<span id="cb5-12"><a href=""></a></span>
|
||
<span id="cb5-13"><a href=""></a><span class="co"># Beste Parameter</span></span>
|
||
<span id="cb5-14"><a href=""></a><span class="bu">print</span>(<span class="st">"Beste Parameter:"</span>)</span>
|
||
<span id="cb5-15"><a href=""></a><span class="bu">print</span>(grid_search.best_params_)</span>
|
||
<span id="cb5-16"><a href=""></a></span>
|
||
<span id="cb5-17"><a href=""></a><span class="co"># Bestes Modell</span></span>
|
||
<span id="cb5-18"><a href=""></a>best_rf_model <span class="op">=</span> grid_search.best_estimator_</span>
|
||
<span id="cb5-19"><a href=""></a></span>
|
||
<span id="cb5-20"><a href=""></a><span class="co"># Vorhersagen mit dem besten Modell</span></span>
|
||
<span id="cb5-21"><a href=""></a>y_pred_best <span class="op">=</span> best_rf_model.predict(X_test)</span>
|
||
<span id="cb5-22"><a href=""></a></span>
|
||
<span id="cb5-23"><a href=""></a><span class="co"># Modellleistung evaluieren</span></span>
|
||
<span id="cb5-24"><a href=""></a>accuracy_best <span class="op">=</span> accuracy_score(y_test, y_pred_best)</span>
|
||
<span id="cb5-25"><a href=""></a>precision_best <span class="op">=</span> precision_score(y_test, y_pred_best)</span>
|
||
<span id="cb5-26"><a href=""></a>recall_best <span class="op">=</span> recall_score(y_test, y_pred_best)</span>
|
||
<span id="cb5-27"><a href=""></a>f1_best <span class="op">=</span> f1_score(y_test, y_pred_best)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
|
||
</section>
|
||
<section id="modellgüte" class="slide level2 smaller" data-auto-animate="true">
|
||
<h2 data-id="quarto-animate-title">Modellgüte</h2>
|
||
<aside class="notes">
|
||
<ul>
|
||
<li><strong>Accuracy</strong>: Anteil der korrekt klassifizierten Instanzen</li>
|
||
<li><strong>Precision</strong>: Anteil der als positiv klassifizierten Instanzen, die tatsächlich positiv sind</li>
|
||
<li><strong>Recall</strong>: Anteil der tatsächlich positiven Instanzen, die als positiv klassifiziert wurden</li>
|
||
<li><strong>F1-Score</strong>: Harmonisches Mittel aus Precision und Recall</li>
|
||
</ul>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
<div class="sourceCode" id="cb6" data-code-line-numbers="|2|3|4|5"><pre class="sourceCode numberSource json number-lines code-with-copy" data-id="quarto-animate-code"><code class="sourceCode json hljs"><span id="cb6-1" class="hljs-ln-code"><a href=""></a><span class="fu">{</span></span>
|
||
<span id="cb6-2" class="hljs-ln-code"><a href=""></a> <span class="er">'Accuracy'</span><span class="fu">:</span> <span class="dv">0</span><span class="er">.</span><span class="dv">8607</span><span class="fu">,</span></span>
|
||
<span id="cb6-3" class="hljs-ln-code"><a href=""></a> <span class="er">'Precision'</span><span class="fu">:</span> <span class="dv">0</span><span class="er">.</span><span class="dv">7613</span><span class="fu">,</span></span>
|
||
<span id="cb6-4" class="hljs-ln-code"><a href=""></a> <span class="er">'Recall'</span><span class="fu">:</span> <span class="dv">0</span><span class="er">.</span><span class="dv">6142</span><span class="fu">,</span></span>
|
||
<span id="cb6-5" class="hljs-ln-code"><a href=""></a> <span class="er">'F1</span> <span class="er">Score'</span><span class="fu">:</span> <span class="dv">0</span><span class="er">.</span><span class="dv">6798</span></span>
|
||
<span id="cb6-6" class="hljs-ln-code"><a href=""></a><span class="fu">}</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div>
|
||
<div class="fragment">
|
||
<p><strong>Konfusionsmatrix</strong></p>
|
||
</div>
|
||
<div class="fragment">
|
||
<p><img data-src="img/Confusions_Matrix.png" style="width:50.0%"></p>
|
||
</div>
|
||
</section>
|
||
<section id="konfusionsmatrix" class="slide level2" data-auto-animate="true">
|
||
<h2 data-id="quarto-animate-title">Konfusionsmatrix</h2>
|
||
|
||
<img data-src="img/Confusions_Matrix.png" class="r-stretch"><aside class="notes">
|
||
<ul>
|
||
<li>(oben links) Tatsächlich sind die meisten weniger als 50K und auch richtig vorhergesagt</li>
|
||
<li>(unten rechts) Zweitgrößte Gruppe: Mehr als 50k und auch so vorhergesagt</li>
|
||
<li>(unten links) Drittgrößte Gruppe: Eigentlich mehr als 50k aber als weniger vorhergesagt</li>
|
||
<li>(oben rechts) Kleinste Gruppe: Tatsächlich weniger als 50k aber als mehr vorhergesagt</li>
|
||
</ul>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="feature-importances" class="slide level2">
|
||
<h2>Feature Importances</h2>
|
||
<blockquote>
|
||
<p><em>Metrik, wie viel ein Feature zur Vorhersage des Modells beiträgt</em></p>
|
||
</blockquote>
|
||
|
||
<img data-src="img/Feature_Importance.png" style="width:80.0%" class="r-stretch"></section></section>
|
||
<section>
|
||
<section id="lime" class="title-slide slide level1 center" data-visibility="uncounted">
|
||
<h1>LIME</h1>
|
||
<p>Local Interpretable Model-agnostic Explanations</p>
|
||
</section>
|
||
<section id="grundprinzip" class="slide level2">
|
||
<h2>1. Grundprinzip:</h2>
|
||
<ul>
|
||
<li class="fragment">LIME erklärt einzelne Vorhersagen eines beliebigen ML-Modells</li>
|
||
<li class="fragment">Es arbeitet modellunabhängig (model-agnostic)</li>
|
||
<li class="fragment">Erzeugt lokale, interpretierbare Erklärungen für einzelne Vorhersagen</li>
|
||
</ul>
|
||
</section>
|
||
<section id="funktionsweise-im-detail" class="slide level2">
|
||
<h2>2. Funktionsweise im Detail:</h2>
|
||
<h3 id="ausgangssituation">Ausgangssituation:</h3>
|
||
<ul>
|
||
<li class="fragment">Ein trainiertes ML-Modell liegt vor</li>
|
||
<li class="fragment">Eine spezifische Vorhersage soll erklärt werden</li>
|
||
<li class="fragment">Das Original-Modell wird als “Black Box” behandelt</li>
|
||
</ul>
|
||
</section>
|
||
<section id="funktionsweise-im-detail-1" class="slide level2">
|
||
<h2>2. Funktionsweise im Detail:</h2>
|
||
<h3 id="prozessschritte">Prozessschritte:</h3>
|
||
<ul>
|
||
<li class="fragment">Sampling um den Datenpunkt:
|
||
<ul>
|
||
<li class="fragment">Erzeugt synthetische Samples in der Nachbarschaft des zu erklärenden Datenpunkts</li>
|
||
<li class="fragment">Verwendet Perturbationen (kleine Änderungen) der Original-Features</li>
|
||
</ul></li>
|
||
<li class="fragment">Gewichtung der Samples:
|
||
<ul>
|
||
<li class="fragment">Näher liegende Samples erhalten höhere Gewichte</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="funktionsweise-im-detail-2" class="slide level2">
|
||
<h2>2. Funktionsweise im Detail:</h2>
|
||
<h3 id="prozessschritte-1">Prozessschritte:</h3>
|
||
<ul>
|
||
<li class="fragment">Feature-Transformation:
|
||
<ul>
|
||
<li class="fragment">Konvertiert die Daten in ein interpretierbares Format</li>
|
||
<li class="fragment">Bei Texten z.B. Umwandlung in binäre Features (Wort vorhanden/nicht vorhanden)</li>
|
||
</ul></li>
|
||
<li class="fragment">Training eines einfachen Modells:
|
||
<ul>
|
||
<li class="fragment">typischer weise durch lineare Regression</li>
|
||
<li class="fragment">Verwendet die gewichteten Samples</li>
|
||
<li class="fragment">Optimiert auf lokale Genauigkeit</li>
|
||
<li class="fragment">damit man ein leicht Interpretierbares Modell bekommt</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="funktionsweise-im-detail-3" class="slide level2">
|
||
<h2>2. Funktionsweise im Detail:</h2>
|
||
<p>Extraktion der Erklärung:</p>
|
||
|
||
<img data-src=".\img\LIME_Erklärung.png" class="quarto-figure quarto-figure-center r-stretch" style="width:80.0%"><aside class="notes">
|
||
<p>Hier sind zwei Beispiele wie die Erklärung von LIME extrahiert werden kann. Einmal als Grafik durch ein Balkendiagramm und einmal als Tabelle. Roter Bereich: Je größer der Rote Bereich, je geringer wird die Chance mehr als 50k zu bekommen Grüner Bereich: Je größer der Grüne Bereich, je größer wird die Chance mehr als 50k zu bekommen</p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="wichtige-eigenschaften" class="slide level2 smaller">
|
||
<h2>3. Wichtige Eigenschaften:</h2>
|
||
<ul>
|
||
<li class="fragment">Lokalität:
|
||
<ul>
|
||
<li class="fragment">Fokussiert sich auf lokale Umgebung der zu erklärenden Instanz</li>
|
||
<li class="fragment">Erzeugt keine globalen Erklärungen für das gesamte Modell</li>
|
||
</ul></li>
|
||
<li class="fragment">Interpretierbarkeit:
|
||
<ul>
|
||
<li class="fragment">Nutzt einfache, verständliche Modelle für Erklärungen</li>
|
||
<li class="fragment">Meist lineare Modelle oder Entscheidungsbäume</li>
|
||
</ul></li>
|
||
<li class="fragment">Modell-Agnostik:
|
||
<ul>
|
||
<li class="fragment">Funktioniert mit jedem ML-Modell</li>
|
||
<li class="fragment">Benötigt nur Zugriff auf Vorhersagefunktion</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="vorteile-und-grenzen" class="slide level2 smaller">
|
||
<h2>4. Vorteile und Grenzen:</h2>
|
||
<aside class="notes">
|
||
<p>LIME ist instabil, bedeuted das wenn man LIME zweimal ausführen würde, kann es sein das es nicht auf das gleiche Ergebnis kommt, sondern die Gewichtung anders verteilt.</p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
<ul>
|
||
<li class="fragment">Vorteile:
|
||
<ul>
|
||
<li class="fragment">Flexibel einsetzbar</li>
|
||
<li class="fragment">Intuitiv verständliche Erklärungen</li>
|
||
<li class="fragment">Unterstützt verschiedene Datentypen</li>
|
||
</ul></li>
|
||
<li class="fragment">Grenzen:
|
||
<ul>
|
||
<li class="fragment">Nur lokale Erklärungen</li>
|
||
<li class="fragment">Sampling kann rechenintensiv sein</li>
|
||
<li class="fragment">LIME ist instabil</li>
|
||
</ul></li>
|
||
<li class="fragment">LIME ist besonders nützlich, wenn man:
|
||
<ul>
|
||
<li class="fragment">Einzelne Vorhersagen verstehen möchten</li>
|
||
<li class="fragment">Mit komplexen Modellen arbeitet</li>
|
||
<li class="fragment">Modelle debuggen oder verbessern will</li>
|
||
</ul></li>
|
||
</ul>
|
||
</section>
|
||
<section id="lime-anwendungsszenarien" class="slide level2">
|
||
<h2>LIME Anwendungsszenarien</h2>
|
||
<div>
|
||
<p><strong>Medizinische Diagnostik und Gesundheitswesen</strong></p>
|
||
<ul>
|
||
<li>Krebsdiagnose: Erklärung, welche Merkmale in medizinischen Bildern zu einer Krebsdiagnose beitragen</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
<section id="lime-anwendungsszenarien-1" class="slide level2">
|
||
<h2>LIME Anwendungsszenarien</h2>
|
||
<div>
|
||
<p><strong>Medizinische Diagnostik und Gesundheitswesen</strong></p>
|
||
<ul>
|
||
<li>Krebsdiagnose: Erklärung, welche Merkmale in medizinischen Bildern zu einer Krebsdiagnose beitragen</li>
|
||
</ul>
|
||
<p><strong>Finanzwesen und Kreditvergabe</strong></p>
|
||
<ul>
|
||
<li>Kreditwürdigkeitsprüfung: Transparente Begründung für Kreditablehnungen oder -genehmigungen</li>
|
||
<li>Betrugserkennung: Erklärung, warum bestimmte Transaktionen als verdächtig eingestuft werden</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
<section id="lime-anwendungsszenarien-2" class="slide level2">
|
||
<h2>LIME Anwendungsszenarien</h2>
|
||
<div>
|
||
<p><strong>Medizinische Diagnostik und Gesundheitswesen</strong></p>
|
||
<ul>
|
||
<li>Krebsdiagnose: Erklärung, welche Merkmale in medizinischen Bildern zu einer Krebsdiagnose beitragen</li>
|
||
</ul>
|
||
<p><strong>Finanzwesen und Kreditvergabe</strong></p>
|
||
<ul>
|
||
<li>Kreditwürdigkeitsprüfung: Transparente Begründung für Kreditablehnungen oder -genehmigungen</li>
|
||
<li>Betrugserkennung: Erklärung, warum bestimmte Transaktionen als verdächtig eingestuft werden</li>
|
||
</ul>
|
||
<p><strong>Personalabteilung und Recruiting</strong></p>
|
||
<ul>
|
||
<li>Bewerberselektion: Erklärung, welche Qualifikationen oder Fähigkeiten bei der Kandidatenauswahl entscheidend waren</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
<section id="lime-berechnungskosten" class="slide level2">
|
||
<h2>LIME Berechnungskosten</h2>
|
||
<p>LIME skaliert:</p>
|
||
<div>
|
||
<ul>
|
||
<li>Linear mit der Anzahl der Samples (N)</li>
|
||
<li>Quadratisch bis kubisch mit der Anzahl der Features (D)</li>
|
||
<li>Linear mit der Komplexität des zu erklärenden Modells M(D)</li>
|
||
</ul>
|
||
</div>
|
||
<p>Komplexität in BigO Notation:</p>
|
||
<div>
|
||
<ul>
|
||
<li><strong>O(N × M(D))</strong>, wenn das zu erklärende Modell komplex ist</li>
|
||
<li><strong>O(N × D²)</strong>, wenn das lineare Modell der rechenintensivste Teil ist</li>
|
||
</ul>
|
||
</div>
|
||
<aside class="notes">
|
||
<p><strong>Große Datensätze generell Machbar</strong> - Dürfen nur nicht zu viele Features haben, das erhöhe stark den Rechenaufwand</p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="rule-based-explenation" class="slide level2">
|
||
<h2>Rule Based Explenation</h2>
|
||
<div class="quarto-figure quarto-figure-center">
|
||
<figure>
|
||
<p><img data-src="img/Komplett.bmp" class="quarto-figure quarto-figure-center" height="400"></p>
|
||
</figure>
|
||
</div>
|
||
<aside class="notes">
|
||
<ul>
|
||
<li><p>Verfahren wird gefüttert mit</p></li>
|
||
<li><p>Daten und Labels</p></li>
|
||
<li><p>Erstellt draus Regeln</p></li>
|
||
</ul>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="detaillierte-erklärung-und-funktionsweise" class="slide level2">
|
||
<h2>Detaillierte Erklärung und Funktionsweise</h2>
|
||
<div class="quarto-figure quarto-figure-center">
|
||
<figure>
|
||
<p><img data-src="img/Neue_Regel.bmp" class="quarto-figure quarto-figure-center" height="400"></p>
|
||
</figure>
|
||
</div>
|
||
<aside class="notes">
|
||
<ul>
|
||
<li><p>Menschen lernen schneller als Tiere</p></li>
|
||
<li><p>Menschen kommunizieren schneller / besser</p></li>
|
||
<li><p>Vor allem auf Grund von Regeln</p></li>
|
||
<li><p>Satzbau, Erklärungen, Logik</p></li>
|
||
<li><p>Hund Sitz beibringen</p></li>
|
||
<li><p>braucht viele iterationen (mit Belohnungen)</p></li>
|
||
<li><p>Mensch kann deutlicher erklären was das Ziel ist</p></li>
|
||
<li><p>Regel Basiertes Lernen kommt zum Einsatz</p></li>
|
||
<li><p>Anstatt (unverständlicher) neuronaler Netze</p></li>
|
||
<li><p>oder komplexen mathematischen Modellen</p></li>
|
||
<li><p>Verwendung von logischen Rgeln</p></li>
|
||
<li><p>extrahiert aus Daten oder durch Experten definiert</p></li>
|
||
</ul>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="beispiel-regel" class="slide level2">
|
||
<h2>Beispiel Regel</h2>
|
||
<p><br></p>
|
||
<blockquote>
|
||
<p>WENN</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>Fieber über 38°C</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>UND Husten</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>DANN Grippe</p>
|
||
</blockquote>
|
||
</section>
|
||
<section id="beispiel-regel-1" class="slide level2 text-align-right">
|
||
<h2>Beispiel Regel</h2>
|
||
<p><br></p>
|
||
<blockquote>
|
||
<p>WENN</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>capital.gain ≤ 7073.50 UND</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>education.num ≤ 12.50 UND</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>capital.loss > 2218.50 UND</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>DANN Einkommen > 50K</p>
|
||
</blockquote>
|
||
</section>
|
||
<section id="vorteile" class="slide level2">
|
||
<h2>Vorteile</h2>
|
||
<ul>
|
||
<li class="fragment">Transparenz: Menschen können Entscheidungen leicht <br> nachvollziehen</li>
|
||
<li class="fragment">Überprüfbarkeit: Regeln können durch Experten überprüft <br> und Ausgewertet werden</li>
|
||
<li class="fragment">Anpassbarkeit: Vordefinierte Regeln von Experten können <br> mit maschinell erstellten Regeln ergänzt werden</li>
|
||
</ul>
|
||
<p><img data-src="img/Vorteile.jpg" class="absolute" style="top: 10px; right: 10px; height: 900px; "></p>
|
||
<aside class="notes">
|
||
<p>Transparenz: Menschen können Entscheidungen leicht nachvollziehen Überprüfbarkeit: Regeln können durch Experten überprüft werden und Anpassungen vorgenommen werden Anpassbarkeit: Vordefinierte Regeln von Experten können mit maschinell erstellten Regeln kombiniert werden - (Modellunabhängig)</p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="nachteileherausforderungen" class="slide level2">
|
||
<h2>Nachteile/Herausforderungen</h2>
|
||
<ul>
|
||
<li class="fragment">Skalierbarkeit: komplexen Anwendungsgebiete können eine hohe <br> Anzahl an Regeln schnell erreichen</li>
|
||
<li class="fragment">Gereralität: Regeln sind oft domänenspezifisch und benötigen <br> für unterschiedliche Kontexte entsprechend anpassungen</li>
|
||
<li class="fragment">Widersprüche: Regeln können zu Widersprüchen untereinander <br> führen und müssen daher angepasst werden</li>
|
||
</ul>
|
||
<p><img data-src="img/Nachteile_gespiegelt.jpg" class="absolute" style="top: 10px; right: 10px; height: 900px; "></p>
|
||
<aside class="notes">
|
||
<ul>
|
||
<li>Skalierbarkeit: In komplexen Anwendungsgebieten können die Anzahl an Regeln schnell sehr hoch werden.</li>
|
||
<li>Gereralität: Regeln sind oft domänenspezifisch und müssen für unterschiedliche Kontexte entsprechend angepasst werden</li>
|
||
<li>Widersprüche: Regeln können zu Widersprüchen untereinander führen und müssen daher angepasst werden</li>
|
||
</ul>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="rbe-anwendungsszenarien" class="slide level2">
|
||
<h2>RBE Anwendungsszenarien</h2>
|
||
<div>
|
||
<p><strong>Medizinische Diagnostik und Gesundheitswesen</strong></p>
|
||
<ul>
|
||
<li>Diagnostische Systeme: Ärzte benötigen klare Regeln, um Diagnosevorschläge zu verstehen und zu validieren</li>
|
||
</ul>
|
||
</div>
|
||
<aside class="notes">
|
||
<p>Medizin / Gesundheitswesen</p>
|
||
<ul>
|
||
<li><strong>Regeln, warum welche Diagnose vorgeschlagen wurde</strong></li>
|
||
</ul>
|
||
<p>Finanzwesen</p>
|
||
<ul>
|
||
<li><strong>Regeln, warum Transaktion verdächtig ist</strong></li>
|
||
<li><strong>Regeln, warum Kredit genehmigt / abgelehnt wurde</strong></li>
|
||
</ul>
|
||
<p>Versicherungswesen</p>
|
||
<ul>
|
||
<li><strong>Regeln, warum Prämien zu stande kommen</strong></li>
|
||
<li><strong>Regeln, warum Schadensansprüche geltend gemacht werden können</strong></li>
|
||
</ul>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="rbe-anwendungsszenarien-1" class="slide level2">
|
||
<h2>RBE Anwendungsszenarien</h2>
|
||
<div>
|
||
<p><strong>Medizinische Diagnostik und Gesundheitswesen</strong></p>
|
||
<ul>
|
||
<li>Diagnostische Systeme: Ärzte benötigen klare Regeln, um Diagnosevorschläge zu verstehen und zu validieren</li>
|
||
</ul>
|
||
<p><strong>Versicherungswesen</strong></p>
|
||
<ul>
|
||
<li>Risikobewertung: Transparente Regeln zur Prämienberechnung</li>
|
||
<li>Schadenregulierung: Nachvollziehbare Entscheidungskriterien für Schadensansprüche</li>
|
||
</ul>
|
||
</div>
|
||
<aside class="notes">
|
||
<p>Medizin / Gesundheitswesen</p>
|
||
<ul>
|
||
<li><strong>Regeln, warum welche Diagnose vorgeschlagen wurde</strong></li>
|
||
</ul>
|
||
<p>Finanzwesen</p>
|
||
<ul>
|
||
<li><strong>Regeln, warum Transaktion verdächtig ist</strong></li>
|
||
<li><strong>Regeln, warum Kredit genehmigt / abgelehnt wurde</strong></li>
|
||
</ul>
|
||
<p>Versicherungswesen</p>
|
||
<ul>
|
||
<li><strong>Regeln, warum Prämien zu stande kommen</strong></li>
|
||
<li><strong>Regeln, warum Schadensansprüche geltend gemacht werden können</strong></li>
|
||
</ul>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="rbe-anwendungsszenarien-2" class="slide level2">
|
||
<h2>RBE Anwendungsszenarien</h2>
|
||
<div>
|
||
<p><strong>Medizinische Diagnostik und Gesundheitswesen</strong></p>
|
||
<ul>
|
||
<li>Diagnostische Systeme: Ärzte benötigen klare Regeln, um Diagnosevorschläge zu verstehen und zu validieren</li>
|
||
</ul>
|
||
<p><strong>Versicherungswesen</strong></p>
|
||
<ul>
|
||
<li>Risikobewertung: Transparente Regeln zur Prämienberechnung</li>
|
||
<li>Schadenregulierung: Nachvollziehbare Entscheidungskriterien für Schadensansprüche</li>
|
||
</ul>
|
||
<p><strong>Finanzwesen und Kreditvergabe</strong></p>
|
||
<ul>
|
||
<li>Betrugserkennung: Einfach verständliche Regeln zur Identifikation verdächtiger Transaktionen</li>
|
||
<li>Kreditentscheidungen: Banken müssen Ablehnungen oder Genehmigungen rechtlich begründen können</li>
|
||
</ul>
|
||
</div>
|
||
<aside class="notes">
|
||
<p>Medizin / Gesundheitswesen</p>
|
||
<ul>
|
||
<li><strong>Regeln, warum welche Diagnose vorgeschlagen wurde</strong></li>
|
||
</ul>
|
||
<p>Finanzwesen</p>
|
||
<ul>
|
||
<li><strong>Regeln, warum Transaktion verdächtig ist</strong></li>
|
||
<li><strong>Regeln, warum Kredit genehmigt / abgelehnt wurde</strong></li>
|
||
</ul>
|
||
<p>Versicherungswesen</p>
|
||
<ul>
|
||
<li><strong>Regeln, warum Prämien zu stande kommen</strong></li>
|
||
<li><strong>Regeln, warum Schadensansprüche geltend gemacht werden können</strong></li>
|
||
</ul>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="rbe-output" class="slide level2">
|
||
<h2>RBE Output</h2>
|
||
<pre><code>|--- marital.status_Married-civ-spouse <= 0.50
|
||
| |--- capital.gain <= 7073.50
|
||
| | |--- education.num <= 12.50
|
||
| | | |--- capital.loss <= 2218.50
|
||
| | | | |--- hours.per.week <= 40.50
|
||
| | | | | |--- Einkommen ≤ 50K
|
||
| | | | |--- hours.per.week > 40.50
|
||
| | | | | |--- Einkommen ≤ 50K
|
||
| | | |--- capital.loss > 2218.50
|
||
| | | | |--- fnlwgt <= 125450.50
|
||
| | | | | |--- Einkommen > 50K
|
||
| | | | |--- fnlwgt > 125450.50
|
||
| | | | | |--- Einkommen ≤ 50K</code></pre>
|
||
<aside class="notes">
|
||
<ul>
|
||
<li>Ich zeige euch keinen code aber zumindes den Output solltet ihr mal gesehen haben</li>
|
||
<li>Als erstes den Decission Tree</li>
|
||
<li>Und dann gescheit formatiert als Satz</li>
|
||
<li>Richtigen Code wird später im Notebook vorgestellt</li>
|
||
</ul>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="rbe-berechnungskosten" class="slide level2">
|
||
<h2>RBE Berechnungskosten</h2>
|
||
<p>RBE skaliert:</p>
|
||
<div>
|
||
<ul>
|
||
<li>N = Anzahl der Trainingsbeispiele</li>
|
||
<li>D = Anzahl der Merkmale (Features)</li>
|
||
</ul>
|
||
</div>
|
||
<p>Komplexität in BigO Notation: <strong>O(N × D × log N)</strong></p>
|
||
<aside class="notes">
|
||
<p>Komplexität zusammengesetzt aus: - Training des Surrogate-Modells (DecisionTreeClassifier) - Vorhersagen mit dem Random Forest (Referenzmodell) - Extraktion der Regeln aus dem Entscheidungsbaum - Evaluierung des Surrogate-Modells</p>
|
||
<p><strong>Große Datensätze generell Machbar</strong> - Dürfen nur nicht zu viele Features haben, das erhöhe stark den Rechenaufwand</p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="jetzt-wird-es-praktisch" class="slide level2 center">
|
||
<h2>Jetzt wird es Praktisch</h2>
|
||
</section>
|
||
<aside class="notes">
|
||
<p>Jetzt das Notebook zeigen und konkret durchgehen</p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
<section id="vergleich-der-xai-verfahren" class="slide level2">
|
||
<h2>Vergleich der XAI-Verfahren</h2>
|
||
<ul>
|
||
<li class="fragment">Interpretierbarkeit</li>
|
||
<li class="fragment">Modellunabhängigkeit</li>
|
||
<li class="fragment">Genauigkeit / Konsistenz</li>
|
||
<li class="fragment">Anwendungsszenarien</li>
|
||
</ul>
|
||
</section>
|
||
<section id="lime-interpretierbarkeit" class="slide level2">
|
||
<h2>LIME Interpretierbarkeit</h2>
|
||
<div>
|
||
<ul>
|
||
<li>Leicht verständlich, welche Features relevant waren</li>
|
||
<li>Auch verständlich Laien</li>
|
||
</ul>
|
||
</div>
|
||
<div class="quarto-figure quarto-figure-center">
|
||
<figure>
|
||
<p><img data-src="img/LIME_Erklärung.png" class="quarto-figure quarto-figure-center" height="400"></p>
|
||
</figure>
|
||
</div>
|
||
<aside class="notes">
|
||
<p><strong>Rote Balken</strong> - Features die die Wahrscheinlichkeit von >=50k verringern</p>
|
||
<p><strong>Grüne Balken</strong> - Features die die Wahrscheinlichkeit von >=50k erhöhen</p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="lime-modellabhängigkeit" class="slide level2">
|
||
<h2>LIME Modellabhängigkeit</h2>
|
||
<div>
|
||
<ul>
|
||
<li>Ist Model-Agnostic</li>
|
||
<li>Behandelt jedes Modell als Blackbox</li>
|
||
</ul>
|
||
</div>
|
||
<aside class="notes">
|
||
<p>Wie in LIME schon beschrieben</p>
|
||
<p>L: local I: Interpretable M: Model Agnostic</p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="lime-konsistenz" class="slide level2">
|
||
<h2>LIME Konsistenz</h2>
|
||
<div>
|
||
<ul>
|
||
<li>Die Ergebnisse sind instabil</li>
|
||
<li>Können aber stark variieren da es auf zufälligen Abänderungen der Daten basiert</li>
|
||
</ul>
|
||
</div>
|
||
<div class="quarto-figure quarto-figure-center">
|
||
<figure>
|
||
<p><img data-src="img/Lime_Varianz_Features.png" class="quarto-figure quarto-figure-center" height="400"></p>
|
||
</figure>
|
||
</div>
|
||
<aside class="notes">
|
||
<p><strong>Wir haben 10 Erklärungen laufen lassen</strong></p>
|
||
<ul>
|
||
<li>Dann immer die Feature Wichtigkeit verglichen</li>
|
||
<li>Geringe Varianz: Ähnliche Ergebnisse</li>
|
||
<li>Hohe Varianz: Unterschiedliche Ergebnisse</li>
|
||
</ul>
|
||
<p>=> Wir haben hier die Top 5 mit der größten Varianz => Immernoch gering</p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="lime-anwendungsszenarien-3" class="slide level2">
|
||
<h2>LIME Anwendungsszenarien</h2>
|
||
<div>
|
||
<ul>
|
||
<li>Medizinische Diagnostik und Gesundheitswesen</li>
|
||
<li>Finanzwesen und Kreditvergabe</li>
|
||
<li>Personalabteilung und Recruiting</li>
|
||
</ul>
|
||
</div>
|
||
<aside class="notes">
|
||
<p><strong>Verständnis einer einzelnen Vorhersage</strong></p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="rbe-interpretierbarkeit" class="slide level2">
|
||
<h2>RBE Interpretierbarkeit</h2>
|
||
<div>
|
||
<ul>
|
||
<li>Regeln Leicht Nachvollziehbar: Wenn-Dann-Struktur von Regeln</li>
|
||
<li>Potenziell komplex bei vielen Regeln</li>
|
||
<li>Auch für Laien Verständlich</li>
|
||
</ul>
|
||
</div>
|
||
<aside class="notes">
|
||
<ol type="1">
|
||
<li><strong>Wenn-Dann-Struktur ist leicht zu verstehen, wie man auf Ergebnis kommt</strong></li>
|
||
<li><strong>Komplex / unübersichtlich wenn man viele Regeln hat</strong></li>
|
||
<li><strong>Regeln verstehen auch Lian</strong></li>
|
||
</ol>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="rbe-interpretierbarkeit-1" class="slide level2">
|
||
<h2>RBE Interpretierbarkeit</h2>
|
||
<p>Beispiel einer Regel: Vorhersagt > 50K</p>
|
||
<div>
|
||
<ul>
|
||
<li><em>WENN</em></li>
|
||
<li><em>capital.gain ≤ 7073.50 UND</em></li>
|
||
<li><em>education.num ≤ 12.50 UND</em></li>
|
||
<li><em>capital.loss > 2218.50 UND</em></li>
|
||
<li><em>DANN Einkommen > 50K</em></li>
|
||
</ul>
|
||
</div>
|
||
<aside class="notes">
|
||
<p><strong>Beispielregel für > 50K Einkommen</strong></p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="rbe-modellabhängigkeit" class="slide level2">
|
||
<h2>RBE Modellabhängigkeit</h2>
|
||
<div>
|
||
<ul>
|
||
<li><strong>Inhärent regelbasierte Modelle</strong> (modellabhängig)</li>
|
||
<li><strong>Post-hoc regelbasierte Erklärungen</strong> (modellunabhängig)</li>
|
||
</ul>
|
||
</div>
|
||
<p>Wir verwenden einen: <strong>Surrogate-Entscheidungsbaum</strong></p>
|
||
<div>
|
||
<ul>
|
||
<li>Dieser ist modellunabhängig</li>
|
||
</ul>
|
||
</div>
|
||
<aside class="notes">
|
||
<p><strong>Inhärent regelbasierte Modelle</strong> - Diese Modelle sind ihre eigenen Erklärungen - die Regeln sind das Modell.</p>
|
||
<p><strong>Post-hoc regelbasierte Erklärungen</strong> - Diese Ansätze können prinzipiell auf jedes Modell angewendet werden und sind daher modellunabhängig.</p>
|
||
<p><strong>Surrogate-Entscheidungsbaum</strong></p>
|
||
<ul>
|
||
<li><strong>Post-hoc (Modellunabhängig)</strong></li>
|
||
<li><strong>Bekommt Trainingsdaten und Random Forest Vorhersagen</strong></li>
|
||
</ul>
|
||
<p>Die extrahierten Regeln bieten eine <strong>globale Erklärung des Random Forest-Verhaltens</strong>.</p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="rbe-genauigkeit-konsistenz" class="slide level2">
|
||
<h2>RBE Genauigkeit & Konsistenz</h2>
|
||
<div>
|
||
<ul>
|
||
<li>Genauigkeit: Wie nahe an Ergebnis von RF</li>
|
||
<li>Konsistenz: Schwankungen der Genauigkeit</li>
|
||
</ul>
|
||
</div>
|
||
<div class="quarto-figure quarto-figure-center">
|
||
<figure>
|
||
<p><img data-src="img/surrogate_accuracy.png" class="quarto-figure quarto-figure-center" height="400"></p>
|
||
</figure>
|
||
</div>
|
||
<aside class="notes">
|
||
<p>Vorgehen:</p>
|
||
<ul>
|
||
<li><strong>Surrogate-Modell trainiert, sodass es RF-Vorhersagen nachahmt</strong></li>
|
||
<li><strong>Vorhersage von Surrogate-Modell mit RF vergleichen</strong></li>
|
||
<li>Berechnen die oft Vorhersagen gleich ist in %</li>
|
||
</ul>
|
||
<p>Das ganze mit mehreren Baumtiefen</p>
|
||
<ul>
|
||
<li>So finden wir die <strong>optimale Baumtiefe</strong></li>
|
||
</ul>
|
||
<p>=> Man sieht <strong>sehr hohe Genauigkeit</strong></p>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="rbe-anwendungsszenarien-3" class="slide level2">
|
||
<h2>RBE Anwendungsszenarien</h2>
|
||
<div>
|
||
<ul>
|
||
<li>Medizinische Diagnostik und Gesundheitswesen</li>
|
||
<li>Finanzwesen und Kreditvergabe</li>
|
||
<li>Versicherungswesen</li>
|
||
</ul>
|
||
</div>
|
||
<aside class="notes">
|
||
<p><strong>Globlaler Überblick von Entscheidungslogik</strong></p>
|
||
<p><strong>Wieso Entscheidet das Modell Allgemein</strong></p>
|
||
<p>Medizin / Gesundheitswesen</p>
|
||
<ul>
|
||
<li><p><strong>Beispiel Schlaganfall</strong></p></li>
|
||
<li><p>=> Wir wollen wissen, warum er allgemein zur Diagnose kommt</p></li>
|
||
</ul>
|
||
<style type="text/css">
|
||
span.MJX_Assistive_MathML {
|
||
position:absolute!important;
|
||
clip: rect(1px, 1px, 1px, 1px);
|
||
padding: 1px 0 0 0!important;
|
||
border: 0!important;
|
||
height: 1px!important;
|
||
width: 1px!important;
|
||
overflow: hidden!important;
|
||
display:block!important;
|
||
}</style></aside>
|
||
</section>
|
||
<section id="vielen-dank-für-eure-aufmerksamkeit" class="slide level2 center">
|
||
<h2>Vielen Dank für Eure Aufmerksamkeit!</h2>
|
||
</section>
|
||
</section>
|
||
</div>
|
||
<div class="quarto-auto-generated-content" style="display: none;">
|
||
<div class="footer footer-default">
|
||
<p>Mario, Jan, Nick, Andi, Sebastian, Paul | TINF22B3 | Explainable AI</p>
|
||
</div>
|
||
</div></div>
|
||
|
||
<script>window.backupDefine = window.define; window.define = undefined;</script>
|
||
<script src="slides_files/libs/revealjs/dist/reveal.js"></script>
|
||
<!-- reveal.js plugins -->
|
||
<script src="slides_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.js"></script>
|
||
<script src="slides_files/libs/revealjs/plugin/pdf-export/pdfexport.js"></script>
|
||
<script src="slides_files/libs/revealjs/plugin/reveal-menu/menu.js"></script>
|
||
<script src="slides_files/libs/revealjs/plugin/reveal-menu/quarto-menu.js"></script>
|
||
<script src="slides_files/libs/revealjs/plugin/quarto-support/support.js"></script>
|
||
|
||
|
||
<script src="slides_files/libs/revealjs/plugin/notes/notes.js"></script>
|
||
<script src="slides_files/libs/revealjs/plugin/search/search.js"></script>
|
||
<script src="slides_files/libs/revealjs/plugin/zoom/zoom.js"></script>
|
||
<script src="slides_files/libs/revealjs/plugin/math/math.js"></script>
|
||
<script>window.define = window.backupDefine; window.backupDefine = undefined;</script>
|
||
|
||
<script>
|
||
|
||
// Full list of configuration options available at:
|
||
// https://revealjs.com/config/
|
||
Reveal.initialize({
|
||
'controlsAuto': true,
|
||
'previewLinksAuto': false,
|
||
'pdfSeparateFragments': false,
|
||
'autoAnimateEasing': "ease",
|
||
'autoAnimateDuration': 1,
|
||
'autoAnimateUnmatched': true,
|
||
'jumpToSlide': true,
|
||
'menu': {"side":"left","useTextContentForMissingTitles":true,"markers":false,"loadIcons":false,"custom":[{"title":"Tools","icon":"<i class=\"fas fa-gear\"></i>","content":"<ul class=\"slide-menu-items\">\n<li class=\"slide-tool-item active\" data-item=\"0\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.fullscreen(event)\"><kbd>f</kbd> Fullscreen</a></li>\n<li class=\"slide-tool-item\" data-item=\"1\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.speakerMode(event)\"><kbd>s</kbd> Speaker View</a></li>\n<li class=\"slide-tool-item\" data-item=\"2\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.overview(event)\"><kbd>o</kbd> Slide Overview</a></li>\n<li class=\"slide-tool-item\" data-item=\"3\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.togglePdfExport(event)\"><kbd>e</kbd> PDF Export Mode</a></li>\n<li class=\"slide-tool-item\" data-item=\"4\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.toggleScrollView(event)\"><kbd>r</kbd> Scroll View Mode</a></li>\n<li class=\"slide-tool-item\" data-item=\"5\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.keyboardHelp(event)\"><kbd>?</kbd> Keyboard Help</a></li>\n</ul>"}],"openButton":true},
|
||
'smaller': false,
|
||
|
||
// Display controls in the bottom right corner
|
||
controls: false,
|
||
|
||
// Help the user learn the controls by providing hints, for example by
|
||
// bouncing the down arrow when they first encounter a vertical slide
|
||
controlsTutorial: false,
|
||
|
||
// Determines where controls appear, "edges" or "bottom-right"
|
||
controlsLayout: 'edges',
|
||
|
||
// Visibility rule for backwards navigation arrows; "faded", "hidden"
|
||
// or "visible"
|
||
controlsBackArrows: 'faded',
|
||
|
||
// Display a presentation progress bar
|
||
progress: true,
|
||
|
||
// Display the page number of the current slide
|
||
slideNumber: 'c',
|
||
|
||
// 'all', 'print', or 'speaker'
|
||
showSlideNumber: 'all',
|
||
|
||
// Add the current slide number to the URL hash so that reloading the
|
||
// page/copying the URL will return you to the same slide
|
||
hash: true,
|
||
|
||
// Start with 1 for the hash rather than 0
|
||
hashOneBasedIndex: false,
|
||
|
||
// Flags if we should monitor the hash and change slides accordingly
|
||
respondToHashChanges: true,
|
||
|
||
// Push each slide change to the browser history
|
||
history: true,
|
||
|
||
// Enable keyboard shortcuts for navigation
|
||
keyboard: true,
|
||
|
||
// Enable the slide overview mode
|
||
overview: true,
|
||
|
||
// Disables the default reveal.js slide layout (scaling and centering)
|
||
// so that you can use custom CSS layout
|
||
disableLayout: false,
|
||
|
||
// Vertical centering of slides
|
||
center: false,
|
||
|
||
// Enables touch navigation on devices with touch input
|
||
touch: true,
|
||
|
||
// Loop the presentation
|
||
loop: false,
|
||
|
||
// Change the presentation direction to be RTL
|
||
rtl: false,
|
||
|
||
// see https://revealjs.com/vertical-slides/#navigation-mode
|
||
navigationMode: 'linear',
|
||
|
||
// Randomizes the order of slides each time the presentation loads
|
||
shuffle: false,
|
||
|
||
// Turns fragments on and off globally
|
||
fragments: true,
|
||
|
||
// Flags whether to include the current fragment in the URL,
|
||
// so that reloading brings you to the same fragment position
|
||
fragmentInURL: false,
|
||
|
||
// Flags if the presentation is running in an embedded mode,
|
||
// i.e. contained within a limited portion of the screen
|
||
embedded: false,
|
||
|
||
// Flags if we should show a help overlay when the questionmark
|
||
// key is pressed
|
||
help: true,
|
||
|
||
// Flags if it should be possible to pause the presentation (blackout)
|
||
pause: true,
|
||
|
||
// Flags if speaker notes should be visible to all viewers
|
||
showNotes: false,
|
||
|
||
// Global override for autoplaying embedded media (null/true/false)
|
||
autoPlayMedia: null,
|
||
|
||
// Global override for preloading lazy-loaded iframes (null/true/false)
|
||
preloadIframes: null,
|
||
|
||
// Number of milliseconds between automatically proceeding to the
|
||
// next slide, disabled when set to 0, this value can be overwritten
|
||
// by using a data-autoslide attribute on your slides
|
||
autoSlide: 0,
|
||
|
||
// Stop auto-sliding after user input
|
||
autoSlideStoppable: true,
|
||
|
||
// Use this method for navigation when auto-sliding
|
||
autoSlideMethod: null,
|
||
|
||
// Specify the average time in seconds that you think you will spend
|
||
// presenting each slide. This is used to show a pacing timer in the
|
||
// speaker view
|
||
defaultTiming: null,
|
||
|
||
// Enable slide navigation via mouse wheel
|
||
mouseWheel: false,
|
||
|
||
// The display mode that will be used to show slides
|
||
display: 'block',
|
||
|
||
// Hide cursor if inactive
|
||
hideInactiveCursor: true,
|
||
|
||
// Time before the cursor is hidden (in ms)
|
||
hideCursorTime: 5000,
|
||
|
||
// Opens links in an iframe preview overlay
|
||
previewLinks: false,
|
||
|
||
// Transition style (none/fade/slide/convex/concave/zoom)
|
||
transition: 'none',
|
||
|
||
// Transition speed (default/fast/slow)
|
||
transitionSpeed: 'default',
|
||
|
||
// Transition style for full page slide backgrounds
|
||
// (none/fade/slide/convex/concave/zoom)
|
||
backgroundTransition: 'none',
|
||
|
||
// Number of slides away from the current that are visible
|
||
viewDistance: 3,
|
||
|
||
// Number of slides away from the current that are visible on mobile
|
||
// devices. It is advisable to set this to a lower number than
|
||
// viewDistance in order to save resources.
|
||
mobileViewDistance: 2,
|
||
|
||
// The "normal" size of the presentation, aspect ratio will be preserved
|
||
// when the presentation is scaled to fit different resolutions. Can be
|
||
// specified using percentage units.
|
||
width: 1050,
|
||
|
||
height: 700,
|
||
|
||
// Factor of the display size that should remain empty around the content
|
||
margin: 0.1,
|
||
|
||
math: {
|
||
mathjax: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js',
|
||
config: 'TeX-AMS_HTML-full',
|
||
tex2jax: {
|
||
inlineMath: [['\\(','\\)']],
|
||
displayMath: [['\\[','\\]']],
|
||
balanceBraces: true,
|
||
processEscapes: false,
|
||
processRefs: true,
|
||
processEnvironments: true,
|
||
preview: 'TeX',
|
||
skipTags: ['script','noscript','style','textarea','pre','code'],
|
||
ignoreClass: 'tex2jax_ignore',
|
||
processClass: 'tex2jax_process'
|
||
},
|
||
},
|
||
|
||
// reveal.js plugins
|
||
plugins: [QuartoLineHighlight, PdfExport, RevealMenu, QuartoSupport,
|
||
|
||
RevealMath,
|
||
RevealNotes,
|
||
RevealSearch,
|
||
RevealZoom
|
||
]
|
||
});
|
||
</script>
|
||
<script id="quarto-html-after-body" type="application/javascript">
|
||
window.document.addEventListener("DOMContentLoaded", function (event) {
|
||
const toggleBodyColorMode = (bsSheetEl) => {
|
||
const mode = bsSheetEl.getAttribute("data-mode");
|
||
const bodyEl = window.document.querySelector("body");
|
||
if (mode === "dark") {
|
||
bodyEl.classList.add("quarto-dark");
|
||
bodyEl.classList.remove("quarto-light");
|
||
} else {
|
||
bodyEl.classList.add("quarto-light");
|
||
bodyEl.classList.remove("quarto-dark");
|
||
}
|
||
}
|
||
const toggleBodyColorPrimary = () => {
|
||
const bsSheetEl = window.document.querySelector("link#quarto-bootstrap");
|
||
if (bsSheetEl) {
|
||
toggleBodyColorMode(bsSheetEl);
|
||
}
|
||
}
|
||
toggleBodyColorPrimary();
|
||
const tabsets = window.document.querySelectorAll(".panel-tabset-tabby")
|
||
tabsets.forEach(function(tabset) {
|
||
const tabby = new Tabby('#' + tabset.id);
|
||
});
|
||
const isCodeAnnotation = (el) => {
|
||
for (const clz of el.classList) {
|
||
if (clz.startsWith('code-annotation-')) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
const onCopySuccess = function(e) {
|
||
// button target
|
||
const button = e.trigger;
|
||
// don't keep focus
|
||
button.blur();
|
||
// flash "checked"
|
||
button.classList.add('code-copy-button-checked');
|
||
var currentTitle = button.getAttribute("title");
|
||
button.setAttribute("title", "Copied!");
|
||
let tooltip;
|
||
if (window.bootstrap) {
|
||
button.setAttribute("data-bs-toggle", "tooltip");
|
||
button.setAttribute("data-bs-placement", "left");
|
||
button.setAttribute("data-bs-title", "Copied!");
|
||
tooltip = new bootstrap.Tooltip(button,
|
||
{ trigger: "manual",
|
||
customClass: "code-copy-button-tooltip",
|
||
offset: [0, -8]});
|
||
tooltip.show();
|
||
}
|
||
setTimeout(function() {
|
||
if (tooltip) {
|
||
tooltip.hide();
|
||
button.removeAttribute("data-bs-title");
|
||
button.removeAttribute("data-bs-toggle");
|
||
button.removeAttribute("data-bs-placement");
|
||
}
|
||
button.setAttribute("title", currentTitle);
|
||
button.classList.remove('code-copy-button-checked');
|
||
}, 1000);
|
||
// clear code selection
|
||
e.clearSelection();
|
||
}
|
||
const getTextToCopy = function(trigger) {
|
||
const codeEl = trigger.previousElementSibling.cloneNode(true);
|
||
for (const childEl of codeEl.children) {
|
||
if (isCodeAnnotation(childEl)) {
|
||
childEl.remove();
|
||
}
|
||
}
|
||
return codeEl.innerText;
|
||
}
|
||
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
|
||
text: getTextToCopy
|
||
});
|
||
clipboard.on('success', onCopySuccess);
|
||
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
|
||
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
|
||
text: getTextToCopy,
|
||
container: window.document.getElementById('quarto-embedded-source-code-modal')
|
||
});
|
||
clipboardModal.on('success', onCopySuccess);
|
||
}
|
||
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
|
||
var mailtoRegex = new RegExp(/^mailto:/);
|
||
var filterRegex = new RegExp('/' + window.location.host + '/');
|
||
var isInternal = (href) => {
|
||
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
|
||
}
|
||
// Inspect non-navigation links and adorn them if external
|
||
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
|
||
for (var i=0; i<links.length; i++) {
|
||
const link = links[i];
|
||
if (!isInternal(link.href)) {
|
||
// undo the damage that might have been done by quarto-nav.js in the case of
|
||
// links that we want to consider external
|
||
if (link.dataset.originalHref !== undefined) {
|
||
link.href = link.dataset.originalHref;
|
||
}
|
||
}
|
||
}
|
||
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
|
||
const config = {
|
||
allowHTML: true,
|
||
maxWidth: 500,
|
||
delay: 100,
|
||
arrow: false,
|
||
appendTo: function(el) {
|
||
return el.closest('section.slide') || el.parentElement;
|
||
},
|
||
interactive: true,
|
||
interactiveBorder: 10,
|
||
theme: 'light-border',
|
||
placement: 'bottom-start',
|
||
};
|
||
if (contentFn) {
|
||
config.content = contentFn;
|
||
}
|
||
if (onTriggerFn) {
|
||
config.onTrigger = onTriggerFn;
|
||
}
|
||
if (onUntriggerFn) {
|
||
config.onUntrigger = onUntriggerFn;
|
||
}
|
||
config['offset'] = [0,0];
|
||
config['maxWidth'] = 700;
|
||
window.tippy(el, config);
|
||
}
|
||
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
|
||
for (var i=0; i<noterefs.length; i++) {
|
||
const ref = noterefs[i];
|
||
tippyHover(ref, function() {
|
||
// use id or data attribute instead here
|
||
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
|
||
try { href = new URL(href).hash; } catch {}
|
||
const id = href.replace(/^#\/?/, "");
|
||
const note = window.document.getElementById(id);
|
||
if (note) {
|
||
return note.innerHTML;
|
||
} else {
|
||
return "";
|
||
}
|
||
});
|
||
}
|
||
const findCites = (el) => {
|
||
const parentEl = el.parentElement;
|
||
if (parentEl) {
|
||
const cites = parentEl.dataset.cites;
|
||
if (cites) {
|
||
return {
|
||
el,
|
||
cites: cites.split(' ')
|
||
};
|
||
} else {
|
||
return findCites(el.parentElement)
|
||
}
|
||
} else {
|
||
return undefined;
|
||
}
|
||
};
|
||
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
|
||
for (var i=0; i<bibliorefs.length; i++) {
|
||
const ref = bibliorefs[i];
|
||
const citeInfo = findCites(ref);
|
||
if (citeInfo) {
|
||
tippyHover(citeInfo.el, function() {
|
||
var popup = window.document.createElement('div');
|
||
citeInfo.cites.forEach(function(cite) {
|
||
var citeDiv = window.document.createElement('div');
|
||
citeDiv.classList.add('hanging-indent');
|
||
citeDiv.classList.add('csl-entry');
|
||
var biblioDiv = window.document.getElementById('ref-' + cite);
|
||
if (biblioDiv) {
|
||
citeDiv.innerHTML = biblioDiv.innerHTML;
|
||
}
|
||
popup.appendChild(citeDiv);
|
||
});
|
||
return popup.innerHTML;
|
||
});
|
||
}
|
||
}
|
||
});
|
||
</script>
|
||
|
||
|
||
</body></html> |