-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaiengineering.html
More file actions
348 lines (333 loc) · 48.3 KB
/
Copy pathaiengineering.html
File metadata and controls
348 lines (333 loc) · 48.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="AI Engineering portfolio of Devis Saputra: featured empirical studies and reproducible machine-learning engineering work.">
<link rel="canonical" href="https://devissaputra.github.io/aiengineering.html">
<meta name="author" content="Devis Saputra">
<meta property="og:type" content="website">
<meta property="og:title" content="Devis Saputra | AI Engineering">
<meta property="og:description" content="AI Engineering portfolio of Devis Saputra: featured empirical studies and reproducible machine-learning engineering work.">
<meta property="og:url" content="https://devissaputra.github.io/aiengineering.html">
<meta property="og:image" content="https://devissaputra.github.io/assets/ld/Devis.jpg">
<meta property="og:image:alt" content="Devis Saputra portfolio">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Devis Saputra | AI Engineering">
<meta name="twitter:description" content="AI Engineering portfolio of Devis Saputra: featured empirical studies and reproducible machine-learning engineering work.">
<meta name="twitter:image" content="https://devissaputra.github.io/assets/ld/Devis.jpg">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='12' fill='%232F5D62'/%3E%3Ctext x='32' y='40' text-anchor='middle' font-family='Arial,sans-serif' font-size='26' font-weight='700' fill='white'%3EDS%3C/text%3E%3C/svg%3E">
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Person","@id":"https://devissaputra.github.io/#person","name":"Devis Saputra","url":"https://devissaputra.github.io/","jobTitle":"Learning Designer","sameAs":["https://www.linkedin.com/in/devissaputra","https://github.com/devissaputra","https://orcid.org/0000-0002-7133-9410","https://scholar.google.com/citations?user=EB5_ZRMAAAAJ"],"knowsAbout":["Learning and Development","Artificial Intelligence in Education","Learning Analytics","AI Engineering","Systems Engineering"]}
</script>
<title>Devis Saputra | AI Engineering</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Source+Serif+4:opsz,wght@8..60,400;8..60,600;8..60,700&family=IBM+Plex+Sans:wght@400;500;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/jpswalsh/academicons@1/css/academicons.min.css">
<style>
:root{--paper:#EEF0EF;--paper-raised:#F5F6F5;--ink:#1B2430;--ink-soft:#5B6660;--line:#C9CDC5;--accent:#2F5D62;--accent-soft:#DDE6E4;--accent-deep:#244A4E;--serif:"Source Serif 4",Georgia,serif;--sans:"IBM Plex Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.58}a{color:var(--accent)}h1,h2,h3{font-family:var(--serif);margin:0;line-height:1.18}
.page{display:grid;grid-template-columns:280px 1fr;max-width:1320px;margin:0 auto;min-height:100vh}
.sidebar{padding:46px 32px 38px 40px;position:sticky;top:0;align-self:start;height:100vh;display:flex;flex-direction:column;justify-content:space-between}
.sidebar-top h1{font-size:1.72rem}.tagline{margin:12px 0 0;color:var(--ink-soft);font-size:.98rem;max-width:22ch}
nav.toc{margin-top:26px}nav.toc a{display:block;padding:6px 0 6px 12px;margin-left:-12px;border-left:2px solid transparent;color:var(--ink);text-decoration:none;font-size:.9rem;font-weight:600}nav.toc a:hover{border-left-color:var(--accent);color:var(--accent)}
.sidebar-bottom{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:12px;row-gap:9px;font-size:.84rem;color:var(--ink-soft)}.sidebar-bottom .contact-label{grid-column:1/-1;color:var(--ink);font-weight:600}.sidebar-bottom a{display:flex;align-items:center;gap:7px;color:var(--accent);text-decoration:none;white-space:nowrap}.sidebar-bottom i{width:18px;text-align:center}.sidebar-bottom .scholar{grid-column:1/-1}
.content{padding:48px 48px 80px 34px;border-left:1px solid var(--line)}section{max-width:940px;margin-bottom:56px}.back-link{display:inline-flex;gap:8px;align-items:center;margin-bottom:25px;color:var(--ink-soft);text-decoration:none;font-size:.9rem}
.hero{margin-bottom:48px}.kicker{font-size:.78rem;text-transform:uppercase;letter-spacing:.13em;color:var(--accent);font-weight:600;margin-bottom:10px}.hero h2{font-size:clamp(2rem,3.6vw,2.8rem)}.hero .lede{margin:16px 0 0;max-width:820px;font-family:var(--serif);font-size:1.13rem;color:#303B42}
.portfolio-nav{display:grid;grid-template-columns:repeat(4,1fr);margin-top:28px;border:1px solid #D7DAD5;border-radius:7px;overflow:hidden}.portfolio-nav a{display:flex;align-items:center;justify-content:center;min-height:48px;padding:9px 8px;background:#F2F3F2;color:#222B33;text-decoration:none;text-align:center;font-size:.88rem;font-weight:600;border-right:1px solid #D7DAD5}.portfolio-nav a:last-child{border-right:none}.portfolio-nav a.active{background:var(--accent);color:#fff}
.eyebrow-rule{display:flex;align-items:center;gap:14px;margin-bottom:18px}.eyebrow-rule h2{font-size:1.45rem}.eyebrow-rule::after{content:"";flex:1;height:1px;background:var(--line)}
.contact-row{display:flex;flex-wrap:wrap;gap:10px}.contact-row a{padding:8px 13px;border:1px solid var(--line);border-radius:5px;background:var(--paper-raised);color:var(--ink);text-decoration:none}
footer{max-width:940px;margin-top:54px;padding-top:18px;border-top:1px solid var(--line);color:var(--ink-soft);font-size:.78rem}
@media(max-width:900px){.page{grid-template-columns:1fr}.sidebar{position:static;height:auto;padding:34px 24px 26px;border-bottom:1px solid var(--line);gap:26px}nav.toc{display:none}.content{padding:34px 24px 58px;border-left:none}}
@media(max-width:700px){.portfolio-nav{grid-template-columns:1fr}.portfolio-nav a{border-right:none;border-bottom:1px solid #D7DAD5}}
.project-index{display:flex;flex-wrap:wrap;gap:7px;margin-top:22px}
.project-index a{padding:5px 9px;border:1px solid var(--line);border-radius:5px;background:var(--paper-raised);text-decoration:none;font-size:.78rem;color:#39444A}
.project-index a:hover,.project-index a:focus-visible{border-color:var(--accent);color:var(--accent)}
.portfolio-detail .repo-visual img{aspect-ratio:16/9;height:auto}.repo-copy{line-height:1.65}.repo-links a{min-height:40px}
</style>
<link rel="stylesheet" href="assets/site.css?v=20260927-ai-engineering-repositories-2">
</head>
<body class="portfolio-detail">
<a class="skip-link" href="#main-content">Skip to main content</a>
<div class="page">
<aside class="sidebar">
<div class="sidebar-top">
<h1>Devis Saputra</h1>
<p class="tagline">Learning Designer | AIEd</p>
<nav class="toc" aria-label="AI Engineering page navigation">
<a href="index.html">← Main Portfolio</a>
<a href="#overview">Overview</a>
<a href="#research-bundles">Empirical Studies <i class="fa-brands fa-github" aria-hidden="true"></i></a>
<a href="#repositories">Repositories</a>
<a href="#contact">Contact</a>
</nav>
</div>
<div class="sidebar-bottom" aria-label="Contact links">
<div class="contact-label">Links</div>
<a href="mailto:devis.saputra@gmail.com"><i class="fa-solid fa-envelope"></i><span>Email</span></a>
<a href="https://linkedin.com/in/devissaputra" target="_blank" rel="noopener noreferrer"><i class="fa-brands fa-linkedin"></i><span>LinkedIn</span></a>
<a href="https://www.xing.com/profile/Devis_Saputra" target="_blank" rel="noopener noreferrer"><i class="fa-brands fa-xing"></i><span>Xing</span></a>
<a href="https://github.com/devissaputra/" target="_blank" rel="noopener noreferrer"><i class="fa-brands fa-github"></i><span>GitHub</span></a>
<a href="https://orcid.org/0000-0002-7133-9410" target="_blank" rel="noopener noreferrer"><i class="ai ai-orcid"></i><span>ORCID</span></a>
<a class="scholar" href="https://scholar.google.com/citations?user=EB5_ZRMAAAAJ&hl=en&oi=ao" target="_blank" rel="noopener noreferrer"><i class="ai ai-google-scholar"></i><span>Google Scholar</span></a>
</div>
</aside>
<main class="content" id="main-content">
<a class="back-link" href="index.html"><i class="fa-solid fa-arrow-left"></i> Back to main portfolio</a>
<div class="portfolio-nav" aria-label="Portfolio areas">
<a href="research.html">Research</a>
<a href="learningdevelopment.html">Learning & Development</a>
<a class="active" href="aiengineering.html" aria-current="page">AI Engineering</a>
<a href="aieducation.html">AI in Education</a>
</div>
<section class="hero" id="overview">
<h2>Portfolio in AI Engineering</h2>
<p class="lede">This portfolio documents applied AI engineering work in classification, calibration, anomaly detection, explainability, forecasting, clustering and neural networks. Empirical studies use external datasets and explicit evaluation protocols, while the repository section presents focused engineering experiments with defined baselines, reproducible data splits and documented limitations.</p>
<div class="content-type-nav" aria-label="AI Engineering content types">
<a href="#research-bundles"><strong>Empirical Studies</strong><span>Four empirical machine-learning studies with explicit evaluation protocols and evidence limits.</span></a>
<a href="#repositories"><strong>Repositories</strong><span>Five focused AI Engineering benchmarks and reproducible technical experiments.</span></a>
</div>
</section>
<section class="repo-section" id="research-bundles">
<div class="eyebrow-rule bundle-heading"><h2>Empirical Studies</h2></div>
<p class="repo-section-intro">These four empirical studies use external datasets to examine probability calibration, anomaly detection, explanation stability and time-series forecasting. Each study separates the research question, data-processing pipeline, recorded results and interpretation limits so that the engineering evidence can be inspected without overstating what the experiment establishes.</p>
<article class="repo-project research-bundle" id="classification_calibration">
<header class="repo-project-heading"><div class="repo-kicker">Empirical Study · AI Engineering</div>
<h3>Probability Calibration on UCI Bank Marketing</h3></header>
<div class="repo-project-grid">
<div class="repo-visuals">
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/classification_calibration/review_overview.svg?v=20260927-aieng-empirical-2" target="_blank" rel="noopener noreferrer" aria-label="Open probability calibration study overview at full size"><img loading="lazy" src="assets/aieng/classification_calibration/review_overview.svg?v=20260927-aieng-empirical-2" alt="Scientific overview of probability calibration on the UCI Bank Marketing dataset, including the study question, repeated holdout design, Brier score comparison and interpretation limits."></a><figcaption>Study overview: question, data, design, results and interpretation</figcaption></figure>
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/classification_calibration/review_calculations.svg?v=20260927-aieng-empirical-2" target="_blank" rel="noopener noreferrer" aria-label="Open probability calibration processing pipeline at full size"><img loading="lazy" src="assets/aieng/classification_calibration/review_calculations.svg?v=20260927-aieng-empirical-2" alt="Scientific data processing and evaluation pipeline for UCI Bank Marketing, from source validation and preprocessing through repeated holdouts, probability calibration, metrics and sensitivity checks."></a><figcaption>Data processing and evaluation pipeline</figcaption></figure>
</div>
<div>
<div class="repo-copy">
<p>This study asks whether a classifier's predicted probabilities are trustworthy, not only whether it ranks positive cases above negative ones. It uses 45,211 observations from UCI Bank Marketing, with 16 predictors and an 11.7% positive class. Five fixed stratified 80/20 holdouts compare a prevalence baseline with uncalibrated logistic regression and logistic regression calibrated by sigmoid and isotonic methods. Preprocessing and calibration are fitted inside the training data for each split.</p>
<p>Across the five holdouts, isotonic calibration reduces mean Brier score from 0.0720 to 0.0693 and mean ECE-10 to 0.0074, while ROC-AUC remains close to 0.906. The result is therefore a probability-quality improvement rather than a meaningful change in ranking performance. The study also removes call duration in an operational ablation because duration is unavailable before a call; models that include it describe a retrospective prediction task rather than a pre-contact decision setting.</p>
</div>
<div class="repo-evidence" aria-label="Probability calibration evidence snapshot">
<div class="repo-evidence-item"><span class="repo-evidence-value">45,211</span><span class="repo-evidence-label">observations</span></div>
<div class="repo-evidence-item"><span class="repo-evidence-value">5</span><span class="repo-evidence-label">fixed holdouts</span></div>
<div class="repo-evidence-item"><span class="repo-evidence-value">0.0693</span><span class="repo-evidence-label">isotonic Brier</span></div>
<div class="repo-evidence-item"><span class="repo-evidence-value">0.0074</span><span class="repo-evidence-label">isotonic ECE-10</span></div>
</div>
<div class="repo-data-note"><strong>Data and provenance:</strong> UCI Bank Marketing, dataset 222, DOI 10.24432/C5K306. The runner retrieves the official archive, validates the exact <code>bank-full.csv</code> SHA-256 and keeps the raw source data outside the repository.</div>
<div class="repo-links">
<a href="https://github.com/devissaputra/classification_calibration/blob/main/CALCULATIONS.md" target="_blank" rel="noopener noreferrer">Calculations & evidence</a>
<a href="https://github.com/devissaputra/classification_calibration" target="_blank" rel="noopener noreferrer"><i class="fa-brands fa-github"></i> Repository</a>
<a href="https://github.com/devissaputra/classification_calibration/blob/main/paper/results.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-chart-line"></i> Results</a>
<a href="https://github.com/devissaputra/classification_calibration/blob/main/paper/paper.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-pen"></i> Paper</a>
<a href="https://github.com/devissaputra/classification_calibration/blob/main/DATA.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-database"></i> Data & provenance</a>
</div>
</div>
</div>
</article>
<article class="repo-project research-bundle" id="anomaly_detection">
<header class="repo-project-heading"><div class="repo-kicker">Empirical Study · AI Engineering</div>
<h3>Label-Blind Threshold-Aware Anomaly Detection on NAB</h3></header>
<div class="repo-project-grid">
<div class="repo-visuals">
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/anomaly_detection/review_overview.svg?v=20260927-aieng-empirical-2" target="_blank" rel="noopener noreferrer" aria-label="Open anomaly detection study overview at full size"><img loading="lazy" src="assets/aieng/anomaly_detection/review_overview.svg?v=20260927-aieng-empirical-2" alt="Scientific overview of label-blind anomaly detection on four NAB streams, including chronological calibration and the variation in test false-positive rates under a fixed alert budget."></a><figcaption>Study overview: question, data, design, results and interpretation</figcaption></figure>
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/anomaly_detection/review_calculations.svg?v=20260927-aieng-empirical-2" target="_blank" rel="noopener noreferrer" aria-label="Open anomaly detection processing pipeline at full size"><img loading="lazy" src="assets/aieng/anomaly_detection/review_calculations.svg?v=20260927-aieng-empirical-2" alt="Scientific chronological processing pipeline for anomaly detection on NAB, from causal feature construction and label-blind model fitting through threshold calibration, evaluation and robustness checks."></a><figcaption>Data processing and evaluation pipeline</figcaption></figure>
</div>
<div>
<div class="repo-copy">
<p>This study tests whether a label-blind anomaly detector can maintain a useful operating point after time moves forward. Four frozen NAB realKnownCause streams are divided chronologically: the first 50% is used for model fitting, the next 20% for threshold calibration and the final 30% for testing. An Isolation Forest using prior-history features is compared with a transparent median and MAD baseline. Benchmark labels are deliberately excluded from model fitting and from selection of the primary operating threshold.</p>
<p>At a 5% validation alert budget, the Isolation Forest test false-positive rate varies from 0.0300 on request latency to 0.2338 on ambient temperature, with CPU utilization at 0.1070 and machine temperature at 0.0948. That spread is the central result: a fixed validation budget does not guarantee a stable future false-alarm rate after temporal change. Repeated seeds and history-window checks measure sensitivity on the same four streams and should not be read as independent replications or official NAB leaderboard results.</p>
</div>
<div class="repo-evidence" aria-label="Anomaly detection evidence snapshot">
<div class="repo-evidence-item"><span class="repo-evidence-value">4</span><span class="repo-evidence-label">NAB streams</span></div>
<div class="repo-evidence-item"><span class="repo-evidence-value">5%</span><span class="repo-evidence-label">validation alert budget</span></div>
<div class="repo-evidence-item"><span class="repo-evidence-value">0.0300</span><span class="repo-evidence-label">lowest test FPR</span></div>
<div class="repo-evidence-item"><span class="repo-evidence-value">0.2338</span><span class="repo-evidence-label">highest test FPR</span></div>
</div>
<div class="repo-data-note"><strong>Data and provenance:</strong> Numenta Anomaly Benchmark, frozen at revision <code>ea702d75…</code>. The selected streams and annotation file are pinned by SHA-256 so the empirical source cannot change silently.</div>
<div class="repo-links">
<a href="https://github.com/devissaputra/anomaly_detection/blob/main/CALCULATIONS.md" target="_blank" rel="noopener noreferrer">Calculations & evidence</a>
<a href="https://github.com/devissaputra/anomaly_detection" target="_blank" rel="noopener noreferrer"><i class="fa-brands fa-github"></i> Repository</a>
<a href="https://github.com/devissaputra/anomaly_detection/blob/main/paper/results.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-chart-line"></i> Results</a>
<a href="https://github.com/devissaputra/anomaly_detection/blob/main/paper/paper.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-pen"></i> Paper</a>
<a href="https://github.com/devissaputra/anomaly_detection/blob/main/DATA.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-database"></i> Data & provenance</a>
</div>
</div>
</div>
</article>
<article class="repo-project research-bundle" id="explainable_ai">
<header class="repo-project-heading"><div class="repo-kicker">Empirical Study · AI Engineering</div>
<h3>Explainable AI: Model Dependence and Feature Governance</h3></header>
<div class="repo-project-grid">
<div class="repo-visuals">
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/explainable_ai/review_overview.svg?v=20260927-aieng-empirical-2" target="_blank" rel="noopener noreferrer" aria-label="Open explainable AI study overview at full size"><img loading="lazy" src="assets/aieng/explainable_ai/review_overview.svg?v=20260927-aieng-empirical-2" alt="Scientific overview of explainability on the UCI Adult benchmark, comparing model families and protected-feature exclusion while separating predictive dependence from fairness and causality claims."></a><figcaption>Study overview: question, data, design, results and interpretation</figcaption></figure>
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/explainable_ai/review_calculations.svg?v=20260927-aieng-empirical-2" target="_blank" rel="noopener noreferrer" aria-label="Open explainable AI processing and audit pipeline at full size"><img loading="lazy" src="assets/aieng/explainable_ai/review_calculations.svg?v=20260927-aieng-empirical-2" alt="Scientific processing and audit pipeline for the UCI Adult explainability study, including duplicate-aware grouped splitting, model comparison, permutation importance and subgroup diagnostics."></a><figcaption>Data processing and audit pipeline</figcaption></figure>
</div>
<div>
<div class="repo-copy">
<p>This study examines whether a global feature explanation is stable when either the model family or the feature policy changes. It uses 48,842 records from the UCI Adult benchmark and keeps exact duplicate predictor profiles on only one side of the train-test split. Logistic regression and random forest are each evaluated twice: once with all predictors and once with race and sex excluded from the model inputs. Those attributes remain available only for descriptive subgroup auditing.</p>
<p>On the primary grouped holdout, random forest ROC-AUC is 0.9174 with all features and 0.9167 after protected-feature exclusion; logistic regression scores 0.9063 and 0.9052. Marital status is the leading held-out permutation feature in both model families, but its measured AUC drop is about 0.1174 for logistic regression and 0.0460 for random forest. That difference is itself useful evidence: permutation importance depends on the fitted model. It is not causal attribution, and excluding protected variables does not remove proxies or establish fairness.</p>
</div>
<div class="repo-evidence" aria-label="Explainable AI evidence snapshot">
<div class="repo-evidence-item"><span class="repo-evidence-value">48,842</span><span class="repo-evidence-label">records</span></div>
<div class="repo-evidence-item"><span class="repo-evidence-value">0.9174</span><span class="repo-evidence-label">RF ROC-AUC, all</span></div>
<div class="repo-evidence-item"><span class="repo-evidence-value">0.9167</span><span class="repo-evidence-label">RF ROC-AUC, excluded</span></div>
<div class="repo-evidence-item"><span class="repo-evidence-value">0</span><span class="repo-evidence-label">duplicate-group overlap</span></div>
</div>
<div class="repo-data-note"><strong>Data and provenance:</strong> UCI Adult / Census Income, dataset 2, DOI 10.24432/C5XW20. The source archive is hash-validated, and exact predictor vectors are grouped before splitting to prevent duplicate profiles from crossing the train-test boundary.</div>
<div class="repo-links">
<a href="https://github.com/devissaputra/explainable_ai/blob/main/CALCULATIONS.md" target="_blank" rel="noopener noreferrer">Calculations & evidence</a>
<a href="https://github.com/devissaputra/explainable_ai" target="_blank" rel="noopener noreferrer"><i class="fa-brands fa-github"></i> Repository</a>
<a href="https://github.com/devissaputra/explainable_ai/blob/main/paper/results.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-chart-line"></i> Results</a>
<a href="https://github.com/devissaputra/explainable_ai/blob/main/paper/paper.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-pen"></i> Paper</a>
<a href="https://github.com/devissaputra/explainable_ai/blob/main/DATA.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-database"></i> Data & provenance</a>
</div>
</div>
</div>
</article>
<article class="repo-project research-bundle" id="mini_transformers_sequences">
<header class="repo-project-heading"><div class="repo-kicker">Empirical Study · AI Engineering</div>
<h3>Transformer Forecasting on WDC-SILSO</h3></header>
<div class="repo-project-grid">
<div class="repo-visuals">
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/mini_transformers_sequences/review_overview.svg?v=20260927-aieng-empirical-2" target="_blank" rel="noopener noreferrer" aria-label="Open Transformer forecasting study overview at full size"><img loading="lazy" src="assets/aieng/mini_transformers_sequences/review_overview.svg?v=20260927-aieng-empirical-2" alt="Scientific overview of Transformer forecasting on the frozen WDC-SILSO monthly sunspot series, comparing model error across one, six and twelve month horizons."></a><figcaption>Study overview: question, data, design, results and interpretation</figcaption></figure>
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/mini_transformers_sequences/review_calculations.svg?v=20260927-aieng-empirical-2" target="_blank" rel="noopener noreferrer" aria-label="Open Transformer forecasting processing pipeline at full size"><img loading="lazy" src="assets/aieng/mini_transformers_sequences/review_calculations.svg?v=20260927-aieng-empirical-2" alt="Scientific chronological processing and forecasting pipeline for WDC-SILSO, including frozen source data, supervised windows, baseline selection, Transformer training and moving-block uncertainty analysis."></a><figcaption>Data processing and forecasting pipeline</figcaption></figure>
</div>
<div>
<div class="repo-copy">
<p>This forecasting study asks whether a compact Transformer earns its additional complexity on a long, structured time series. The frozen WDC-SILSO input contains 3,327 monthly sunspot observations from January 1749 through March 2026. Persistence, seasonal naive, ridge regression and histogram gradient boosting are compared with direct Transformer forecasts at one, six and twelve months. All methods use common chronological target dates, and the Transformer is repeated across three random seeds.</p>
<p>The Transformer has lower mean absolute error than histogram gradient boosting at one month, 15.914 versus 16.905, and at six months, 19.691 versus 20.537. At twelve months, its three-seed mean is 24.206 compared with 23.973 for gradient boosting, and variation across Transformer seeds is much larger. Seed-42 paired intervals against gradient boosting also cross zero at six and twelve months. The evidence therefore supports a horizon-dependent comparison, not a general claim that the Transformer is consistently superior.</p>
</div>
<div class="repo-evidence" aria-label="Transformer forecasting evidence snapshot">
<div class="repo-evidence-item"><span class="repo-evidence-value">3,327</span><span class="repo-evidence-label">monthly observations</span></div>
<div class="repo-evidence-item"><span class="repo-evidence-value">15.914</span><span class="repo-evidence-label">1 month Transformer MAE</span></div>
<div class="repo-evidence-item"><span class="repo-evidence-value">19.699</span><span class="repo-evidence-label">6 month Transformer MAE</span></div>
<div class="repo-evidence-item"><span class="repo-evidence-value">24.206</span><span class="repo-evidence-label">12 month Transformer MAE</span></div>
</div>
<div class="repo-data-note"><strong>Data and provenance:</strong> WDC-SILSO Version 2.0 monthly mean total Sunspot Number, frozen from January 1749 through March 2026. The ordered model input is fingerprinted by SHA-256 so later SILSO updates cannot silently alter the study.</div>
<div class="repo-links">
<a href="https://github.com/devissaputra/mini_transformers_sequences/blob/main/CALCULATIONS.md" target="_blank" rel="noopener noreferrer">Calculations & evidence</a>
<a href="https://github.com/devissaputra/mini_transformers_sequences" target="_blank" rel="noopener noreferrer"><i class="fa-brands fa-github"></i> Repository</a>
<a href="https://github.com/devissaputra/mini_transformers_sequences/blob/main/paper/results.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-chart-line"></i> Results</a>
<a href="https://github.com/devissaputra/mini_transformers_sequences/blob/main/paper/paper.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-pen"></i> Paper</a>
<a href="https://github.com/devissaputra/mini_transformers_sequences/blob/main/DATA.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-database"></i> Data & provenance</a>
</div>
</div>
</div>
</article>
</section>
<section class="repo-section" id="repositories">
<div class="eyebrow-rule"><h2>Repositories</h2></div>
<p class="repo-section-intro">These five repositories are recorded engineering benchmarks on real datasets. Each one is organized around a concrete comparison, a reproducible data boundary and an explicit interpretation limit. The section keeps negative results when they are informative, separates model selection from visualization or post-hoc interpretation where necessary, and treats added model complexity as something that must be justified by held-out evidence.</p>
<article class="repo-project" id="imbalanced_learning">
<header class="repo-project-heading"><div class="repo-kicker">AI Engineering · Recorded Benchmark · 05</div>
<h3>Learning from Imbalanced Data</h3></header>
<div class="repo-project-grid">
<div class="repo-visuals">
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/imbalanced_learning/review_overview.svg?v=20260927-ai-engineering-repositories-2" target="_blank" rel="noopener noreferrer" aria-label="Open Learning from Imbalanced Data full benchmark story at full size"><img loading="lazy" src="assets/aieng/imbalanced_learning/review_overview.svg?v=20260927-ai-engineering-repositories-2" alt="Full benchmark story for Learning from Imbalanced Data: engineering question, dataset, protocol, comparison, result and interpretation boundary."></a><figcaption>Full benchmark story: question, data, comparison, result and interpretation limit</figcaption></figure>
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/imbalanced_learning/review_calculations.svg?v=20260927-ai-engineering-repositories-2" target="_blank" rel="noopener noreferrer" aria-label="Open Learning from Imbalanced Data data processing workflow at full size"><img loading="lazy" src="assets/aieng/imbalanced_learning/review_calculations.svg?v=20260927-ai-engineering-repositories-2" alt="Data processing and benchmark workflow for Learning from Imbalanced Data, including the key calculation or design rule."></a><figcaption>Data processing and benchmark workflow</figcaption></figure>
</div>
<div>
<div class="repo-copy"><p>This benchmark asks what changes when minority-class recovery becomes the focus rather than overall accuracy. It uses real Wisconsin Diagnostic Breast Cancer observations, retaining all 212 malignant cases and sampling 35 benign cases to create a deterministic minority scenario. Ordinary logistic regression, class-weighted logistic regression and a class-weighted random forest are then evaluated on the same stratified 70/30 split using average precision, precision, recall, F1 and balanced accuracy.</p><p>Class weighting improves the logistic model's minority F1 from 0.9091 to 0.9565, while the weighted random forest records 1.0000 on the held-out split. That perfect score is intentionally not presented as clinical reliability: the minority test sample is very small and the prevalence was deliberately altered for a methodological experiment. The engineering lesson is about how weighting changes behavior and why rare-class evaluation needs more than a headline accuracy number.</p></div>
<div class="repo-links">
<a href="https://github.com/devissaputra/imbalanced_learning" target="_blank" rel="noopener noreferrer"><i class="fa-brands fa-github"></i> Repository</a>
<a href="https://github.com/devissaputra/imbalanced_learning/blob/main/README.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-lines"></i> README</a>
<a href="https://github.com/devissaputra/imbalanced_learning/blob/main/results/metrics.json" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-chart-line"></i> Recorded results</a>
<a href="https://github.com/devissaputra/imbalanced_learning/blob/main/paper/paper.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-pen"></i> Working paper</a>
<a href="https://github.com/devissaputra/imbalanced_learning/blob/main/DATA.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-database"></i> Data & provenance</a>
<a href="https://github.com/devissaputra/imbalanced_learning/blob/main/CALCULATIONS.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-calculator"></i> Method & calculations</a>
</div>
</div>
</div>
</article>
<article class="repo-project" id="pca_clustering">
<header class="repo-project-heading"><div class="repo-kicker">AI Engineering · Recorded Benchmark · 06</div>
<h3>PCA and K-Means Clustering</h3></header>
<div class="repo-project-grid">
<div class="repo-visuals">
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/pca_clustering/review_overview.svg?v=20260927-ai-engineering-repositories-2" target="_blank" rel="noopener noreferrer" aria-label="Open PCA and K-Means Clustering full benchmark story at full size"><img loading="lazy" src="assets/aieng/pca_clustering/review_overview.svg?v=20260927-ai-engineering-repositories-2" alt="Full benchmark story for PCA and K-Means Clustering: engineering question, dataset, protocol, comparison, result and interpretation boundary."></a><figcaption>Full benchmark story: question, data, comparison, result and interpretation limit</figcaption></figure>
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/pca_clustering/review_calculations.svg?v=20260927-ai-engineering-repositories-2" target="_blank" rel="noopener noreferrer" aria-label="Open PCA and K-Means Clustering data processing workflow at full size"><img loading="lazy" src="assets/aieng/pca_clustering/review_calculations.svg?v=20260927-ai-engineering-repositories-2" alt="Data processing and benchmark workflow for PCA and K-Means Clustering, including the key calculation or design rule."></a><figcaption>Data processing and benchmark workflow</figcaption></figure>
</div>
<div>
<div class="repo-copy"><p>This study separates two tasks that are often mixed together: choosing a clustering solution and drawing a picture of it. The Wine dataset provides 178 observations with 13 chemical features, which are standardized before K-means is fitted for k = 2 through 6. The number of clusters is selected using silhouette score in the full 13-dimensional space; only after that decision is fixed is a two-component PCA projection created for visualization.</p><p>The selected solution has k = 3 with a full-space silhouette of 0.2849. The same assignments look much cleaner in the two-dimensional PCA view, where silhouette rises to 0.5583, and the post-hoc adjusted Rand index against known wine classes is 0.8975. The contrast is the point of the study: a persuasive projection can exaggerate apparent separation, so the visualization is not allowed to decide the clustering model.</p></div>
<div class="repo-links">
<a href="https://github.com/devissaputra/pca_clustering" target="_blank" rel="noopener noreferrer"><i class="fa-brands fa-github"></i> Repository</a>
<a href="https://github.com/devissaputra/pca_clustering/blob/main/README.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-lines"></i> README</a>
<a href="https://github.com/devissaputra/pca_clustering/blob/main/results/metrics.json" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-chart-line"></i> Recorded results</a>
<a href="https://github.com/devissaputra/pca_clustering/blob/main/paper/paper.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-pen"></i> Working paper</a>
<a href="https://github.com/devissaputra/pca_clustering/blob/main/DATA.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-database"></i> Data & provenance</a>
<a href="https://github.com/devissaputra/pca_clustering/blob/main/CALCULATIONS.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-calculator"></i> Method & calculations</a>
</div>
</div>
</div>
</article>
<article class="repo-project" id="mlp_neural_network">
<header class="repo-project-heading"><div class="repo-kicker">AI Engineering · Recorded Benchmark · 07</div>
<h3>MLP vs Linear Baseline on Handwritten Digits</h3></header>
<div class="repo-project-grid">
<div class="repo-visuals">
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/mlp_neural_network/review_overview.svg?v=20260927-ai-engineering-repositories-2" target="_blank" rel="noopener noreferrer" aria-label="Open MLP vs Linear Baseline on Handwritten Digits full benchmark story at full size"><img loading="lazy" src="assets/aieng/mlp_neural_network/review_overview.svg?v=20260927-ai-engineering-repositories-2" alt="Full benchmark story for MLP vs Linear Baseline on Handwritten Digits: engineering question, dataset, protocol, comparison, result and interpretation boundary."></a><figcaption>Full benchmark story: question, data, comparison, result and interpretation limit</figcaption></figure>
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/mlp_neural_network/review_calculations.svg?v=20260927-ai-engineering-repositories-2" target="_blank" rel="noopener noreferrer" aria-label="Open MLP vs Linear Baseline on Handwritten Digits data processing workflow at full size"><img loading="lazy" src="assets/aieng/mlp_neural_network/review_calculations.svg?v=20260927-ai-engineering-repositories-2" alt="Data processing and benchmark workflow for MLP vs Linear Baseline on Handwritten Digits, including the key calculation or design rule."></a><figcaption>Data processing and benchmark workflow</figcaption></figure>
</div>
<div>
<div class="repo-copy"><p>This benchmark asks whether a nonlinear multilayer perceptron actually earns its additional complexity on the scikit-learn handwritten-digits dataset. Both models use the same stratified split and training-fitted standardization: multinomial logistic regression is the linear baseline, while the MLP uses two hidden layers with 128 and 64 units and early stopping. Accuracy and macro-F1 are compared on 450 held-out images.</p><p>The linear model wins. Logistic regression reaches 0.9778 accuracy and 0.9776 macro-F1, compared with 0.9578 and 0.9575 for the MLP, which stops after 29 iterations. Keeping this negative result is important because it turns the baseline into a real test rather than a formality. Under this protocol, extra nonlinear capacity does not justify itself; the result does not claim that linear models are universally superior.</p></div>
<div class="repo-links">
<a href="https://github.com/devissaputra/mlp_neural_network" target="_blank" rel="noopener noreferrer"><i class="fa-brands fa-github"></i> Repository</a>
<a href="https://github.com/devissaputra/mlp_neural_network/blob/main/README.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-lines"></i> README</a>
<a href="https://github.com/devissaputra/mlp_neural_network/blob/main/results/metrics.json" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-chart-line"></i> Recorded results</a>
<a href="https://github.com/devissaputra/mlp_neural_network/blob/main/paper/paper.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-pen"></i> Working paper</a>
<a href="https://github.com/devissaputra/mlp_neural_network/blob/main/DATA.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-database"></i> Data & provenance</a>
<a href="https://github.com/devissaputra/mlp_neural_network/blob/main/CALCULATIONS.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-calculator"></i> Method & calculations</a>
</div>
</div>
</div>
</article>
<article class="repo-project" id="cnn_image_classification">
<header class="repo-project-heading"><div class="repo-kicker">AI Engineering · Recorded Benchmark · 08</div>
<h3>CNN vs Flattened Linear Baseline on Digits</h3></header>
<div class="repo-project-grid">
<div class="repo-visuals">
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/cnn_image_classification/review_overview.svg?v=20260927-ai-engineering-repositories-2" target="_blank" rel="noopener noreferrer" aria-label="Open CNN vs Flattened Linear Baseline on Digits full benchmark story at full size"><img loading="lazy" src="assets/aieng/cnn_image_classification/review_overview.svg?v=20260927-ai-engineering-repositories-2" alt="Full benchmark story for CNN vs Flattened Linear Baseline on Digits: engineering question, dataset, protocol, comparison, result and interpretation boundary."></a><figcaption>Full benchmark story: question, data, comparison, result and interpretation limit</figcaption></figure>
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/cnn_image_classification/review_calculations.svg?v=20260927-ai-engineering-repositories-2" target="_blank" rel="noopener noreferrer" aria-label="Open CNN vs Flattened Linear Baseline on Digits data processing workflow at full size"><img loading="lazy" src="assets/aieng/cnn_image_classification/review_calculations.svg?v=20260927-ai-engineering-repositories-2" alt="Data processing and benchmark workflow for CNN vs Flattened Linear Baseline on Digits, including the key calculation or design rule."></a><figcaption>Data processing and benchmark workflow</figcaption></figure>
</div>
<div>
<div class="repo-copy"><p>This experiment tests whether preserving image structure helps on the same small handwritten-digit domain. A flattened logistic-regression model provides the baseline, while a compact PyTorch CNN keeps the 8×8 images in two dimensions and applies two convolutional stages before a final classifier. Both models use the same stratified 75/25 split, and the CNN training procedure is fixed at 14 epochs with 6,090 trainable parameters.</p><p>The CNN reaches 0.9733 accuracy and 0.9729 macro-F1, compared with 0.9622 and 0.9620 for logistic regression. The roughly 1.11-percentage-point accuracy gain is consistent with a modest benefit from the spatial inductive bias, but it comes from one split and one seed with no repeated-seed uncertainty interval. The conclusion is therefore architectural and local: spatial structure helped in this recorded setup, not that CNNs generally outperform linear models.</p></div>
<div class="repo-links">
<a href="https://github.com/devissaputra/cnn_image_classification" target="_blank" rel="noopener noreferrer"><i class="fa-brands fa-github"></i> Repository</a>
<a href="https://github.com/devissaputra/cnn_image_classification/blob/main/README.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-lines"></i> README</a>
<a href="https://github.com/devissaputra/cnn_image_classification/blob/main/results/metrics.json" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-chart-line"></i> Recorded results</a>
<a href="https://github.com/devissaputra/cnn_image_classification/blob/main/paper/paper.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-pen"></i> Working paper</a>
<a href="https://github.com/devissaputra/cnn_image_classification/blob/main/DATA.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-database"></i> Data & provenance</a>
<a href="https://github.com/devissaputra/cnn_image_classification/blob/main/CALCULATIONS.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-calculator"></i> Method & calculations</a>
</div>
</div>
</div>
</article>
<article class="repo-project" id="lstm_time_series">
<header class="repo-project-heading"><div class="repo-kicker">AI Engineering · Recorded Benchmark · 09</div>
<h3>LSTM Forecasting for Mauna Loa CO₂</h3></header>
<div class="repo-project-grid">
<div class="repo-visuals">
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/lstm_time_series/review_overview.svg?v=20260927-ai-engineering-repositories-2" target="_blank" rel="noopener noreferrer" aria-label="Open LSTM Forecasting for Mauna Loa CO₂ full benchmark story at full size"><img loading="lazy" src="assets/aieng/lstm_time_series/review_overview.svg?v=20260927-ai-engineering-repositories-2" alt="Full benchmark story for LSTM Forecasting for Mauna Loa CO₂: engineering question, dataset, protocol, comparison, result and interpretation boundary."></a><figcaption>Full benchmark story: question, data, comparison, result and interpretation limit</figcaption></figure>
<figure class="repo-visual"><a class="figure-link" href="assets/aieng/lstm_time_series/review_calculations.svg?v=20260927-ai-engineering-repositories-2" target="_blank" rel="noopener noreferrer" aria-label="Open LSTM Forecasting for Mauna Loa CO₂ data processing workflow at full size"><img loading="lazy" src="assets/aieng/lstm_time_series/review_calculations.svg?v=20260927-ai-engineering-repositories-2" alt="Data processing and benchmark workflow for LSTM Forecasting for Mauna Loa CO₂, including the key calculation or design rule."></a><figcaption>Data processing and benchmark workflow</figcaption></figure>
</div>
<div>
<div class="repo-copy"><p>This forecasting benchmark compares persistence, ridge autoregression and a compact LSTM for next-week Mauna Loa CO₂. Weekly observations are ordered chronologically, missing weeks are handled with past-only forward filling, and each example uses the previous 24 weeks to predict the next. The 2,260 windows are split into 1,808 training and 452 test windows in time order, with normalization fitted only on the training history.</p><p>The corrected run favors the simpler models: ridge achieves RMSE 0.4639 ppm, persistence 0.5135 ppm and the LSTM 1.0751 ppm. The earlier future-dependent interpolation was removed and the corrected 20-epoch run was reproduced successfully in GitHub Actions. This is a rolling one-step evaluation using one seed and one test era, so the result does not condemn recurrent models broadly; it shows that this LSTM does not justify its complexity under the stated protocol.</p></div>
<div class="repo-links">
<a href="https://github.com/devissaputra/lstm_time_series" target="_blank" rel="noopener noreferrer"><i class="fa-brands fa-github"></i> Repository</a>
<a href="https://github.com/devissaputra/lstm_time_series/blob/main/README.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-lines"></i> README</a>
<a href="https://github.com/devissaputra/lstm_time_series/blob/main/results/metrics.json" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-chart-line"></i> Recorded results</a>
<a href="https://github.com/devissaputra/lstm_time_series/blob/main/paper/paper.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-file-pen"></i> Working paper</a>
<a href="https://github.com/devissaputra/lstm_time_series/blob/main/DATA.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-database"></i> Data & provenance</a>
<a href="https://github.com/devissaputra/lstm_time_series/blob/main/CALCULATIONS.md" target="_blank" rel="noopener noreferrer"><i class="fa-solid fa-calculator"></i> Method & calculations</a>
</div>
</div>
</div>
</article>
</section>
<section id="contact">
<div class="eyebrow-rule"><h2>Contact</h2></div><p>Open to learning design, L&D and learning technology roles, as well as doctoral research in Artificial Intelligence in Education, learning analytics and educational systems centered on human judgment and learning needs. Based in Medan, Indonesia and open to remote work or relocation.</p><div class="contact-row"><a href="mailto:devis.saputra@gmail.com">Email</a><a href="https://www.linkedin.com/in/devissaputra/">LinkedIn</a><a href="https://orcid.org/0000-0002-7133-9410">ORCID</a></div>
</section>
<footer>© Devis Saputra · AI Engineering portfolio · Built for GitHub Pages</footer>
</main>
</div>
</body>
</html>