From e3e1e8db41be93444c61dace9c8c71077542062a Mon Sep 17 00:00:00 2001 From: hb_alim Date: Mon, 13 Apr 2026 15:04:45 +0700 Subject: [PATCH] feat: add slide deck and book prompt template - slide/: 16 Marp slide files with inline UPB CSS theme (slide-01 through slide-16, covering all RTI-20252 topics) - slide/theme/: upb.css canonical theme + logo-upb.png - docs/AI-BOOK-PROMPT-TEMPLATE.md: RTI-20252 book authoring prompt --- docs/AI-BOOK-PROMPT-TEMPLATE.md | 1066 +++++++++++++ slide/slide-01-research-mindset.md | 1396 +++++++++++++++++ slide/slide-02-problem-formulation.md | 1430 +++++++++++++++++ slide/slide-03-literature-gap.md | 1430 +++++++++++++++++ slide/slide-04-rq-hypothesis.md | 1416 +++++++++++++++++ slide/slide-05-metrics-measurement.md | 1448 +++++++++++++++++ slide/slide-06-system-design.md | 1423 +++++++++++++++++ slide/slide-07-experiment-design.md | 1455 +++++++++++++++++ slide/slide-08-proposal-checkpoint.md | 1399 +++++++++++++++++ slide/slide-09-implementation-environment.md | 1458 +++++++++++++++++ slide/slide-10-experiment-execution.md | 1441 +++++++++++++++++ slide/slide-11-data-validation.md | 1435 +++++++++++++++++ slide/slide-12-result-presentation.md | 1427 +++++++++++++++++ slide/slide-13-data-preprocessing.md | 1464 +++++++++++++++++ slide/slide-14-data-analysis.md | 1458 +++++++++++++++++ slide/slide-15-scientific-writing.md | 1433 +++++++++++++++++ slide/slide-16-presentation-defense.md | 1475 ++++++++++++++++++ slide/theme/logo-upb.png | Bin 0 -> 180402 bytes slide/theme/upb.css | 285 ++++ 19 files changed, 24339 insertions(+) create mode 100644 docs/AI-BOOK-PROMPT-TEMPLATE.md create mode 100644 slide/slide-01-research-mindset.md create mode 100644 slide/slide-02-problem-formulation.md create mode 100644 slide/slide-03-literature-gap.md create mode 100644 slide/slide-04-rq-hypothesis.md create mode 100644 slide/slide-05-metrics-measurement.md create mode 100644 slide/slide-06-system-design.md create mode 100644 slide/slide-07-experiment-design.md create mode 100644 slide/slide-08-proposal-checkpoint.md create mode 100644 slide/slide-09-implementation-environment.md create mode 100644 slide/slide-10-experiment-execution.md create mode 100644 slide/slide-11-data-validation.md create mode 100644 slide/slide-12-result-presentation.md create mode 100644 slide/slide-13-data-preprocessing.md create mode 100644 slide/slide-14-data-analysis.md create mode 100644 slide/slide-15-scientific-writing.md create mode 100644 slide/slide-16-presentation-defense.md create mode 100644 slide/theme/logo-upb.png create mode 100644 slide/theme/upb.css diff --git a/docs/AI-BOOK-PROMPT-TEMPLATE.md b/docs/AI-BOOK-PROMPT-TEMPLATE.md new file mode 100644 index 0000000..ddfe636 --- /dev/null +++ b/docs/AI-BOOK-PROMPT-TEMPLATE.md @@ -0,0 +1,1066 @@ +# Master Prompt Template — AI Book Authoring System +## Berdasarkan Metodologi RTI-20252-Book + +> Dokumen ini berisi prompt-prompt siap pakai untuk membuat buku ajar dengan +> struktur, kualitas, dan metodologi yang identik dengan buku +> *Riset Teknologi Informasi Berbasis OBE & Experimental Thinking*. +> +> Ikuti urutan tahap dari atas ke bawah. Jangan skip tahap. + +--- + +## ═══ FASE 0 — ORIENTASI & KONTEKS ═══ + +Berikan konteks ini kepada AI **di awal setiap sesi baru** sebelum prompt apapun: + +``` +KONTEKS PERMANEN (tempel di setiap sesi): + +Kamu adalah AI editor buku ajar akademik tingkat S1 Indonesia. +Kamu memahami sistem OBE (Outcome-Based Education), KKNI Level 6, +dan standar penulisan buku ajar Kemendikbud. + +Konvensi penulisan yang WAJIB diikuti: +- Bahasa Indonesia semi-formal; istilah teknis dalam Bahasa Inggris (italic) +- Callout boxes: 💡 Insight, ⚠️ Perhatian, 📌 Definisi, 🔧 Template, 📊 Studi Kasus, 🔥 Final Statement +- Referensi: APA 7th Edition +- Diagram: Mermaid flowchart (graph LR atau graph TD) +- Penomoran: Gambar [Bab].[Nomor] (caption bawah), Tabel [Bab].[Nomor] (caption atas) +- Ukuran bab: 15–22 halaman cetak (~3.000–5.000 kata) +- Setiap bab WAJIB: Signature Model (1 diagram Mermaid), Opening Bridge, Closing Bridge, + tabel Research vs Engineering, 3-4 Cognitive Traps, 2 Studi Kasus (Basic+Advanced), + 1 Template Praktis, 1 Mindmap, Final Statement (🔥) +- Tone: explanatory ("mengapa", bukan sekadar "apa") +``` + +--- + +## ═══ FASE 1 — FOUNDATION FILES ═══ + +### PROMPT 1A — MASTER ANCHOR (Buat dulu, sebelum konten apapun) + +``` +Buat file MASTER-ANCHOR.md untuk buku ajar berikut: + +IDENTITAS BUKU: +- Judul : [JUDUL_BUKU] +- Subjudul : [SUBJUDUL] +- Mata Kuliah : [NAMA_MK] +- Program Studi : [PRODI] +- Institusi : [NAMA_INSTITUSI] +- Level : [S1/S2] — KKNI Level [6/7/8] +- Semester : [Semester ke-X] +- Prasyarat : [Mata kuliah prasyarat] + +TUJUAN UTAMA BUKU (1 kalimat): +[Apa yang pembaca BISA LAKUKAN setelah selesai buku ini — action verb spesifik] + +Buat MASTER-ANCHOR.md yang berisi: +1. Identitas mata kuliah (tabel) +2. Tujuan utama — termasuk ❌ BUKAN ini dan ✅ TETAPI ini +3. Research/Learning Pipeline utama yang harus muncul di SETIAP bab + (urutan konsep linear, 8-12 node, misal: A → B → C → D → ...) +4. Learning Phases (3-4 fase, masing-masing nama fase + minggu + fokus) +5. Quality Gates (3 pertanyaan wajib yang setiap bab harus lulus) +6. Anti-drift rules (5-7 aturan: konten apa yang TIDAK boleh masuk) +7. Core Dichotomy yang jadi jiwa buku + (misal RTI: "Engineering Mindset vs Research Mindset") +8. Bahasa & terminologi canonical (kamus mini 10-15 istilah utama) + +Format: Markdown dengan tabel dan callout box ⚠️ untuk anti-drift rules. +Panjang: 3-5 halaman cetak. +``` + +--- + +### PROMPT 1B — BOOK-SPEC (Setelah MASTER-ANCHOR disetujui) + +``` +Buat file BOOK-SPEC.md untuk buku ajar [JUDUL_BUKU]. + +Berdasarkan MASTER-ANCHOR yang sudah dibuat, tambahkan informasi berikut: + +METADATA TAMBAHAN: +- Penulis : [NAMA_PENULIS, gelar akademik] +- Target halaman : [250-350 / sesuaikan dengan jumlah bab] +- Jumlah bab : [N bab + front matter + back matter] +- Bahasa : [Bahasa Indonesia / Campuran] +- Bahasa teknis : [Bahasa Inggris italic] + +STRUKTUR BUKU: +[Daftar Bagian, Bab, dan judulnya — bisa sementara] + +Buat BOOK-SPEC.md yang berisi: +1. Identitas buku (tabel lengkap) +2. Spesifikasi fisik: ukuran B5 (17.6×25cm), font, spasi, margin +3. Struktur buku lengkap: Front Matter → Bagian I–IV (atau sesuai) → Back Matter +4. Anatomi bab standar: 13 seksi wajib dengan kode dan nama +5. Sistem callout/box: 6 jenis (💡⚠️📌🔧📊🔥) dengan panduan penggunaan +6. Konvensi referensi dan kutipan +7. Panduan gambar dan tabel +8. Panduan Mermaid diagram (color scheme per Bagian) +9. Style guide: ❌ contoh buruk vs ✅ contoh baik untuk 5 situasi +10. Quality checklist per bab (15-20 item) + +Format: Markdown. Panjang: 4-6 halaman cetak. +``` + +--- + +### PROMPT 1C — BLUEPRINT (Setelah BOOK-SPEC final) + +``` +Buat file BLUEPRINT.md untuk buku ajar [JUDUL_BUKU]. + +Buku ini memiliki [N] bab yang dibagi dalam [M] Bagian: +[Sebutkan Bagian dan topik kolomnya secara garis besar] + +Untuk SETIAP bab, buat blueprint dengan 8 elemen berikut: + +1. HEADER: Nomor bab, judul bab, minggu ke-X +2. OBE MAPPING: Sub-CPMK, CPMK, CPL +3. SIGNATURE MODEL: Nama model + ASCII pipeline notation + Format: [Konsep A] → [Konsep B] → [Konsep C] → ... +4. KONSEP INTI: 5-7 bullet poin konsep yang WAJIB dicakup +5. CASE STUDIES: 2 judul (Basic = situasi umum, Advanced = situasi kompleks) +6. COGNITIVE TRAPS: 3-4 kutipan kalimat salah yang sering diucapkan pemula + Format: "Kalimat salah yang biasa diucapkan mahasiswa" +7. FINAL STATEMENT: 1 kalimat filosofis penutup bab (🔥) + Format: kalimat yang dimulai "... bukan tentang ..., tetapi tentang ..." +8. OUTPUT PRAKTIS: Artefak konkret yang dihasilkan mahasiswa + +PENTING: +- Bab tengah satu Bagian = checkpoint integratif (UTS/UAS) — tandai +- Setiap Final Statement harus unik dan tidak mengulang kata yang sama +- Signature Model harus mencerminkan inti filosofi bab tersebut +- Cognitive Traps harus khas untuk topik itu (bukan generik) + +Format: Markdown. Satu section per bab. Panjang total: 8-12 halaman. +``` + +--- + +## ═══ FASE 2 — WRITING TEMPLATE ═══ + +### PROMPT 2A — WRITING TEMPLATE + +``` +Buat file WRITING-TEMPLATE.md untuk buku [JUDUL_BUKU]. + +Ini adalah template yang akan digunakan untuk SETIAP bab. +Buat scaffold 13 seksi berikut dengan panduan penulisan per seksi: + +SEKSI 0 — HEADER (metadata, tidak dicetak sebagai bab): + - Nomor dan judul bab + - Sub-CPMK, CPMK, CPL + - Learning Phase (Fase X: [nama fase]) + - Signature Model name + - Ringkasan bab (1 paragraf, ~75 kata) + +SEKSI X.1 — PEMBUKA (~3-5 paragraf): + Panduan: Bridge dari bab sebelumnya → fenomena menarik → + pertanyaan pemantik → pertanyaan sentral bab + +SEKSI X.2 — SIGNATURE MODEL: + Panduan: 1 diagram Mermaid (graph LR atau TD) + nama "Gambar [X].1" + + penjelasan setiap node (3-5 kalimat tiap node) + +SEKSI X.3 — DEFINISI KUNCI (📌): + Panduan: 2-4 definisi formal dalam callout 📌, + format: "**[Istilah]** adalah ..." + +SEKSI X.4 — KONSEP INTI (~6-8 sub-bagian): + Panduan: Reasoning-heavy, bukan deskriptif. + Setiap sub-bagian: nama, penjelasan mengapa penting (2-3 paragraf), + minimal 1 tabel atau list terstruktur + +SEKSI X.5 — RESEARCH VS ENGINEERING (Tabel X.1): + Panduan: Tabel 2 kolom, 6-8 baris, aspek dikiri. + Wajib diakhiri callout 💡 Insight + +SEKSI X.6 — RESEARCH REALITY: + Panduan: 2-3 fenomena nyata dengan data/contoh konkret. + Setiap fenomena diakhiri 💡 insight + +SEKSI X.7 — COGNITIVE TRAPS (⚠️): + Panduan: 3-4 callout ⚠️. Format tiap trap: + Kutipan → Mengapa salah → Koreksi yang benar + +SEKSI X.8 — STUDI KASUS (📊): + Panduan: 2 kasus. Per kasus: konteks → ❌ pendekatan buruk → + ✅ pendekatan benar → tabel perbandingan → 💡 Pelajaran + +SEKSI X.9 — TEMPLATE PRAKTIS (🔧): + Panduan: 1 template fillable dalam code block. + Nama template: "Template [A.N] — [Nama Template]" + Semua field dengan garis: ____________________ + +SEKSI X.10 — MINDMAP RINGKASAN: + Panduan: 1 diagram Mermaid mindmap atau graph. + Nama "Gambar [X].2". Radial/tree, max 3 level. + +SEKSI X.11 — RANGKUMAN: + Panduan: 5-7 bullet poin takeaway + 1 paragraf closing bridge → + bab berikutnya + 🔥 Final Statement (ambil dari BLUEPRINT) + +SEKSI X.12 — LATIHAN & REFLEKSI: + Panduan: 3-5 pertanyaan refleksi + 1-2 latihan menghasilkan artefak. + Output harus konkret, bisa dinilai. + +Di bawah setiap panduan seksi, berikan contoh singkat (5-10 baris) +bagaimana penulisan yang baik vs buruk. + +Format: Markdown. Template ini menjadi standar yang dipatuhi setiap bab. +``` + +--- + +## ═══ FASE 3 — CHAPTER WRITING ═══ + +### PROMPT 3A — PILOT CHAPTER (Bab 1 atau bab yang paling dikuasai) + +``` +Tulis BAB [N] secara LENGKAP untuk buku [JUDUL_BUKU]. + +WAJIB dibaca sebelum menulis: +- MASTER-ANCHOR.md (pipeline, anti-drift rules, quality gates) +- BOOK-SPEC.md (format, callout, konvensi) +- WRITING-TEMPLATE.md (13-seksi scaffold) + +DATA BAB INI (dari BLUEPRINT): +- Judul : [JUDUL_BAB] +- Pertemuan : M[N] +- OBE : Sub-CPMK [X.Y], CPMK[N], CPL[N] +- Phase : Phase [N] — [Nama Phase] +- Signature Model: [NAMA_MODEL] — [ASCII pipeline] +- Konsep Inti : [daftar dari BLUEPRINT] +- Case Study 1 : [JUDUL_KASUS_BASIC] +- Case Study 2 : [JUDUL_KASUS_ADVANCED] +- Cognitive Traps: [3-4 trap dari BLUEPRINT] +- Final Statement: "[KALIMAT DARI BLUEPRINT]" +- Output Praktis: [ARTEFAK] + +INSTRUKSI PENULISAN: +1. Ikuti 13-seksi dari WRITING-TEMPLATE.md persis +2. Signature Model WAJIB dalam Mermaid (graph LR, bernama Gambar [N].1) +3. Cognitive Trap format: callout ⚠️, ada kutipan + koreksi +4. Studi Kasus format: ❌ pendekatan → ✅ pendekatan → tabel → 💡 Pelajaran +5. Template Praktis dalam code block dengan field ____________ +6. Mindmap dalam Mermaid (Gambar [N].2) +7. Opening Bridge: sambungkan dari Bab [N-1] (atau pengantar jika Bab 1) +8. Closing Bridge: arahkan ke Bab [N+1] +9. Minimum 3 referensi dalam teks (format APA 7th in-text) +10. Setiap tabel diberi Tabel [N].[M] + caption di atas + +QUALITY GATE (cek sebelum selesai): +[ ] Gate 1: Apakah bab ini membuat pembaca BERPIKIR, bukan sekadar membaca? +[ ] Gate 2: Apakah bab ini mengarah ke EKSPERIMEN, bukan teori semata? +[ ] Gate 3: Apakah bab ini menghasilkan ARTEFAK RISET yang konkret? + +Target: 3.500–5.000 kata, setara 15-22 halaman cetak B5. +Format: Markdown. +``` + +--- + +### PROMPT 3B — BAB LANJUTAN (Setelah pilot chapter disetujui) + +``` +Tulis BAB [N] untuk buku [JUDUL_BUKU]. + +Ini bab ke-[N] dari [TOTAL] bab. + +KONTEKS BUKU SEJAUH INI: +- Bab sebelumnya ([N-1]): [JUDUL_BAB_SEBELUMNYA] — membahas [TOPIK_SINGKAT] +- Bab ini ([N]): [JUDUL_BAB_INI] +- Bab berikutnya ([N+1]): [JUDUL_BAB_BERIKUTNYA] + +[Isi DATA BAB INI dari BLUEPRINT seperti Prompt 3A] + +TAMBAHAN UNTUK BAB LANJUTAN: +- Opening Bridge WAJIB merujuk ke output/artefak dari Bab [N-1] +- Terminologi yang sudah didefinisikan di bab sebelumnya: JANGAN definisikan ulang, + cukup gunakan dengan referensi "(lihat Bab [X])" +- Studi kasus BOLEH menggunakan karakter/konteks yang sama dengan bab sebelumnya + untuk menciptakan narasi berkesinambungan + +[Lanjutkan dengan instruksi yang sama dari Prompt 3A] +``` + +--- + +### PROMPT 3C — BAB INTEGRATIF / CHECKPOINT (UTS atau UAS) + +``` +Tulis BAB [N] — BAB INTEGRATIF (Checkpoint [UTS/UAS]) untuk buku [JUDUL_BUKU]. + +Bab ini BERBEDA dari bab biasa karena fungsinya adalah KONSOLIDASI, +bukan pengenalan konsep baru. + +TUJUAN BAB INI: +Mahasiswa mengintegrasikan output dari Bab [A] sampai Bab [B] menjadi +satu dokumen/artefak yang koheren. + +STRUKTUR KHUSUS BAB INTEGRATIF: +1. Pembuka: jelaskan mengapa integrasi diperlukan (bukan hanya kompilasi) +2. Integration Map: diagram Mermaid yang menunjukkan hubungan semua konsep + dari bab-bab sebelumnya +3. Koneksi Kritis: tabel 6-8 koneksi, per koneksi ada pertanyaan verifikasi +4. Koherensi Vertikal + Horizontal: jelaskan 2 jenis koherensi +5. Cognitive Traps KHUSUS integratif: + - Proposal sebagai "kumpulan bab" (bukan argumen utuh) + - Copy-paste methodology + - Optimistic timeline + - No possibility of failure +6. Template Integratif: checklist yang menghubungkan semua artefak sebelumnya +7. Rubrik evaluasi diri (4 kriteria, skala 1-3) +8. Refleksi: "Bagian mana yang paling lemah dalam integrasimu?" + +TIDAK perlu: Studi Kasus terpisah, Mindmap per konsep baru. +WAJIB: Integration Map diagram (Gambar [N].1), Checklist template. + +Target: 12-16 halaman (lebih pendek dari bab biasa). +``` + +--- + +## ═══ FASE 4 — WORKSHEET ═══ + +### PROMPT 4A — WORKSHEET PER BAB + +``` +Buat worksheet standalone WS-[NN] untuk BAB [N] buku [JUDUL_BUKU]. + +Worksheet ini digunakan oleh mahasiswa SECARA MANDIRI, tanpa harus membuka buku. +Karena itu, WAJIB berisi semua informasi yang dibutuhkan untuk mengerjakan latihan. + +DATA WORKSHEET: +- Nomor : WS-[NN padded, misal 01, 02, dst.] +- Bab : [N] +- Topik : [TOPIK_BAB] +- Template: A.[N] + +STRUKTUR WORKSHEET (5 seksi): + +## Ringkasan Materi (~1 halaman) +Kompaksi dari konten bab: +- Model/pipeline utama dalam ASCII atau tabel +- Tabel perbandingan kunci (Research vs Engineering) +- 4-6 definisi istilah penting dalam tabel +- 3-4 aturan/prinsip (jebakan kognitif yang dibalik jadi prinsip positif) + +## Template A.[N] — [Nama Template] (~0.5 halaman) +Salin persis template dari Seksi [N].9 buku, dalam code block + +## Latihan 1 — [Nama Latihan] +- Instruksi spesifik +- Tabel dengan MINIMAL 2 baris contoh yang sudah diisi (italic) +- Sisa baris kosong untuk mahasiswa isi +- Pertanyaan terbuka di bawah tabel + +## Latihan 2 — [Nama Latihan] +[Sama dengan Latihan 1] + +## Latihan 3 — [Nama Latihan] +[Sama, dengan tingkat kesulitan lebih tinggi] + +## Refleksi (~2 pertanyaan) +- Pertanyaan 1: "Sebelum materi ini, apakah pernah [asumsi umum]?" +- Pertanyaan 2: Terbuka tentang aplikasi ke riset pribadi mahasiswa + +PENTING: +- Semua tabel latihan HARUS punya minimal 1 baris contoh yang sudah diisi + dengan teks italic (*Contoh: ...*) +- Jangan buat tabel sepenuhnya kosong +- Setiap latihan menghasilkan artefak yang bisa dikumpulkan dan dinilai + +Format: Markdown. Nama file: ws-[NN]-[slug-topik].md +``` + +--- + +### PROMPT 4B — BATCH WORKSHEET (Sekaligus 4+ worksheet) + +``` +Buat BATCH worksheet untuk Bab [A] sampai Bab [B] dari buku [JUDUL_BUKU]. + +Konsistensi yang WAJIB dijaga antar-worksheet: +1. Contoh/skenario berkesinambungan — gunakan SATU konteks/domain yang sama + di semua worksheet (misal: semua pakai domain [DOMAIN_CONTOH]) + sehingga mahasiswa melihat progress riset dari WS-01 sampai WS-[N] +2. Terminologi konsisten — istilah yang sama dipakai dengan arti yang sama +3. Template nomor berurutan (A.1, A.2, ...) +4. Format file konsisten: ws-[NN]-[slug].md + +KONTEKS DOMAIN CONTOH: +[Deskripsikan satu skenario riset yang akan digunakan sebagai benang merah +di semua contoh worksheet. Misal: "Penelitian tentang [topik] yang membandingkan +[metode A] vs [metode B] pada [domain]"] + +Buat WS-[A] sampai WS-[B] sesuai panduan Prompt 4A, menggunakan domain di atas. + +Output: [B-A+1] file worksheet terpisah. +``` + +--- + +## ═══ FASE 5 — BACK MATTER ═══ + +### PROMPT 5A — DAFTAR PUSTAKA + +``` +Buat daftar pustaka (REFERENCES.md) untuk buku [JUDUL_BUKU]. + +Berdasarkan referensi yang sudah dikutip dalam semua [N] bab, +kompilasi dalam format APA 7th Edition. + +Persyaratan: +- Minimum [N×3] referensi (3 per bab sebagai baseline) +- Variasi: buku teks, jurnal internasional (Q1/Q2), prosiding, dan standar/panduan +- Setiap referensi HARUS dikutip minimal di 1 bab (tidak ada referensi orphan) +- Tambahkan kolom "Dikutip di Bab" (tabel terpisah sebagai indeks) + +Struktur: +1. Daftar penuh APA 7th (urutan abjad) +2. Tabel indeks: Referensi × Bab (centang) + +Format: Markdown. target [N×3] – [N×5] referensi. +``` + +--- + +### PROMPT 5B — GLOSARIUM + +``` +Buat glosarium untuk buku [JUDUL_BUKU]. + +Kompilasi semua istilah teknis yang didefinisikan dalam callout 📌 +di semua [N] bab. + +Untuk setiap istilah: +- Entri utama: **[Istilah]** (bahasa Inggris jika ada padanan) + *[Padanan Bahasa Indonesia jika ada]* + Definisi: [1-2 kalimat, semi-formal] + Bab: [N, M, ...] + +Persyaratan: +- Minimum [N×4] istilah (4 per bab sebagai baseline) +- Urutan abjad +- Konsisten dengan bagaimana istilah digunakan dalam teks + +Format: Markdown. Target [N×4]–[N×6] entri. +``` + +--- + +### PROMPT 5C — INDEKS + +``` +Buat indeks buku untuk [JUDUL_BUKU]. + +Indeks harus mencakup: +1. Nama konsep/teori/model (contoh: Signature Model, Research Pipeline) +2. Nama metode/teknik (contoh: Paired t-test, IQR, Z-score) +3. Referensi penulis (contoh: Creswell, 2018) +4. Istilah kunci dari setiap bab +5. Nama template (Template A.1, A.2, ...) + +Format per entri: +**[Entri]**, [N], [M], [...] + *[sub-entri jika ada]*, [N] + +Minimum [N×5] entri utama, dengan beberapa sub-entri. +Urutan abjad. Nomor merujuk ke nomor bab, bukan halaman +(karena ini versi Markdown, halaman ditentukan saat layout). + +Format: Markdown. +``` + +--- + +### PROMPT 5D — KATA PENGANTAR + +``` +Tulis Kata Pengantar untuk buku [JUDUL_BUKU]. + +Penulis: [NAMA_PENULIS], [GELAR] +Institusi: [INSTITUSI] +Tanggal: [KOTA], [BULAN TAHUN] + +Kata Pengantar yang baik memiliki 5 elemen: +1. KONTEKS (1 paragraf): Mengapa buku ini ditulis? Kebutuhan apa yang dijawab? +2. POSISI (1 paragraf): Apa yang membedakan buku ini dari yang lain? +3. CARA BACA (1 paragraf): Bagaimana cara terbaik menggunakan buku ini? +4. TERIMA KASIH (1 paragraf): Pihak yang berkontribusi +5. HARAPAN (1 paragraf): Apa yang diharapkan dari pembaca? + +Tone: Hangat tapi akademik. Panjang: 400-600 kata. +Hindari kalimat klise seperti "Buku ini jauh dari sempurna..." + +Format: Markdown. Diakhiri tanda tangan formal: + +[KOTA], [BULAN TAHUN] +Penulis, + +**[NAMA_PENULIS], [GELAR]** +``` + +--- + +### PROMPT 5E — TENTANG PENULIS + +``` +Tulis halaman Tentang Penulis untuk buku [JUDUL_BUKU]. + +Data penulis: +- Nama lengkap + gelar : [NAMA, GELAR] +- Institusi : [INSTITUSI, PRODI, FAKULTAS] +- Bidang keahlian : [BIDANG 1, BIDANG 2, BIDANG 3] +- Pendidikan : [S1: ..., S2: ..., S3 (jika ada): ...] +- Publikasi utama : [3-5 karya jika ada] +- Kontak : [email institusional] + +Format halaman bio akademik standar buku ajar Indonesia: +- 1 foto placeholder (bisa diisi teks "[Foto Penulis]") +- Paragraf 1: Pendidikan + jabatan saat ini +- Paragraf 2: Keahlian dan bidang riset +- Paragraf 3: Karya dan kontribusi akademik +- Kontak + +Panjang: 150-250 kata. +``` + +--- + +## ═══ FASE 6 — REVIEW & CONSISTENCY ═══ + +### PROMPT 6A — AUDIT KONSISTENSI + +``` +Lakukan CONSISTENCY AUDIT untuk buku [JUDUL_BUKU]. + +Baca semua [N] bab dan periksa: + +1. TERMINOLOGI KONSISTENCY + Buat tabel: Istilah → Cara penulisan di tiap bab + Tandai: ✓ konsisten, ✗ inkonsisten + +2. BRIDGE CONTINUITY + Buat tabel: Bab → Opening Bridge (merujuk bab apa?) → Closing Bridge (mengarah ke bab apa?) + Validasi: setiap Closing Bridge Bab N = topik Opening Bridge Bab N+1 + +3. ARTEFAK CHAIN + Buat tabel: Bab → Output Praktis → Digunakan di Bab + Validasi: output setiap bab menjadi input bab berikutnya (chain intact) + +4. QUALITY GATE AUDIT + Per bab: Gate 1 (Think) / Gate 2 (Experiment) / Gate 3 (Artefact) = Pass/Fail + +5. TEMPLATE NUMBERING + Validasi Template A.1 sampai A.[N] berurutan dan konsisten + +6. DIAGRAM COUNT + Per bab: Gambar [N].1 (Signature Model) + Gambar [N].2 (Mindmap) = ada? + +Laporan: 1 tabel summary per poin. Highlight ✗ untuk perbaikan. +``` + +--- + +### PROMPT 6B — REVISI CHAPTER + +``` +Revisi BAB [N] dari buku [JUDUL_BUKU] berdasarkan temuan audit. + +Masalah yang ditemukan: +[Copy temuan spesifik dari audit — jangan generik] + +Instruksi revisi: +1. Jangan ubah konten/substansi yang sudah benar +2. Fokus pada: [ASPEK YANG PERLU DIPERBAIKI] +3. Pertahankan semua callout box, tabel, dan diagram yang sudah ada +4. Hanya tambah/ubah bagian yang bermasalah + +Verifikasi setelah revisi: +[ ] Bridge dengan bab sebelumnya/sesudahnya sudah konsisten +[ ] Terminologi sesuai MASTER-ANCHOR +[ ] Quality Gates masih terpenuhi +[ ] Panjang masih dalam 15-22 halaman +``` + +--- + +## ═══ PROMPT SATU-LANGKAH (Quick Start) ═══ + +### PROMPT MEGA — Buat Seluruh Foundation Sekaligus + +Gunakan ini jika ingin memulai CEPAT tanpa melalui Fase 1 satu per satu. +**Peringatan:** Hasil lebih baik jika tiap file di-review dulu sebelum lanjut. + +``` +Saya ingin membuat buku ajar baru dengan metodologi yang sama persis dengan +buku "Riset Teknologi Informasi Berbasis OBE & Experimental Thinking" yang +sudah pernah kita buat sebelumnya. + +INFORMASI BUKU BARU: +Judul : [JUDUL] +Subjudul : [SUBJUDUL] +Mata Kuliah : [NAMA_MK] +Penulis : [NAMA, GELAR] +Institusi : [INSTITUSI] +Program Studi : [PRODI] +Level : [S1/S2], Semester [N] +Prasyarat MK : [MK PRASYARAT] +Jumlah bab : [N] (dibagi [M] Bagian) + +DAFTAR BAB (urutan + judul sementara): +Bagian I — [Nama Phase]: + Bab 1: [Judul] + Bab 2: [Judul] + ... + +Bagian II — [Nama Phase]: + ... + +[Dan seterusnya] + +Tujuan utama buku: [1 kalimat action verb] +Core dichotomy : "[Mindset A] vs [Mindset B]" +Domain contoh worksheet: [Domain untuk semua contoh konsisten] + +TUGAS: +Buat secara berurutan: +1. MASTER-ANCHOR.md +2. BOOK-SPEC.md +3. BLUEPRINT.md (semua [N] bab) +4. WRITING-TEMPLATE.md + +Setelah keempat file ini disetujui, saya akan minta bab satu per satu +menggunakan Prompt 3A/3B/3C. + +Mulai dari MASTER-ANCHOR.md. +``` + +--- + +## ═══ TIPS PENGGUNAAN ═══ + +### Urutan yang Disarankan + +``` +Fase 0 → Fase 1 (1A → 1B → 1C) → Fase 2 → Fase 3 (pilot 1 bab dulu) +→ Review pilot → Fase 3 (sisa bab) → Fase 4 (batch WS) → Fase 5 → Fase 6 +``` + +### Tips Manajemen Context Window + +- Simpan MASTER-ANCHOR dan BOOK-SPEC sebagai "sticky context" yang selalu + ditempel di awal setiap sesi baru +- Jangan tulis lebih dari 2 bab dalam satu sesi +- Setelah selesai setiap bab, minta AI membuat "SUMMARY BAB [N]: 5 poin kunci" + dan simpan sebagai catatan untuk sesi berikutnya + +### Domain Contoh yang Disarankan per Jenis Buku + +| Jenis Buku | Domain Contoh Worksheet | +|-----------|------------------------| +| Riset SI/TI | Sistem rekomendasi, fraud detection, NLP | +| Kecerdasan Buatan | Klasifikasi gambar, NLP, reinforcement learning | +| Keamanan Siber | Intrusion detection, phishing, malware analysis | +| Database | Query optimization, data warehousing, NoSQL vs SQL | +| Rekayasa Perangkat Lunak | Code quality, testing, refactoring | +| Data Science | Preprocessing pipeline, model selection, deployment | + +### Checklist Sebelum Commit ke Repo + +``` +[ ] MASTER-ANCHOR final (tidak berubah lagi) +[ ] BOOK-SPEC final +[ ] BLUEPRINT semua bab terisi +[ ] WRITING-TEMPLATE final +[ ] Pilot chapter melewati 3 Quality Gates +[ ] Setiap bab: 2 Gambar + min 1 Tabel + min 3 Referensi +[ ] Worksheet semua bab ada contoh di setiap tabel latihan +[ ] Back matter: References, Glosarium, Indeks, Kata Pengantar, Bio Penulis +[ ] Consistency Audit clean (tidak ada ✗) +``` + +--- + +*Dokumen ini dibuat berdasarkan analisis metodologi buku* +*Riset Teknologi Informasi Berbasis OBE & Experimental Thinking* +*oleh Helmi Bahar Alim, S.Kom., M.Kom. — Universitas Putra Bangsa Kebumen, 2026.* + +--- + +--- + +# LAMPIRAN — VARIAN NON-OBE +## Panduan Adaptasi untuk Buku Tanpa CPL/CPMK + +> Gunakan bagian ini jika buku yang dibuat **bukan buku ajar kurikulum formal**, +> melainkan: buku referensi umum, buku populer-ilmiah, panduan praktisi, +> buku monografi, atau buku ajar mandiri tanpa akreditasi OBE. +> +> **Semua standar kualitas konten tetap sama.** +> Yang berubah hanya *sistem akuntabilitas pembelajaran* — dari OBE metrics +> ke Reader-Outcome metrics. + +--- + +## Prinsip Dasar: Apa yang Diganti, Apa yang Tetap + +| Elemen | Buku OBE (versi asli) | Buku Non-OBE (varian ini) | +|--------|----------------------|--------------------------| +| Tujuan pembelajaran | CPL + CPMK + Sub-CPMK | **Reader Outcome**: apa yang pembaca BISA LAKUKAN | +| Penanda kompetensi | KKNI Level 6/7 | **Difficulty Level**: Pemula / Menengah / Mahir | +| Artefak output | "Output Praktis" (dinilai dosen) | **Takeaway Artefact** (digunakan pembaca sendiri) | +| Checkpoint bab | UTS / UAS integratif | **Synthesis Chapter** (integrasi tanpa nilai) | +| Template bab | Header OBE (Sub-CPMK, CPMK, CPL) | **Header Ringkas** (Topik, Fase, Reader Outcome) | +| Latihan akhir bab | "Latihan & Refleksi" (diserahkan) | **Latihan & Refleksi** (self-directed, tidak dikumpul) | +| Quality Gates | Think / Experiment / Artefact | **Think / Apply / Reflect** | + +**Yang TETAP SAMA:** +- 13-seksi scaffold per bab +- Signature Model (1 Mermaid per bab) +- Cognitive Traps (3-4 per bab) +- Studi Kasus Bad/Good (2 per bab) +- Template Praktis dalam code block +- Mindmap Ringkasan +- Opening + Closing Bridge +- Final Statement 🔥 +- Callout system (💡⚠️📌🔧📊🔥) +- APA 7th referensi +- Glosarium, Indeks, Back Matter lengkap + +--- + +## Panduan Penggantian Elemen per Elemen + +### 1. Ganti Header Bab OBE → Header Non-OBE + +**Versi OBE (original):** +``` +Sub-CPMK : 1.1 +CPMK : CPMK01 +CPL : CPL03 +``` + +**Versi Non-OBE (ganti dengan):** +``` +Topik : [Nama topik bab] +Fase : Fase [N] — [Nama Fase] +Reader Outcome : Setelah bab ini, pembaca mampu [kata kerja aktif + objek spesifik] +Level : [Pemula / Menengah / Mahir] +Prasyarat Bab : Bab [N-1] atau [Tidak ada] +``` + +**Contoh isi Reader Outcome yang baik vs buruk:** +``` +❌ Buruk: "Pembaca memahami konsep riset" +✅ Baik : "Pembaca mampu merumuskan problem statement yang spesifik, + terukur, dan dapat diuji secara empiris" +``` + +--- + +### 2. Ganti Output Praktis → Takeaway Artefact + +**Versi OBE:** "Output Praktis: Problem statement yang diserahkan untuk penilaian" + +**Versi Non-OBE:** Gunakan format ini di akhir setiap bab: + +``` +## Takeaway Artefact — Bab [N] + +Setelah membaca bab ini, Anda siap membuat: +**[Nama artefak]** — [deskripsi 1 kalimat] + +Gunakan Template [A.N] di halaman [X] sebagai panduan. + +Self-check: +[ ] Saya bisa menjelaskan [Konsep A] tanpa membuka buku +[ ] Artefak saya memenuhi kriteria [KriteriaA], [KriteriaB], [KriteriaC] +[ ] Saya tahu bagaimana artefak ini digunakan di Bab [N+1] +``` + +--- + +### 3. Ganti Quality Gates OBE → Quality Gates Non-OBE + +**Versi OBE:** +``` +Gate 1: Apakah bab ini membuat pembaca BERPIKIR? +Gate 2: Apakah bab ini mengarah ke EKSPERIMEN? +Gate 3: Apakah bab ini menghasilkan ARTEFAK RISET? +``` + +**Versi Non-OBE (sesuaikan dengan jenis buku):** + +Untuk buku **referensi/panduan praktisi:** +``` +Gate 1 (THINK) : Apakah bab ini mengubah cara pembaca memandang [topik]? +Gate 2 (APPLY) : Apakah pembaca bisa langsung menerapkan konsep ini hari ini? +Gate 3 (REFLECT) : Apakah ada self-check yang membuat pembaca sadar di level mana mereka? +``` + +Untuk buku **populer-ilmiah:** +``` +Gate 1 (ENGAGE) : Apakah ada hook yang membuat pembaca ingin terus membaca? +Gate 2 (INSIGHT) : Apakah ada minimal 1 insight yang mengejutkan atau counter-intuitive? +Gate 3 (SHARE) : Apakah ada sesuatu yang pembaca ingin ceritakan ke orang lain? +``` + +Untuk buku **monografi/buku ajar mandiri:** +``` +Gate 1 (DEPTH) : Apakah bab ini menjelaskan "mengapa" bukan hanya "apa"? +Gate 2 (CONNECT) : Apakah koneksi ke bab lain eksplisit? +Gate 3 (PRODUCE) : Apakah pembaca menghasilkan sesuatu yang konkret? +``` + +--- + +## PROMPT NON-OBE — FASE 0: Konteks Permanen + +``` +KONTEKS PERMANEN — BUKU NON-OBE (tempel di setiap sesi baru): + +Kamu adalah AI editor buku [JENIS_BUKU: referensi / populer-ilmiah / panduan praktisi]. +Buku ini TIDAK menggunakan sistem OBE/CPL/CPMK. +Standar kualitas konten tetap setara buku ajar akademik. + +Konvensi yang WAJIB diikuti (sama dengan versi OBE): +- Bahasa: [Indonesia semi-formal / Indonesia formal / campuran] +- Callout boxes: 💡 Insight, ⚠️ Perhatian, 📌 Definisi, 🔧 Template, 📊 Studi Kasus, 🔥 Final Statement +- Referensi: APA 7th Edition (tetap diperlukan untuk kredibilitas) +- Diagram: Mermaid flowchart +- Penomoran: Gambar [Bab].[N] + Tabel [Bab].[N] +- Setiap bab WAJIB: Signature Model, Opening/Closing Bridge, Cognitive Traps (3-4), + Studi Kasus (2: Basic+Advanced), Template Praktis, Mindmap, Final Statement 🔥 + +Yang BERBEDA dari versi OBE: +- Header bab: Reader Outcome + Level (bukan Sub-CPMK/CPMK/CPL) +- Quality Gates: Think/Apply/Reflect (bukan Think/Experiment/Artefact) +- Akhir bab: Takeaway Artefact + Self-check (bukan Output Praktis untuk dosen) +- Tone: [sesuaikan: lebih conversational jika populer, tetap semi-formal jika referensi] +``` + +--- + +## PROMPT NON-OBE 1A — MASTER ANCHOR + +``` +Buat file MASTER-ANCHOR.md untuk buku [JUDUL_BUKU]. + +Ini BUKAN buku ajar OBE. Tidak ada CPL/CPMK/Sub-CPMK. +Ganti semua referensi OBE dengan Reader Outcome Framework. + +IDENTITAS BUKU: +- Judul : [JUDUL] +- Subjudul : [SUBJUDUL] +- Jenis : [Referensi / Panduan Praktisi / Populer-Ilmiah / Monografi] +- Penulis : [NAMA, GELAR] +- Target Pembaca : [Deskripsi pembaca: siapa, latar belakang, tujuan membaca] +- Level Buku : [Pemula / Menengah / Mahir / Mixed] +- Konteks Baca : [Mandiri / Pendamping kuliah / Referensi profesional] + +TUJUAN UTAMA (1 kalimat, action verb): +[Apa yang pembaca BISA LAKUKAN setelah selesai buku ini] + +Buat MASTER-ANCHOR.md yang berisi: +1. Identitas buku (tabel) +2. Reader Profile: siapa pembaca ideal, pengetahuan awal yang diasumsikan +3. Tujuan utama — ❌ BUKAN ini dan ✅ TETAPI ini +4. Central Pipeline: urutan konsep yang jadi tulang punggung buku + (8-12 node linear: Konsep A → B → C → ...) +5. Learning Phases (3-4 fase, nama fase + bab-bab yang tercakup + fokus) +6. Quality Gates Non-OBE (3 gates sesuai jenis buku: Think/Apply/Reflect) +7. Anti-drift rules (5-7 aturan konten yang TIDAK boleh masuk) +8. Core Dichotomy yang jadi jiwa buku + (misal: "Cara lama vs cara yang terbukti lebih baik") +9. Kamus terminologi canonical (10-15 istilah, artinya dalam konteks buku ini) + +Format: Markdown dengan tabel dan callout ⚠️. +Panjang: 3-5 halaman cetak. +``` + +--- + +## PROMPT NON-OBE 1C — BLUEPRINT (Versi Non-OBE) + +``` +Buat file BLUEPRINT.md untuk buku [JUDUL_BUKU] (Non-OBE). + +Untuk SETIAP bab, buat blueprint dengan 8 elemen — versi Non-OBE: + +1. HEADER: Nomor bab, judul bab, fase, level (Pemula/Menengah/Mahir) +2. READER OUTCOME: "Setelah bab ini, pembaca mampu [kata kerja + objek spesifik]" + (GANTI OBE MAPPING — ini pengganti CPL/CPMK) +3. SIGNATURE MODEL: Nama model + ASCII pipeline notation +4. KONSEP INTI: 5-7 poin konsep yang wajib dicakup +5. CASE STUDIES: 2 judul (Basic + Advanced) +6. COGNITIVE TRAPS: 3-4 kutipan kalimat salah yang sering muncul +7. FINAL STATEMENT: 1 kalimat filosofis 🔥 +8. TAKEAWAY ARTEFACT: Apa yang pembaca hasilkan + kriteria self-check (3 item) + +KONTRAS dengan OBE: +- Tidak ada Sub-CPMK/CPMK/CPL +- Tidak ada checkpoint UTS/UAS — ganti dengan SYNTHESIS CHAPTER + (bab konsolidasi tanpa konteks penilaian) +- Tidak ada "diserahkan ke dosen" — semua artefak untuk pembaca sendiri + +Format: Markdown. Satu section per bab. +``` + +--- + +## PROMPT NON-OBE 3A — PILOT CHAPTER (Versi Non-OBE) + +``` +Tulis BAB [N] secara LENGKAP untuk buku [JUDUL_BUKU] (Non-OBE). + +DATA BAB INI (dari BLUEPRINT): +- Judul : [JUDUL_BAB] +- Fase : Fase [N] — [Nama Fase] +- Level : [Pemula / Menengah / Mahir] +- Reader Outcome : [dari BLUEPRINT — GANTI OBE] +- Signature Model : [NAMA_MODEL] — [ASCII pipeline] +- Konsep Inti : [daftar] +- Case Study 1 : [Basic] +- Case Study 2 : [Advanced] +- Cognitive Traps : [3-4] +- Final Statement : "[🔥 dari BLUEPRINT]" +- Takeaway Artefact: [dari BLUEPRINT] + +INSTRUKSI PENULISAN (identik dengan versi OBE KECUALI poin 2 dan 10): +1. Ikuti 13-seksi scaffold persis +2. Header bab: Reader Outcome + Level (BUKAN Sub-CPMK/CPMK/CPL) +3. Signature Model dalam Mermaid (Gambar [N].1) +4. Cognitive Traps: callout ⚠️, kutipan + koreksi +5. Studi Kasus: ❌ → ✅ → tabel → 💡 Pelajaran +6. Template Praktis dalam code block +7. Mindmap Mermaid (Gambar [N].2) +8. Opening Bridge dari bab sebelumnya +9. Closing Bridge ke bab berikutnya +10. Akhir bab: Takeaway Artefact + Self-check (BUKAN "Output Praktis") +11. Minimum 3 referensi APA 7th +12. Tabel: Tabel [N].[M] + caption + +QUALITY GATES NON-OBE (cek sebelum selesai): +[ ] Gate 1 (THINK) : Apakah bab ini mengubah cara pembaca memandang topik? +[ ] Gate 2 (APPLY) : Apakah pembaca bisa menerapkan langsung setelah membaca? +[ ] Gate 3 (REFLECT) : Apakah self-check membuat pembaca sadar posisi mereka? + +Target: 3.500–5.000 kata, setara 15-22 halaman B5. +``` + +--- + +## PROMPT NON-OBE 3C — SYNTHESIS CHAPTER (Pengganti Bab Integratif OBE) + +``` +Tulis SYNTHESIS CHAPTER untuk buku [JUDUL_BUKU] — Bab [N]. + +INI BUKAN UTS/UAS. Ini adalah bab konsolidasi mandiri — pembaca +mengintegrasikan pemahaman sendiri, tidak ada penilaian eksternal. + +Perbedaan dengan Bab Integratif OBE: +- HAPUS semua referensi ke "proposal", "diserahkan", "nilai", "ujian" +- GANTI dengan framing: "sebelum lanjut, pastikan fondasi Anda kokoh" +- Rubrik di sini = rubrik SELF-ASSESSMENT, bukan rubrik penilaian dosen + +STRUKTUR KHUSUS SYNTHESIS CHAPTER: +1. Pembuka: "Di titik ini, Anda sudah..." (recap journey, bukan briefing ujian) +2. Synthesis Map: Mermaid diagram yang menghubungkan semua konsep Bab [A]–[B] +3. Koneksi Kritis: tabel koneksi antar-konsep + pertanyaan verifikasi mandiri +4. Self-Assessment Rubrik (4 kriteria, skala 1-3): + - Kriteria berbasis "bisa saya lakukan", bukan "nilai yang diberikan" +5. "Sebelum Lanjut" Checklist: 8-10 item yang pembaca centang sendiri +6. Jika belum siap: panduan mini untuk mengulang bagian mana +7. Closing: "Dengan fondasi ini, kita siap memasuki..." + +TIDAK ADA: referensi ke dosen/penguji, deadline, nilai, format pengumpulan. + +Target: 10-14 halaman. +``` + +--- + +## PROMPT NON-OBE 4A — WORKSHEET (Versi Non-OBE) + +``` +Buat worksheet WS-[NN] untuk BAB [N] buku [JUDUL_BUKU] (Non-OBE). + +Worksheet ini adalah ALAT LATIHAN MANDIRI pembaca. +Tidak ada kolom "Nama / NIM / Tanggal Dikumpulkan". + +PERBEDAAN dari versi OBE: +- Header: "Latihan Mandiri — Bab [N]: [Topik]" (bukan "Worksheet WS-NN") +- Tidak ada kolom identitas mahasiswa +- Instruksi latihan: "Anda" bukan "Mahasiswa" +- Akhir worksheet: Self-check (bukan "Rubrik Penilaian") +- Tidak ada "Kumpulkan ke dosen / upload ke LMS" + +STRUKTUR TETAP SAMA: +## Ringkasan Materi +## Template A.[N] +## Latihan 1, 2, 3 +## Refleksi + +TAMBAHAN DI AKHIR (mengganti rubrik penilaian): +## Self-Check +- [ ] Saya bisa menjelaskan [konsep utama] dalam 2 kalimat +- [ ] Template saya memenuhi: [kriteria 1], [kriteria 2], [kriteria 3] +- [ ] Saya siap menggunakan hasil latihan ini di Bab [N+1] + +Format: Markdown. Nama file: ch[NN]-[slug-topik]-exercise.md +(atau ws-[NN]-[slug].md jika ingin konsisten dengan format OBE) +``` + +--- + +## Tabel Perbedaan Lengkap: OBE vs Non-OBE + +| Aspek | Versi OBE | Versi Non-OBE | +|-------|-----------|---------------| +| Header bab | Sub-CPMK / CPMK / CPL | Reader Outcome + Level | +| Quality Gates | Think / Experiment / Artefact | Think / Apply / Reflect | +| Akhir bab | Output Praktis (dikumpulkan) | Takeaway Artefact + Self-check | +| Bab konsolidasi | UTS / UAS Checkpoint | Synthesis Chapter | +| Worksheet header | Nama / NIM / Kelas | Tidak ada identitas | +| Worksheet penutup | Rubrik Penilaian | Self-check mandiri | +| Referensi ke nilai | "Dikumpulkan", "Dinilai" | "Digunakan", "Diterapkan" | +| Tone latihan | "Mahasiswa diminta..." | "Anda diminta..." / "Coba..." | +| Referensi APA | Wajib | Wajib (kredibilitas tetap) | +| Semua elemen lain | Sama | **Sama persis** | + +--- + +## Contoh Konversi: Satu Blueprint Bab + +**Versi OBE:** +``` +Bab 2 — Problem Formulation +Sub-CPMK : 1.2 +CPMK : CPMK01 +CPL : CPL03 +Output Praktis: Problem statement (dikumpulkan, dinilai dengan rubrik Bab 2) +``` + +**Versi Non-OBE:** +``` +Bab 2 — Problem Formulation +Reader Outcome: Setelah bab ini, pembaca mampu mengubah topik umum menjadi + problem statement yang spesifik, terukur, dan siap diteliti +Level : Pemula → Menengah +Takeaway Artefact: Problem statement untuk topik riset Anda sendiri +Self-check : + [ ] Problem statement saya menjawab "apa masalahnya", bukan "apa solusinya" + [ ] Ada data/fakta yang membuktikan masalah ini nyata + [ ] Masalah bisa diukur dan diuji secara empiris +``` + +--- + +*Lampiran Non-OBE ditambahkan April 2026.* +*Metodologi inti tetap identik — hanya sistem akuntabilitas pembelajaran yang disesuaikan.* diff --git a/slide/slide-01-research-mindset.md b/slide/slide-01-research-mindset.md new file mode 100644 index 0000000..0f2b7ef --- /dev/null +++ b/slide/slide-01-research-mindset.md @@ -0,0 +1,1396 @@ +--- +marp: true +paginate: true +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 1 — Research Mindset in IT + +## Etika Penelitian, Validitas, dan Paradigma + +*Pertemuan 1 (M1)  |  Sub-CPMK 1.1  |  CPMK01  |  CPL03* + +Fase: **Thinking** (M1–M4)  ·  Bagian I: Foundation + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 1 + +1. Pertanyaan Pemantik — Engineer vs Peneliti +2. Research Trust Model — rantai kepercayaan ilmiah +3. Etika: penjaga validitas, bukan sekadar moral +4. Tiga jenis validitas +5. Paradigma penelitian: Positivisme, Interpretivisme, Pragmatisme +6. Cognitive Traps — jebakan berpikir umum +7. Studi Kasus +8. Output Praktis Pertemuan 1 + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Membedakan pola pikir **engineer** dan **peneliti** +- Menjelaskan **Research Trust Model** dan risiko distorsi di setiap tahap +- Mengidentifikasi 3 jenis **validitas**: internal, external, construct +- Menjelaskan peran **etika** dalam menjaga integritas ilmiah +- Menentukan **paradigma** penelitian yang sesuai untuk studi kasus TI + +> Sub-CPMK 1.1 → Menunjukkan pemahaman paradigma riset dalam TI (CPL03) + +--- + +## Pertanyaan Pemantik + +Seorang developer menyelesaikan sistem deteksi plagiarisme berbasis NLP. +Demo berjalan lancar. Sistem melaporkan: **akurasi 87%**. + +> Apakah 87% itu **benar**? + +Pertanyaan reviewer: +- 87% terhadap *data training* atau dunia nyata? +- Konsisten pada 1.000 dokumen dari domain berbeda? +- Ada bias dalam proses pengumpulan data? +- Apa *baseline*-nya? + +**Inilah batas antara Engineer dan Peneliti.** + +--- + +## Research Trust Model + +*Rantai kepercayaan dari Realitas ke Pengetahuan — setiap panah = titik rawan distorsi* + +
+ +**Reality** → Data → Processing → Analysis → Inference → **Knowledge** + +
+ +| Transisi | Bahaya Distorsi | +|----------|----------------| +| Reality → Data | Sampling bias, instrumen tidak dikalibrasi | +| Data → Processing | Keputusan outlier & normalisasi mengubah makna | +| Processing → Analysis | Asumsi statistik dilanggar | +| Analysis → Inference | Overgeneralisasi, logical fallacy | +| Inference → Knowledge | Peer review bypass, selective reporting | + +> **Etika** mencegah distorsi yang **disengaja**. **Validitas** mendeteksi distorsi yang **tidak disengaja**. + +--- + +## Etika: Penjaga Validitas Ilmiah + +Bukan sekadar "jangan plagiat" — etika menjaga integritas seluruh rantai penelitian. + +| Pelanggaran | Contoh Konkret | Dampak | +|-------------|---------------|--------| +| **Fabrikasi** | Membuat data fiktif | Hasil tidak bisa direplikasi | +| **Falsifikasi** | Membuang outlier agar p < 0.05 | Kesimpulan menyesatkan | +| **Selective reporting** | Hanya laporkan eksperimen yang berhasil | Publication bias | +| **p-hacking** | Ganti metrik berulang sampai dapat p < 0.05 | False positive | +| **HARKing** | Hipotesis dibuat *setelah* melihat data | Inversi proses ilmiah | + +**Prinsip etika utama** *(Resnik, 2020)*: Kejujuran · Kehati-hatian · Keterbukaan · Integritas + +--- + +## Tiga Jenis Validitas + +*(Shadish, Cook & Campbell, 2002)* + +| Tipe Validitas | Pertanyaan Kunci | Ancaman Umum | +|---------------|-----------------|--------------| +| **Internal validity** | Apakah hubungan sebab-akibat ini benar? | *Confounding variables*, history effect | +| **External validity** | Bisa digeneralisasi ke populasi lain? | Dataset terlalu sempit, domain spesifik | +| **Construct validity** | Kita mengukur konsep yang tepat? | Metrik tidak merepresentasikan konsep | + +> **Insight:** Model ML akurasi 98% bisa memiliki **external validity rendah** jika hanya diuji pada satu dataset yang tidak representatif terhadap distribusi nyata. + +**Tambahan:** *Conclusion validity* — apakah ada cukup bukti statistik untuk menarik kesimpulan? + +--- + +## Paradigma Penelitian + +*(Creswell & Creswell, 2018)* + +| Paradigma | Asumsi Realitas | Metode Utama | Cocok untuk TI | +|-----------|----------------|-------------|---------------| +| **Positivisme** | Realitas objektif, bisa diukur | Kuantitatif, eksperimen | Benchmark, performa sistem | +| **Interpretivisme** | Realitas dikonstruksi sosial | Kualitatif, wawancara | UX research, adopsi teknologi | +| **Pragmatisme** | Kebenaran = yang berguna | Mixed methods | Evaluasi sistem + usability | + +**Posisi mata kuliah ini:** Positivisme + Design Science + +> Design Science Research: membuat dan mengevaluasi *artefak* (sistem, model, metode) sebagai bentuk kontribusi ilmiah — menggabungkan membangun (*build*) dengan membuktikan (*evaluate*). + +--- + + + +# Cognitive Traps +## Jebakan Berpikir Peneliti Pemula + +--- + +## Cognitive Traps — Bab 1 + +**"Angka tinggi = benar"** +Akurasi 98% dari dataset imbalance (95% kelas negatif) tidak bermakna. Butuh F1, AUC, confusion matrix. + +**"Data itu netral"** +Data dikumpulkan oleh manusia, melalui instrumen buatan manusia — bias selalu bisa masuk di setiap tahap. + +**"Kalau sistemnya jalan, berarti benar"** +Sistem berfungsi ≠ klaim tentang sistem valid. Ini perbedaan mendasar engineer vs peneliti. + +**"Kegagalan tidak perlu dilaporkan"** +Kegagalan adalah data — bahkan lebih informatif dari keberhasilan. Wajib didokumentasikan. + +--- + +## Studi Kasus 1 — Manipulasi Dataset (Basic) + +**Konteks:** Mahasiswa membangun model klasifikasi teks dengan akurasi 99%. + +Masalah: Data train dan data test adalah subset dari corpus yang sama dan dipreprocess bersama-sama (*data leakage*). Model "hafal" data test, bukan belajar dari pola. + +**Gejala yang terlewat:** +- Performa di data baru: 61% +- Training loss vs validation loss gap sangat kecil (tidak wajar) + +Solusi: Lakukan **train/validation/test split** sebelum _preprocessing_ apapun. Gunakan held-out test set yang benar-benar tidak tersentuh selama pengembangan. + +> Kunci: urutan operasi dalam pipeline ML menentukan validitas hasil. + +--- + +## Studi Kasus 2 — AI Bias (Advanced) + +**Konteks:** Model screening CV untuk rekrutmen — performa teknis baik, tapi bias gender tersembunyi. + +Masalah: Model dilatih pada data historis perusahaan yang memang bias (lebih banyak merekrut pria untuk posisi teknis). Model belajar mereplikasi bias ini. Akurasi keseluruhan: 89% — tetapi *false rejection rate* kandidat perempuan 3× lebih tinggi. + +Solusi: +1. Tambahkan **fairness metrics** (demographic parity, equalized odds) +2. Audit distribusi training data +3. Fairness constraint dalam objective function +4. Human-in-the-loop untuk keputusan final + +--- + +## Research vs Engineering — Perbedaan Fundamental + +| Aspek | Engineering Mindset | Research Mindset | +|-------|--------------------|--------------------| +| Pertanyaan | "Bagaimana membuatnya bekerja?" | "Apakah klaim ini benar?" | +| Standar sukses | "Sistemnya berjalan" | "Validitasnya terbukti" | +| Terhadap kegagalan | Dihindari, disembunyikan | Dilaporkan, dianalisis | +| Output utama | Produk/aplikasi | Pengetahuan yang terverifikasi | +| Standar penerimaan | Functional requirement | Peer review + replikasi | +| Sumber kebenaran | Testing fungsional | Eksperimen terkontrol + statistik | + +> Mata kuliah RTI melatih Anda untuk menambahkan **research mindset** di atas engineering mindset yang sudah Anda miliki. + +--- + +## Ringkasan Pertemuan 1 + +| Konsep | Inti | +|--------|------| +| Research Trust Model | Reality → Data → Processing → Analysis → Inference → Knowledge | +| Etika | Mencegah distorsi **disengaja** (fabrikasi, falsifikasi, p-hacking) | +| Validitas | Internal (kausalitas), External (generalisasi), Construct (ketepatan ukur) | +| Paradigma | Positivisme + Design Science (posisi MK ini) | +| Mindset shift | Engineer membangun → Peneliti **membuktikan** | + +--- + +## Final Statement & Output Praktis + +
+"Penelitian bukan tentang mendapatkan hasil, tetapi tentang memastikan hasil tersebut dapat dipercaya." +
+ +### Output Praktis M1 + +Buat **esai analisis** (min. 400 kata): + +1. Identifikasi **1 kasus nyata** di dunia TI yang melanggar etika penelitian (boleh dari berita, paper retracted, atau studi kasus terkenal) +2. Jelaskan validitas **mana yang terganggu** dan mengapa +3. Tentukan **paradigma penelitian** yang paling tepat untuk kasus tersebut + +*Format: narasi, bukan bullet points. Cantumkan minimal 2 referensi APA 7th.* + +--- + +## Referensi Utama — Bab 1 + +- Creswell, J. W., & Creswell, J. D. (2018). *Research design: Qualitative, quantitative, and mixed methods approaches* (5th ed.). SAGE Publications. + +- Resnik, D. B. (2020). *What is ethics in research & why is it important?* National Institute of Environmental Health Sciences. https://www.niehs.nih.gov/research/resources/bioethics/whatis + +- Shadish, W. R., Cook, T. D., & Campbell, D. T. (2002). *Experimental and quasi-experimental designs for generalized causal inference*. Houghton Mifflin. + +- Wieringa, R. J. (2014). *Design science methodology for information systems and software engineering*. Springer. diff --git a/slide/slide-02-problem-formulation.md b/slide/slide-02-problem-formulation.md new file mode 100644 index 0000000..5620d4b --- /dev/null +++ b/slide/slide-02-problem-formulation.md @@ -0,0 +1,1430 @@ +--- +marp: true +paginate: true +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 2 — Problem Formulation & System Context + +## Merumuskan Masalah Riset dari Fenomena TI + +*Pertemuan 2 (M2)  |  Sub-CPMK 1.2  |  CPMK01  |  CPL03 + CPL06* + +Fase: **Thinking** (M1–M4)  ·  Bagian I: Foundation + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 2 + +1. Dari mana penelitian dimulai? +2. Problem Formation Model — proses transformasi masalah +3. Problem Quality Model — 5 kriteria masalah yang layak diteliti +4. Topic vs Problem vs Research Problem +5. Symptom vs Root Cause — menggali ke akar +6. System Thinking dalam konteks riset TI +7. Operasionalisasi: Problem → Variable → Metric +8. Cognitive Traps & Studi Kasus +9. Output Praktis: Problem Statement + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Membedakan **topik**, **masalah**, dan **masalah riset** secara presisi +- Mengidentifikasi **gejala vs akar masalah** dalam fenomena TI +- Mendeskripsikan **konteks sistem** (Input-Process-Output-Outcome-Constraints-Stakeholders) +- Mentransformasi fenomena TI menjadi **researchable problem** yang terukur +- Memvalidasi problem statement dengan **5 kriteria kualitas** + +> Sub-CPMK 1.2 → Merumuskan masalah riset dari fenomena TI (CPL03 + CPL06) + +--- + +## Pertanyaan Pemantik + +Bab 1 membagun fondasi berpikir: *Curious → Critical → Systematic*. + +Sekarang pertanyaannya: **dari mana penelitian dimulai?** + +> Bukan dari metode. +> Bukan dari dataset. +> Bukan dari tool atau teknologi yang ingin digunakan. +> +> **Penelitian dimulai dari MASALAH.** + +Tapi "masalah riset" bukan sekadar keluhan: +- *"Website kampus lambat"* → keluhan +- *"Waktu respons meningkat 340% saat concurrent user > 500, belum ada studi tentang caching strategy X di arsitektur monolitik akademik"* → masalah riset + +**Perbedaannya: presisi, konteks sistem, dan testability.** + +--- + +## Problem Formation Model + +*Dari Realitas ke Variabel Terukur* + +
+ +**Reality** → Observed Issue → Diagnosed Problem → Researchable Problem → **Measurable Variable** + +(Symptom)        (Root Cause)        (Scoped & Bounded)     (Operationalized) + +
+ +| Tahap | Fungsi | Pertanyaan yang Dijawab | +|-------|--------|------------------------| +| **Reality** | Fenomena dunia nyata | Apa yang terjadi di lapangan? | +| **Observed Issue** | Pengamatan awal (gejala) | Apa yang terlihat "tidak beres"? | +| **Diagnosed Problem** | Akar masalah setelah investigasi | Mengapa itu terjadi? | +| **Researchable Problem** | Masalah + gap literatur + batasan | Apakah ini layak diteliti? | +| **Measurable Variable** | Variabel yang bisa diuji | Bagaimana mengukurnya? | + +> Kesalahan paling umum: melompat langsung dari **Reality ke Measurable Variable** — melewati analisis akar masalah dan literatur gap. + +--- + +## Problem Quality Model — 5 Kriteria + +Setiap masalah riset harus lulus 5 kriteria ini: + +| Kriteria | Pertanyaan Uji | Gagal jika... | +|----------|---------------|--------------| +| **Clarity** | Bisa dipahami tanpa ambiguitas? | Tidak jelas siapa/apa/di mana/kapan | +| **Measurability** | Ada metrik yang bisa diukur? | Hanya bisa dinilai secara subjektif | +| **Relevance** | Ada gap di literatur? | Sudah terjawab penuh sebelumnya | +| **Testability** | Bisa dieksperimenkan? | Terlalu luas, tidak feasible | +| **Impact** | Ada kontribusi nyata? | Tidak ada yang peduli dengan jawabannya | + +> Jika masalah tidak lulus semua 5 kriteria → ulangi proses formasi. Lebih baik 1 minggu perbaiki masalah daripada 1 semester meneliti masalah yang salah. + +--- + +## Topic vs Problem vs Research Problem + +| Level | Analogi | Contoh TI | +|-------|---------|-----------| +| **Topik** | "Ada masalah di kota ini" | "Keamanan IoT" | +| **Masalah** | "Jalan berlubang di KM 5" | "MQTT tidak terenkripsi pada IoT rumahan" | +| **Masalah Riset** | "Lubang di KM 5 disebabkan drainase gagal; belum ada studi material X untuk kondisi ini" | "Belum ada studi yang membandingkan overhead TLS 1.3 vs DTLS pada MQTT di perangkat resource-constrained (RAM < 64KB)" | + +**Research Problem memiliki 3 elemen yang tidak dimiliki masalah biasa:** +1. **Gap** — "belum ada studi yang..." +2. **Variabel terukur** — "overhead (ms, KB)" +3. **Batasan konteks** — "resource-constrained, RAM < 64KB" + +--- + +## Symptom vs Root Cause + +Dalam riset TI, apa yang terlihat di permukaan bukan selalu masalah yang sebenarnya. + +| Yang Diamati (Gejala) | Akar Masalah (Dugaan) | Masalah Riset | +|----------------------|----------------------|---------------| +| "Pengguna mengeluh aplikasi lambat" | Query DB tidak terindeks → full table scan | Efektivitas composite index pada tabel 2M record PostgreSQL dalam skenario concurrent read | +| "Model ML performa menurun di produksi" | Training-serving skew (distribusi data berbeda) | Deteksi & mitigasi data drift pada pipeline ML streaming real-time | +| "Pengguna meninggalkan fitur baru" | Friction di onboarding flow | Korelasi antara kompleksitas UI dan user retention pada aplikasi mobile F&B | + +> Teknik menggali akar masalah: **5 Whys**, **Fishbone Diagram**, **Root Cause Analysis** — sebelum masuk ke literatur. + +--- + +## System Thinking dalam Riset TI + +Masalah riset TI selalu terikat pada **sistem**. Tanpa memahami sistem, masalah jadi abstrak dan tidak bisa dieksperimenkan. + +``` +Input → [Process] → Output → Outcome + | + Constraints + | + Stakeholders +``` + +| Komponen | Contoh (Studi Rekomendasi Film) | +|----------|---------------------------------| +| **Input** | Riwayat tontonan pengguna, rating, metadata konten | +| **Process** | Algoritma collaborative filtering | +| **Output** | Daftar 10 film yang direkomendasikan | +| **Outcome** | Pengguna puas, waktu tonton meningkat (atau tidak) | +| **Constraints** | Latency < 200ms, privasi data, cold-start problem | +| **Stakeholders** | Pengguna, platform, content provider | + +> Akurasi tinggi (Output) ≠ pengguna puas (Outcome). Inilah mengapa masalah riset tidak bisa hanya fokus pada satu komponen sistem. + +--- + +## Transformasi: Problem → Variable → Metric + +*Operasionalisasi masalah ke variabel yang dapat diukur* + +``` +Problem → Variable → Metric → Data Type → Analysis Method +``` + +**Contoh:** + +| Problem | Variable | Metric | Tipe Data | +|---------|---------|--------|-----------| +| Rekomendasi tidak relevan | Relevansi rekomendasi | Precision@K, NDCG | Ratio | +| Fraud lolos deteksi | Kemampuan deteksi fraud | Recall, F2-score | Ratio | +| UI terlalu kompleks | Kemudahan penggunaan | Task completion time, SUS score | Ratio / Ordinal | + +> Metrik harus dipilih **sebelum eksperimen berjalan** — bukan setelah melihat data dan memilih yang menghasilkan angka terbaik. *(Wohlin et al., 2012)* + +--- + + + +# Cognitive Traps +## Bab 2 — Problem Formulation + +--- + +## Cognitive Traps — Bab 2 + +**"Saya ingin menggunakan metode X, maka saya cari masalah yang cocok"** +Ini *reverse engineering* penelitian. Metode dipilih berdasarkan masalah — bukan sebaliknya. Jika mulai dari metode, bukan masalah yang diteliti, tapi metode yang didemonstrasikan. + +**"Semakin kompleks sistemnya, semakin bagus penelitiannya"** +Kompleksitas bukan kontribusi. Masalah spesifik yang sederhana namun belum terjawab lebih bermakna daripada sistem kompleks dengan masalah yang sudah umum diketahui. + +**"Problem tidak perlu diukur, yang penting jelas"** +"Respon sistem lambat" bukan masalah riset — tidak ada yang bisa dieksperimenkan. Research problem harus memiliki variabel yang terukur secara kuantitatif. + +**"Semua problem bisa diteliti"** +Tidak semua masalah memenuhi 5 kriteria kualitas. Sebagian masalah lebih tepat diselesaikan melalui engineering atau desain, bukan riset ilmiah. + +--- + +## Studi Kasus 1 — Rekomendasi Film (Basic) + +**Konteks:** Peneliti membangun sistem rekomendasi film dengan collaborative filtering. Akurasi: 91%. + +**Masalah:** Peneliti menggunakan *accuracy* (hit rate) sebagai satu-satunya metrik. Pengguna memperoleh rekomendasi yang "akurat" secara teknis, tapi tidak puas karena semua rekomendasi mirip (*filter bubble*) dan selalu item populer (*popularity bias*). + +**Masalah riset yang sebenarnya:** +*"Bagaimana trade-off antara Precision@10 dan Diversity dalam sistem rekomendasi collaborative filtering pada dataset cold-start?"* + +**Solusi:** Definisikan masalah dari perspektif sistem lengkap (output + outcome + constraints). Gunakan multi-metric: Precision@K + Serendipity + Diversity + Coverage. + +--- + +## Studi Kasus 2 — Fraud Detection (Advanced) + +**Konteks:** Model fraud detection — akurasi 98%, tapi fraud tetap lolos ke produksi. + +**Root Cause Analysis:** +- Dataset imbalance: 99.5% transaksi normal, 0.5% fraud +- Dengan akurasi 98% sederhana: model bisa memprediksi "semua normal" dan tetap mendapat akurasi 98% +- Metrik yang salah menghasilkan *false sense of security* + +| Metrik | Nilai | Makna Sebenarnya | +|--------|-------|-----------------| +| Accuracy | 98.2% | Tidak bermakna untuk imbalanced data | +| Recall (fraud) | 12% | Model melewatkan 88% kasus fraud! | +| F2-score | 0.31 | Rendah — recall lebih dipentingkan dari precision | + +**Masalah riset yang tepat:** *"Efektivitas teknik resampling [SMOTE vs ADASYN] terhadap Recall dan F2-score pada deteksi fraud transaksi perbankan dengan rasio imbalance 1:200."* + +--- + +## Ringkasan Pertemuan 2 + +| Konsep | Inti | +|--------|------| +| Problem Formation | Reality → Observed Issue → Diagnosed → Researchable → Measurable | +| Problem Quality | Clarity + Measurability + Relevance + Testability + Impact | +| Hierarki | Topik (wilayah) < Masalah (celah) < Research Problem (celah + gap + batas) | +| Symptom vs Root Cause | Gali lebih dalam sebelum ke literatur | +| System Thinking | Input-Process-Output-Outcome + Constraints + Stakeholders | +| Operasionalisasi | Problem → Variable → Metric → Data Type → Analysis | + +--- + +## Final Statement & Output Praktis + +
+"Penelitian tidak dimulai dari solusi, tetapi dari masalah yang dipahami secara mendalam dan dapat diuji secara ilmiah." +
+ +### Output Praktis M2 + +Buat **Problem Statement** yang mencakup: + +1. **Konteks sistem** — deskripsikan Input, Process, Output, Outcome, Constraints +2. **Gejala yang diamati** — data/fakta yang membuktikan masalah nyata +3. **Akar masalah** — hasil 5-Whys/RCA +4. **Gap literatur** — apa yang belum dijawab di penelitian sebelumnya +5. **Variabel & metrik** yang akan diukur + +*Validasi terhadap 5 kriteria Problem Quality Model sebelum dikumpulkan.* + +--- + +## Referensi Utama — Bab 2 + +- Creswell, J. W., & Creswell, J. D. (2018). *Research design: Qualitative, quantitative, and mixed methods approaches* (5th ed.). SAGE Publications. + +- Hevner, A. R., March, S. T., Park, J., & Ram, S. (2004). Design science in information systems research. *MIS Quarterly, 28*(1), 75–105. + +- Wieringa, R. J. (2014). *Design science methodology for information systems and software engineering*. Springer. + +- Wohlin, C., Runeson, P., Höst, M., Ohlsson, M. C., Regnell, B., & Wesslén, A. (2012). *Experimentation in software engineering*. Springer. diff --git a/slide/slide-03-literature-gap.md b/slide/slide-03-literature-gap.md new file mode 100644 index 0000000..9f608a2 --- /dev/null +++ b/slide/slide-03-literature-gap.md @@ -0,0 +1,1430 @@ +--- +marp: true +paginate: true +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 3 — Literature Review, Research Gap & Baseline + +## Menavigasi Literatur untuk Menemukan Posisi Riset + +*Pertemuan 3 (M3)  |  Sub-CPMK 1.3  |  CPMK01  |  CPL03* + +Fase: **Thinking** (M1–M4)  ·  Bagian I: Foundation + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 3 + +1. Bridge dari Bab 2 — dari masalah ke literatur +2. Research Positioning Model — tujuan sebenarnya literature review +3. Literature review bukan ringkasan — positioning artinya apa? +4. Empat jenis research gap +5. Baseline: definisi, kriteria, dan cara memilih +6. Strategi pencarian literatur yang efisien +7. Gap → RQ → Hypothesis (jembatan ke Bab 4) +8. Cognitive Traps & Studi Kasus +9. Output: Tabel Literatur + Gap Statement + Baseline + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Menjelaskan tujuan **literature review** sebagai *positioning*, bukan ringkasan +- Mengidentifikasi **4 jenis research gap**: Performance, Method, Data, Context +- Memilih **baseline** yang representatif dan *state-of-the-art* +- Melakukan pencarian literatur terstruktur di **IEEE, ACM, Scopus** dengan boolean query +- Menyusun **gap statement** yang menghubungkan literatur ke RQ + +> Sub-CPMK 1.3 → Menavigasi literatur & menemukan research gap (CPL03) + +--- + +## Bridge dari Bab 2 + +Di Bab 2, Anda telah: +- Mengidentifikasi masalah riset (bukan sekadar topik) +- Memvalidasi dengan 5 kriteria Problem Quality +- Menghasilkan Problem Statement dengan variabel terukur + +**Pertanyaan berikutnya:** Apakah masalah ini sudah pernah diteliti? + +> Jika sudah terjawab penuh → bukan research gap, tapi replikasi. +> Jika belum terjawab → di manakah tepatnya "celahnya"? +> Jika sebagian terjawab → apa yang spesifik belum terselesaikan? + +Literature review menjawab pertanyaan-pertanyaan ini **secara sistematis**. + +--- + +## Research Positioning Model + +*Dari Literatur ke Posisi Riset Anda* + +``` +Existing Studies → Method Comparison → Limitation Identification + → Research Gap → Research Position → Contribution +``` + +| Tahap | Aktivitas | Output | +|-------|----------|--------| +| **Existing Studies** | Baca & kategorikan 20–40 paper relevan | Peta literatur | +| **Method Comparison** | Bandingkan pendekatan & metrik tiap paper | Tabel metode & hasil | +| **Limitation ID** | Identifikasi keterbatasan eksplisit & implisit | Daftar limitasi | +| **Research Gap** | Temukan celah yang belum terjawab | Gap statement | +| **Research Position** | Di mana riset Anda dalam peta literatur | Positioning statement | +| **Contribution** | Apa yang baru yang Anda tambahkan | Contribution claim | + +--- + +## Literature Review: Positioning, Bukan Ringkasan + +**Literature review yang salah:** +*"Smith (2020) menggunakan CNN untuk klasifikasi gambar dan mendapat akurasi 89%. Jones (2021) menggunakan ResNet dan mendapat 92%. Kumar (2022) menggunakan ViT dan mendapat 95%."* + +Ini adalah **ringkasan** — bukan *positioning*. Tidak muncul pertanyaan: mengapa ada perbedaan? Apa yang belum dijawab? + +**Literature review yang benar:** +*"Studi-studi sebelumnya menunjukkan peningkatan akurasi konsisten menggunakan arsitektur transformer, namun seluruh evaluasi dilakukan pada dataset standar (ImageNet). Tidak ada yang mengevaluasi performa pada dataset domain-spesifik dengan resolusi rendah, yang merupakan kondisi nyata di sistem pemantauan industri (gap: Context Gap). Riset ini mengisi celah tersebut dengan..."* + +> **Aturan positioning:** setiap paragraf literature review harus diakhiri dengan implikasi terhadap riset Anda. + +--- + +## Empat Jenis Research Gap + +| Jenis Gap | Definisi | Pertanyaan Diagnostik | Contoh | +|-----------|---------|----------------------|--------| +| **Performance Gap** | Metode terbaik saat ini belum mencapai standar yang dibutuhkan | "Apakah performa ada yang sudah cukup?" | Deteksi kanker kulit: akurasi 87%, kebutuhan klinis > 95% | +| **Method Gap** | Tidak ada metode yang tepat untuk masalah tertentu | "Sudah ada metode, tapi cocok?" | Semua paper pakai supervised, padahal data berlabel minimal | +| **Data Gap** | Tidak ada dataset yang representatif untuk konteks tertentu | "Dataset yang ada cocok untuk konteks ini?" | Tidak ada dataset NLP Bahasa Indonesia untuk domain hukum | +| **Context Gap** | Metode ada & bagus, tapi belum dievaluasi di konteks target | "Sudah diuji di konteks saya?" | Transformer efektif untuk English, belum dievaluasi di Bahasa Jawa | + +> Satu riset bisa memiliki **lebih dari satu jenis gap**. Identifikasi semua, prioritaskan yang paling kuat. + +--- + +## Baseline: Standar Pembanding + +Baseline adalah metode atau sistem **terbaik yang sudah ada** yang digunakan sebagai patokan perbandingan. + +**Kriteria baseline yang valid:** + +| Kriteria | Penjelasan | +|----------|-----------| +| **Relevan** | Menjawab problem yang sama dengan riset Anda | +| **Representatif** | Standar di komunitas riset tersebut (sering dikutip) | +| **State-of-the-art** | Bukan versi lama dari 2010 saat yang 2023 sudah ada | +| **Reproducible** | Bisa diimplementasi ulang dengan informasi di paper | +| **Fair** | Diuji pada kondisi yang sama dengan sistem Anda | + +> **Baseline lemah = kontribusi lemah.** Jika baseline Anda sudah ketinggalan 5 tahun, reviewer akan pertanyakan relevansi temuan Anda. + +--- + +## Strategi Pencarian Literatur Terstruktur + +**Database utama:** IEEE Xplore · ACM Digital Library · Scopus · Web of Science · Google Scholar + +**Boolean query yang efektif:** +``` +("fraud detection" OR "anomaly detection") +AND ("machine learning" OR "deep learning") +AND ("imbalanced dataset" OR "class imbalance") +NOT ("image classification") +``` + +**Filter yang disarankan:** +- Tahun: 2019–2024 (tidak lebih dari 5 tahun untuk metodologi) +- Venue: conference A/B IEEE, ACM, jurnal terindeks Scopus Q1–Q2 +- Tipe: full research paper (bukan extended abstract) + +**Alur PRISMA:** +1. Identifikasi → 2. Screening judul+abstrak → 3. Eligibility (baca full) → 4. Included + +--- + +## Gap → RQ → Hypothesis: Jembatan ke Bab 4 + +``` +Research Gap → Research Question → Hypothesis (H0/H1) +``` + +**Contoh:** + +**Gap:** *Context Gap — tidak ada studi yang mengevaluasi BERT fine-tuning pada teks hukum Indonesia (domain language drift, kosakata khusus)* + +**RQ:** *"Sejauh mana fine-tuning IndoBERT pada corpus hukum Indonesia meningkatkan F1-score klasifikasi kategori dokumen dibandingkan dengan model baseline IndoBERT tanpa fine-tuning?"* + +**H0:** *Fine-tuning IndoBERT pada corpus hukum tidak meningkatkan F1-score secara signifikan (p ≥ 0.05)* + +**H1:** *Fine-tuning IndoBERT pada corpus hukum meningkatkan F1-score secara signifikan (p < 0.05)* + +--- + + + +# Cognitive Traps +## Bab 3 — Literature Review + +--- + +## Cognitive Traps — Bab 3 + +**"Semakin banyak referensi, semakin bagus"** +Kualitas ≠ kuantitas. 15 paper yang relevan dan dianalisis mendalam lebih kuat dari 50 paper yang hanya disebutkan. Reviewer melihat kedalaman analisis, bukan panjang daftar pustaka. + +**"Belum ada paper tentang ini = gap"** +Bisa jadi masalahnya tidak penting, atau sudah diselesaikan dengan cara yang berbeda. "Tidak ada paper" bisa berarti: tidak penting, domain tidak relevan, atau Anda salah kata kunci pencarian. Validasi gap dari sudut yang berbeda. + +**"Tidak perlu baseline, yang penting sistemnya jalan"** +Tanpa baseline, tidak ada pembanding. Kontribusi Anda tidak bisa dibuktikan. Setiap research contribution membutuhkan referensi titik awal (*starting point*). + +--- + +## Studi Kasus 1 — Image Classification (Basic) + +**Konteks:** Mahasiswa meneliti klasifikasi gambar X-ray untuk deteksi pneumonia. + +**Masalah:** Literature review berisi 30+ paper, tapi semuanya hanya dirangkum. Tidak ada kategorisasi gap. Baseline yang dipilih: VGG16 dari 2014. + +**Implikasi:** +- Reviewer: "Mengapa tidak menggunakan EfficientNet atau ResNeSt yang sudah terbukti lebih baik di benchmark medis?" +- Kontribusi dianggap lemah karena baseline sudah usang + +**Solusi:** +1. Kategorikan paper berdasarkan metode, dataset, metrik, tahun +2. Identifikasi gap eksplisit dari keterbatasan yang disebutkan penulis asli +3. Pilih baseline dari paper tahun 2022–2024 yang menjadi referensi utama di bidang tersebut + +--- + +## Studi Kasus 2 — Disease Detection (Advanced) + +**Konteks:** Peneliti mengidentifikasi gap "belum ada model untuk deteksi penyakit tanaman di Indonesia." + +**Masalah:** +- Gap terlalu luas: bukan satu gap, tapi minimal 3 gap berbeda (data, context, performance) +- Tidak ada baseline yang clear: membandingkan dengan "model umum" tanpa spesifikasi +- Kontribusi klaim terlalu besar: "pertama di Indonesia" — tidak mungkin diverifikasi + +**Analysis — Apa yang sebenarnya terjadi:** +Tanpa baseline yang jelas, reviewer tidak bisa menilai apakah peningkatan yang diklaim benar-benar signifikan atau hanya artifact dari pemilihan dataset. + +**Solusi:** Persempit gap → satu klaim yang kuat dan verifiable: *"Belum ada benchmark dataset tanaman kopi Indonesia dengan anotasi multi-disease pada kondisi lapangan (bukan greenhouse) per 2024."* + +--- + +## Tabel Literatur — Template + +*Gunakan template ini untuk memetakan 20–40 paper relevan* + +| Penulis (Tahun) | Metode | Dataset | Metrik | Hasil | Keterbatasan | Relevansi ke Riset Saya | +|----------------|--------|---------|--------|-------|-------------|------------------------| +| Smith (2022) | CNN | ImageNet | Accuracy | 94% | Single domain | Baseline method | +| Jones (2023) | ViT | custom | F1 | 91% | Small dataset | Context gap ref | +| *dst...* | | | | | | | + +**Instruksi pengisian:** +- Kolom "Keterbatasan": salin dari paper yang ditulis penulis sendiri (lebih valid) +- Kolom "Relevansi": tulis eksplisit — apakah ini baseline, gap reference, atau method reference + +--- + +## Ringkasan Pertemuan 3 + +| Konsep | Inti | +|--------|------| +| Tujuan Literature Review | Positioning riset, **bukan** ringkasan paper | +| Research Positioning Model | Existing Studies → Gap → Position → Contribution | +| 4 Jenis Gap | Performance · Method · Data · Context | +| Baseline | Relevan + Representatif + State-of-the-art + Fair | +| Strategi Pencarian | Boolean query + filter database tier-1 + PRISMA | +| Jembatan | Gap → RQ → H0/H1 | + +--- + +## Final Statement & Output Praktis + +
+"Literature review bukan tentang apa yang sudah diketahui, tetapi tentang apa yang belum diselesaikan dan bagaimana Anda mengisinya." +
+ +### Output Praktis M3 + +Buat **3 dokumen**: + +1. **Tabel Literatur** (min. 10 paper, format tabel di atas) +2. **Gap Statement** (1–2 paragraf): jenis gap + justifikasi + mengapa gap ini penting +3. **Baseline Selection** (1 paragraf): alasan memilih baseline + kriteria yang terpenuhi + +*Semua referensi APA 7th. Gap Statement menjadi bagian dari Problem Statement.* + +--- + +## Referensi Utama — Bab 3 + +- Kitchenham, B., & Charters, S. (2007). *Guidelines for performing systematic literature reviews in software engineering* (Technical Report EBSE 2007-001). Keele University. + +- Petersen, K., Feldt, R., Mujtaba, S., & Mattsson, M. (2008). Systematic mapping studies in software engineering. *Proceedings of the 12th International Conference on Evaluation and Assessment in Software Engineering*, 68–77. + +- Wohlin, C. (2014). Guidelines for snowballing in systematic literature studies and a replication in software engineering. *Proceedings of the 18th International Conference on Evaluation and Assessment in Software Engineering*, Article 38. + +- Webster, J., & Watson, R. T. (2002). Analyzing the past to prepare for the future: Writing a literature review. *MIS Quarterly, 26*(2), xiii–xxiii. diff --git a/slide/slide-04-rq-hypothesis.md b/slide/slide-04-rq-hypothesis.md new file mode 100644 index 0000000..7f00150 --- /dev/null +++ b/slide/slide-04-rq-hypothesis.md @@ -0,0 +1,1416 @@ +--- +marp: true +paginate: true +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 4 — RQ, Contribution & Hypothesis + +## Merancang Pertanyaan Riset dan Hipotesis yang Dapat Diuji + +*Pertemuan 4 (M4)  |  Sub-CPMK 1.4  |  CPMK01  |  CPL03* + +Fase: **Thinking** (M1–M4)  ·  Bagian I: Foundation + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 4 + +1. Bridge dari Bab 3 — dari gap ke pertanyaan +2. RQ Formation Model — pipeline RQ yang valid +3. Tiga jenis RQ: Comparison, Improvement, Exploratory +4. Kriteria RQ yang baik: SMART + Testable +5. Contribution statement — tiga jenis kontribusi +6. Hipotesis: H0 dan H1, syarat apa yang harus dipenuhi +7. RQ → Variable → Metric → Data → Analysis (chain of operationalization) +8. Cognitive Traps & Studi Kasus +9. Output Praktis: RQ + Contribution + H0/H1 + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Merumuskan **Research Question (RQ)** yang tajam, terukur, dan dapat diuji +- Membedakan **3 jenis RQ**: Comparison, Improvement, Exploratory +- Menyusun **contribution statement** yang eksplisit (improvement/comparison/novel) +- Merumuskan **hipotesis H0/H1** yang testable secara statistik +- Memetakan **RQ → Variable → Metric → Data → Analysis** + +> Sub-CPMK 1.4 → Merancang RQ, hypothesis, dan contribution (CPL03) + +--- + +## Bridge dari Bab 3 + +Di Bab 3, Anda telah: +- Menavigasi literatur hingga menemukan **research gap** +- Memvalidasi gap (Performance / Method / Data / Context) +- Menetapkan **baseline** yang valid sebagai titik pembanding + +**Pertanyaan berikutnya:** + +> Dari gap yang teridentifikasi, **pertanyaan apa tepatnya** yang akan Anda jawab? + +Gap adalah masalah yang belum terjawab. RQ adalah **rumusan presisi** dari pertanyaan yang akan dijawab melalui eksperimen. Tanpa RQ yang tajam, eksperimen tidak punya arah. + +--- + +## RQ Formation Model + +*Pipeline dari Problem hingga RQ yang siap dieksperimenkan* + +
+ +**Problem** → Research Gap → Research Question → Hypothesis → **Experiment Design** + +
+ +| Tahap | Output | Ciri Keberhasilan | +|-------|--------|------------------| +| **Problem** | Masalah yang teridentifikasi | Spesifik, terukur (dari Bab 2) | +| **Research Gap** | Celah di literatur | Jenis gap teridentifikasi (dari Bab 3) | +| **Research Question** | Pertanyaan eksplisit | Bisa dijawab melalui eksperimen | +| **Hypothesis** | H0 + H1 | Falsifiable, testable dengan statistik | +| **Experiment Design** | Blueprint eksperimen | Variabel terkontrol, baseline jelas | + +> RQ bukan judul dalam bentuk tanya. RQ adalah **instrumen yang mengarahkan seluruh desain eksperimen**. + +--- + +## Tiga Jenis Research Question + +| Jenis RQ | Pertanyaan Template | Cocok Ketika | +|----------|-------------------|-------------| +| **Comparison** | "Seberapa besar perbedaan metode A vs B pada [metrik] untuk [konteks]?" | Ada dua+ pendekatan yang ingin dibandingkan | +| **Improvement** | "Sejauh mana modifikasi [X] meningkatkan [metrik] dibandingkan baseline?" | Ada celah performa yang ingin diisi | +| **Exploratory** | "Faktor apa yang paling berpengaruh terhadap [variabel] dalam [konteks]?" | Fenomena baru yang mekanismenya belum jelas | + +**Contoh:** +- *Comparison:* "Seberapa besar perbedaan akurasi BERT vs IndoBERT dalam klasifikasi sentimen Bahasa Indonesia pada domain e-commerce?" +- *Improvement:* "Sejauh mana penambahan attention mechanism meningkatkan Recall pada model NER Bahasa Indonesia dibandingkan BiLSTM-CRF baseline?" +- *Exploratory:* "Faktor apa yang paling berpengaruh terhadap latensi inferensi model transformer pada perangkat edge (ARM Cortex-M7)?" + +--- + +## Kriteria RQ yang Baik + +**SMART + Testable:** + +| Kriteria | Penjelasan | Contoh Gagal | Contoh Benar | +|----------|-----------|-------------|-------------| +| **Specific** | Satu masalah, satu konteks | "Bagaimana ML bekerja dalam bisnis?" | "Bagaimana XGBoost vs RF dalam fraud detection transaksi kartu kredit?" | +| **Measurable** | Ada metrik kuantitatif | "Apakah sistem lebih baik?" | "Apakah F1-score meningkat ≥ 5%?" | +| **Achievable** | Bisa dijawab dengan sumber daya yang ada | RQ butuh 10 tahun data | RQ bisa dijawab dalam 1 semester | +| **Relevant** | Terhubung ke gap yang teridentifikasi | RQ tidak ada gap-nya | RQ mengisi Method Gap yang jelas | +| **Testable** | Bisa diuji secara statistik | "Apakah AI itu berguna?" | "Apakah perbedaan signifikan (p<0.05)?" | + +--- + +## Contribution Statement — Tiga Jenis + +Setiap riset harus memiliki **contribution claim** yang eksplisit. + +| Jenis Kontribusi | Definisi | Contoh Kalimat | +|-----------------|---------|---------------| +| **Improvement** | Meningkatkan performa metode yang sudah ada | "Riset ini meningkatkan Recall deteksi fraud dari 72% (baseline XGBoost) menjadi 89% melalui kombinasi SMOTE + cost-sensitive learning" | +| **Comparison** | Menyediakan perbandingan yang belum ada di konteks tertentu | "Riset ini menyediakan perbandingan komprehensif pertama antara 5 algoritma ML pada dataset transaksi perbankan syariah Indonesia" | +| **Novel Approach** | Metode atau kombinasi baru yang belum pernah digunakan | "Riset ini mengusulkan arsitektur hybrid CNN-Transformer dengan attention pruning untuk inferensi on-device dengan parameter 40% lebih sedikit" | + +> Klaim "pertama di dunia" membutuhkan bukti dari systematic literature review yang ketat. Gunakan dengan hati-hati. + +--- + +## Hipotesis: H0 dan H1 + +**H0 (Null Hypothesis):** tidak ada perbedaan / pengaruh signifikan antara kondisi yang dibandingkan + +**H1 (Alternative Hypothesis):** ada perbedaan / pengaruh yang signifikan + +**Syarat hipotesis yang valid:** +1. **Falsifiable** — bisa dibuktikan salah dengan data +2. **Testable** — bisa diuji dengan uji statistik yang tersedia +3. **Specific** — menyebutkan variabel, arah, dan ukuran efek yang diharapkan +4. **Grounded** — berdasarkan teori atau temuan literatur sebelumnya + +**Contoh pair H0/H1:** +> **H0:** Penambahan *attention mechanism* pada BiLSTM tidak meningkatkan F1-score NER secara signifikan (p ≥ 0.05) dibandingkan BiLSTM baseline. +> +> **H1:** Penambahan *attention mechanism* pada BiLSTM meningkatkan F1-score NER secara signifikan (p < 0.05) dibandingkan BiLSTM baseline. + +--- + +## RQ → Variable → Metric → Data → Analysis + +*Rantai operasionalisasi yang tidak boleh putus* + +
+ +**RQ** → Independent Var → Dependent Var → Metric → Data Type → **Statistical Test** + +
+ +**Contoh lengkap:** + +| Elemen | Nilai | +|--------|-------| +| **RQ** | Sejauh mana SMOTE meningkatkan Recall dalam fraud detection? | +| **Independent Variable** | Teknik resampling: tanpa SMOTE vs dengan SMOTE | +| **Dependent Variable** | Kemampuan deteksi fraud | +| **Metric** | Recall, F2-score, AUC-ROC | +| **Data Type** | Ratio scale | +| **Statistical Test** | Paired t-test / Wilcoxon signed-rank | + +> Jika satu elemen tidak terhubung ke elemen lainnya → construct validity rusak. + +--- + + + +# Cognitive Traps +## Bab 4 — RQ & Hypothesis + +--- + +## Cognitive Traps — Bab 4 + +**"RQ = judul penelitian dalam bentuk kalimat tanya"** +Judul bersifat deskriptif. RQ bersifat *operational* — ia mendefinisikan variabel, konteks, dan ukuran keberhasilan. "Bagaimana sistem deteksi fraud berbasis ML?" bukan RQ — tidak ada yang bisa dieksperimenkan. + +**"RQ tidak perlu metric — yang penting pertanyaannya jelas"** +Tanpa metrik, tidak ada cara mengukur apakah RQ berhasil dijawab. RQ harus mengandung atau secara implisit mengarah ke ukuran kuantitatif. + +**"RQ bisa dijawab tanpa eksperimen"** +Jika RQ bisa dijawab hanya dengan membaca buku atau teori, itu bukan RQ penelitian — itu pertanyaan studi literatur. RQ harus membutuhkan data empiris. + +--- + +## Studi Kasus 1 — RQ Terlalu Umum (Basic) + +**RQ awal:** *"Bagaimana deep learning dapat meningkatkan akurasi klasifikasi teks?"* + +**Masalah:** +- Terlalu luas: "deep learning" (ratusan arsitektur), "teks" (semua domain), "akurasi" (metrik tunggal + imbalance risk) +- Tidak ada konteks spesifik +- Tidak ada baseline yang jelas +- Tidak bisa diuji dalam satu semester + +**RQ yang diperbaiki:** *"Sejauh mana fine-tuning IndoBERT pada dataset review produk e-commerce berbahasa Indonesia meningkatkan F1-score klasifikasi sentimen dibandingkan baseline IndoBERT tanpa fine-tuning, dengan distribusi kelas yang seimbang?"* + +**Perbaikan:** domain (e-commerce Indonesia), model spesifik (IndoBERT), metrik (F1-score), baseline (IndoBERT vanilla), kontrol (distribusi kelas). + +--- + +## Studi Kasus 2 — RQ Tanpa Baseline (Advanced) + +**Situasi:** Peneliti ingin meneliti "efektivitas GAN dalam augmentasi data medis." RQ: *"Apakah GAN dapat menghasilkan data medis sintetis yang berguna?"* + +**Masalah:** +- Tidak ada baseline pembanding +- "Berguna" tidak terukur +- Tidak ada metrik kualitas data sintetis yang dispesifikkan +- Tidak ada uji hipotesis yang bisa dirancang + +**RQ yang diperbaiki:** +*"Sejauh mana augmentasi data menggunakan StyleGAN2 meningkatkan F1-score klasifikasi pneumonia pada chest X-ray dibandingkan baseline tanpa augmentasi dan augmentasi tradisional (flip+rotation+brightness), diukur pada dataset ChestX-ray14 dengan split 70/15/15?"* + +**Perbaikan:** Metode GAN spesifik, 2 baseline (tanpa augmentasi + augmentasi tradisional), metrik jelas, dataset dan split terdefinisi. + +--- + +## Ringkasan Pertemuan 4 + +| Konsep | Inti | +|--------|------| +| RQ Formation | Problem → Gap → RQ → Hypothesis → Experiment Design | +| 3 Jenis RQ | Comparison · Improvement · Exploratory | +| Kriteria RQ | SMART + Testable + ada metrik kuantitatif | +| Contribution | Improvement / Comparison / Novel (pilih satu, klaim eksplisit) | +| H0/H1 | Null vs Alternative, falsifiable, testable, specific | +| Operasionalisasi | RQ → IndepVar → DepVar → Metric → DataType → StatTest | + +--- + +## Final Statement & Output Praktis + +
+"Research Question bukan sekadar pertanyaan, tetapi blueprint dari eksperimen yang akan dilakukan." +
+ +### Output Praktis M4 + +Susun **3 dokumen akhir Fase Thinking**: + +1. **Research Question** — 1 RQ yang memenuhi SMART+Testable, sesuai jenis (comparison/improvement/exploratory) +2. **Contribution Statement** — 1–2 kalimat eksplisit tentang kontribusi riset Anda +3. **Hipotesis** — H0 + H1 yang falsifiable, disertai StatTest yang direncanakan + +*Ketiga dokumen ini + Problem Statement (M2) + Gap Statement (M3) = fondasi proposal riset Anda.* + +--- + +## Referensi Utama — Bab 4 + +- Creswell, J. W., & Creswell, J. D. (2018). *Research design: Qualitative, quantitative, and mixed methods approaches* (5th ed.). SAGE Publications. + +- Kitchenham, B. A., Pfleeger, S. L., Pickard, L. M., Jones, P. W., Hoaglin, D. C., El Emam, K., & Rosenberg, J. (2002). Preliminary guidelines for empirical research in software engineering. *IEEE Transactions on Software Engineering, 28*(8), 721–734. + +- Runeson, P., & Höst, M. (2009). Guidelines for conducting and reporting case study research in software engineering. *Empirical Software Engineering, 14*(2), 131–164. + +- Wohlin, C., Runeson, P., Höst, M., Ohlsson, M. C., Regnell, B., & Wesslén, A. (2012). *Experimentation in software engineering*. Springer. diff --git a/slide/slide-05-metrics-measurement.md b/slide/slide-05-metrics-measurement.md new file mode 100644 index 0000000..e327b1a --- /dev/null +++ b/slide/slide-05-metrics-measurement.md @@ -0,0 +1,1448 @@ +--- +marp: true +paginate: true +class: bagian-ii +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 5 — Metric, Measurement & Data + +## Operasionalisasi: Dari Konsep ke Angka yang Bermakna + +*Pertemuan 5 (M5)  |  Sub-CPMK 2.1  |  CPMK02  |  CPL06* + +Fase: **Designing** (M5–M7)  ·  Bagian II: Measurement & Design + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 5 + +1. Bridge dari Fase Thinking — fondasi ke pengukuran +2. Measurement Alignment Model +3. Operasionalisasi: Concept → Variable → Metric +4. Empat skala data: Nominal, Ordinal, Interval, Ratio +5. Kriteria pemilihan metrik +6. Multi-metric evaluation — mengapa satu metrik tidak cukup +7. Data quality: 4 pilar +8. Cognitive Traps & Studi Kasus +9. Output Praktis: Definisi variabel + metrik + tipe data + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Menjelaskan proses **operasionalisasi** dari konsep abstrak ke variabel terukur +- Membedakan 4 skala data dan menentukan **analisis statistik** yang valid per skala +- Memilih metrik yang **representatif, sensitif, dan feasible** sesuai RQ +- Merancang **multi-metric evaluation** yang komprehensif +- Menilai **kualitas data** menggunakan 4 pilar + +> Sub-CPMK 2.1 → Mendefinisikan metrik yang valid dan representatif (CPL06) + +--- + +## Bridge — Dari Fase Thinking ke Designing + +Di Bab 4, Anda menghasilkan: +- **RQ** yang tajam dan testable +- **Hipotesis** H0/H1 yang falsifiable +- **Contribution Statement** yang eksplisit + +**Sekarang pertanyaannya:** Apa tepatnya yang akan **diukur**? + +> "Sistem yang diusulkan memiliki performa lebih baik dibanding baseline." + +- Performa diukur dari apa? +- Akurasi? Precision? Recall? F1? Latency? Throughput? +- Dan jika dipilih akurasi — apakah distribusi datanya seimbang? + +**Keputusan memilih metrik harus dilakukan SEBELUM eksperimen berjalan** — bukan setelah melihat data. *(Wohlin et al., 2012)* + +--- + +## Measurement Alignment Model + +*Setiap angka harus bisa ditelusuri balik dari Problem* + +``` +Problem → Concept → Variable → Metric → Data → Result + ↕ ↕ ↕ ↕ ↕ ↕ +Abstraksi Konsep Operasionalisasi Kuantifikasi Pengumpulan Analisis +``` + +| Transisi | Pertanyaan Kunci | Kegagalan Umum | +|----------|-----------------|----------------| +| Problem → Concept | Konsep apa yang mewakili masalah ini? | Konsep terlalu abstrak | +| Concept → Variable | Bagaimana konsep ini bisa diobservasi? | Variabel tidak merepresentasikan konsep | +| Variable → Metric | Dengan satuan apa diukur? | Metrik tidak sensitif terhadap perubahan | +| Metric → Data | Bagaimana data dikumpulkan? | Bias dalam pengumpulan | +| Data → Result | Analisis statistik apa yang valid? | Asumsi statistik tidak dipenuhi | + +> Jika rantai ini putus di mana saja → **construct validity** rusak. + +--- + +## Operasionalisasi: Dari Konsep ke Angka + +**Contoh operasionalisasi "User Engagement":** + +
+ +**Concept:** User Engagement (abstrak) + +↓ Variable 1: Frekuensi penggunaan  |  Variable 2: Durasi sesi rata-rata  |  Variable 3: Breadth of feature usage + +↓ Metric 1: Jumlah sesi/minggu  |  Metric 2: Durasi rata-rata sesi (menit)  |  Metric 3: Jumlah fitur unik/sesi + +↓ **Data Type:** Ratio | Ratio | Ratio + +
+ +> Keputusan tentang **apa yang mewakili apa** harus **didokumentasikan dan dijustifikasi**. Pembaca harus bisa memahami mengapa variabel ini dipilih (dan bukan variabel lain). + +--- + +## Empat Skala Data + +*(Field, 2018)* + +| Skala | Urutan? | Jarak Seragam? | Nol Absolut? | Contoh | Analisis Valid | +|-------|---------|---------------|-------------|--------|----------------| +| **Nominal** | – | – | – | Jenis browser, bahasa pemrograman | Frekuensi, modus, Chi-square | +| **Ordinal** | ✓ | – | – | Skala Likert, severity bug | Median, percentile, Mann-Whitney | +| **Interval** | ✓ | ✓ | – | Suhu Celsius, skor IQ | Mean, SD, t-test | +| **Ratio** | ✓ | ✓ | ✓ | Waktu respons (ms), akurasi (%), throughput | Semua operasi, termasuk rasio | + +> **Kesalahan paling umum:** memperlakukan **Ordinal** (Likert 1–5) seolah Interval, lalu menghitung rata-rata dan menggunakan t-test. Tidak valid secara statistik kecuali ada justifikasi khusus. + +--- + +## Kriteria Pemilihan Metrik + +Tiga kriteria utama *(Wohlin et al., 2012)*: + +**1. Representatif** — Metrik benar-benar merepresentasikan konsep yang diteliti. +- Jika RQ tentang efektivitas deteksi → Recall lebih representatif daripada Accuracy +- Menggunakan Accuracy untuk dataset imbalance + +**2. Sensitif** — Metrik cukup peka terhadap perubahan variabel independen. +- F1-score sensitif terhadap trade-off precision-recall +- Accuracy pada 99% imbalance tidak sensitif terhadap perubahan model + +**3. Feasible** — Data yang dibutuhkan untuk menghitung metrik bisa diperoleh. +- Metrik yang bisa dihitung dari log sistem +- Metrik yang membutuhkan 10.000 human annotators dalam 1 semester + +--- + +## Multi-Metric Evaluation + +**Mengapa satu metrik tidak cukup?** + +``` +Problem ──→ Concept A ──→ Metric A1 + └──→ Concept B ──→ Metric B1 + └──→ Metric B2 +``` + +| Kasus | Metrik Tunggal | Multi-Metrik | +|-------|---------------|-------------| +| Fraud detection | Accuracy: 98% (menyesatkan) | Recall + Precision + F2 + AUC-ROC | +| Rekomendasi | Precision@K | Precision@K + Diversity + Coverage + Serendipity | +| NLP model | F1-score agregat | F1 per kelas + Confusion Matrix + MCC | +| System performance | Throughput | Throughput + Latency P50/P95/P99 + Error rate | + +> Setiap metrik mengukur satu aspek dari konsep. Gunakan minimal **2–3 metrik yang saling melengkapi** untuk gambaran yang komprehensif. + +--- + +## Data Quality — 4 Pilar + +Data berkualitas buruk menghasilkan hasil yang tidak dapat dipercaya, meskipun metodenya sempurna. + +| Pilar | Definisi | Cara Cek | +|-------|---------|---------| +| **Completeness** | Tidak ada nilai yang hilang secara tidak terduga | % missing values per kolom | +| **Consistency** | Format dan logika data konsisten di seluruh dataset | Cross-field validation | +| **Accuracy** | Data merepresentasikan realitas yang sebenarnya | Bandingkan dengan ground truth / sumber asli | +| **Representativeness** | Distribusi data mencerminkan populasi target | Distribusi kelas, geografi, demografi | + +**Dokumentasi kualitas data** wajib ada dalam laporan: +- Cara pengumpulan data +- Transformasi yang dilakukan +- Missing values: berapa? diapakan? + +--- + + + +# Cognitive Traps +## Bab 5 — Metric & Measurement + +--- + +## Cognitive Traps — Bab 5 + +**"Accuracy adalah metrik universal"** +Accuracy misleading untuk imbalanced dataset. Model yang memprediksi "semua negatif" pada dataset 99% negatif mendapat accuracy 99%. Gunakan Precision, Recall, F1, MCC, atau AUC sesuai konteks. + +**"Metrik dipilih setelah melihat hasil eksperimen"** +Ini adalah *outcome bias* — memilih metrik yang kebetulan menghasilkan nilai terbaik. Metrik harus ditetapkan dalam desain eksperimen, sebelum data dikumpulkan. + +**"Data yang banyak pasti representatif"** +Volume ≠ representativeness. 1 juta record dari satu demografi tidak merepresentasikan populasi yang beragam. Periksa distribusi dan sumber data, bukan hanya ukurannya. + +--- + +## Studi Kasus 1 — Accuracy Imbalance (Basic) + +**Konteks:** Researcher menggunakan dataset fraud (99.5% normal, 0.5% fraud). Hasil: **Accuracy 99.6%**. + +**Masalah:** +- Model memprediksi "semua normal" → accuracy 99.5% (hampir sama dengan "model terbaik") +- Recall fraud: **0%** — tidak satu pun fraud terdeteksi +- Laporan hanya menampilkan accuracy → pembaca tersesat + +| Metrik | Nilai | Interpretasi | +|--------|-------|-------------| +| Accuracy | 99.6% | Tidak bermakna | +| Recall (fraud) | 0% | Gagal total | +| F2-score | 0.00 | Model tidak berguna | +| AUC-ROC | 0.50 | Sama dengan random | + +**Solusi:** Gunakan F2-score, Recall, AUC-ROC. Tambahkan teknik resampling (SMOTE, class weighting). Laporkan semua metrik. + +--- + +## Studi Kasus 2 — User Satisfaction vs System Metric (Advanced) + +**Konteks:** Sistem rekomendasi baru — Precision@10 meningkat dari 72% ke 89%. Tapi user survey score turun. + +**Gap Metrik:** +- Researcher hanya mengukur Precision@10 (teknis) +- User experience: semua rekomendasi mirip (filter bubble), tidak ada kejutan +- Metrik teknis tidak merepresentasikan kepuasan pengguna + +**Pelajaran:** +``` +Technical Metric ≠ User Experience +Precision@10 ≠ User Satisfaction +``` + +**Solusi:** Tambahkan **Beyond-Accuracy Metrics**: +- Diversity (keberagaman rekomendasi) +- Novelty (seberapa baru item yang direkomendasikan) +- Serendipity (kejutan positif) +- Coverage (berapa persen katalog yang bisa direkomendasikan) + +--- + +## Research vs Engineering — Perspektif Measurement + +| Aspek | Engineering | Research | +|-------|------------|---------| +| Memilih metrik | Yang paling mudah dihitung | Yang paling merepresentasikan konsep | +| Performa "bagus" | Lulus acceptance test | Signifikan secara statistik vs baseline | +| Data quality | Cukup untuk demo | Terdokumentasi, justified, reproducible | +| Baseline | Tidak ada (sistem baru) | Wajib ada, dipilih dari literatur | +| Laporan | Metrics terbaik saja | Semua metrics, termasuk yang buruk | + +--- + +## Ringkasan Pertemuan 5 + +| Konsep | Inti | +|--------|------| +| Measurement Alignment | Problem → Concept → Variable → Metric → Data → Result | +| Operasionalisasi | Konsep abstrak → variabel observable → satuan terukur | +| 4 Skala Data | Nominal · Ordinal · Interval · Ratio (menentukan analisis statistik) | +| Pemilihan Metrik | Representatif + Sensitif + Feasible | +| Multi-Metric | 2–3 metrik saling melengkapi; tidak ada metrik universal | +| Data Quality | Completeness + Consistency + Accuracy + Representativeness | + +--- + +## Final Statement & Output Praktis + +
+"Penelitian yang baik bukan hanya mengukur, tetapi memastikan bahwa apa yang diukur benar-benar merepresentasikan realitas." +
+ +### Output Praktis M5 + +Buat **dokumen definisi pengukuran**: + +1. Tabel **Variable Operationalization**: Concept → Variable → Metric → Data Type → Statistical Test +2. **Justifikasi pemilihan metrik** (1 paragraf per metrik utama) +3. **Data quality plan**: bagaimana memastikan 4 pilar kualitas data terpenuhi + +*Dokumen ini menjadi bagian "Metodologi — Pengukuran" dalam proposal riset.* + +--- + +## Referensi Utama — Bab 5 + +- Field, A. (2018). *Discovering statistics using IBM SPSS statistics* (5th ed.). SAGE Publications. + +- Shadish, W. R., Cook, T. D., & Campbell, D. T. (2002). *Experimental and quasi-experimental designs for generalized causal inference*. Houghton Mifflin. + +- Wohlin, C., Runeson, P., Höst, M., Ohlsson, M. C., Regnell, B., & Wesslén, A. (2012). *Experimentation in software engineering*. Springer. + +- Herlocker, J. L., Konstan, J. A., Terveen, L. G., & Riedl, J. T. (2004). Evaluating collaborative filtering recommender systems. *ACM Transactions on Information Systems, 22*(1), 5–53. diff --git a/slide/slide-06-system-design.md b/slide/slide-06-system-design.md new file mode 100644 index 0000000..b207304 --- /dev/null +++ b/slide/slide-06-system-design.md @@ -0,0 +1,1423 @@ +--- +marp: true +paginate: true +class: bagian-ii +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 6 — System Design sebagai Experimental Artifact + +## Sistem sebagai Alat Uji, Bukan Tujuan Akhir + +*Pertemuan 6 (M6)  |  Sub-CPMK 2.2  |  CPMK02  |  CPL06* + +Fase: **Designing** (M5–M7)  ·  Bagian II: Measurement & Design + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 6 + +1. Perubahan paradigma: sistem sebagai alat uji hipotesis +2. System as Experiment Model +3. 4 Prinsip desain sistem riset: Traceability, Modularity, Controllability, Measurability +4. Mapping RQ → System Component +5. Pentingnya control & isolation variabel +6. Dokumentasi arsitektur sebagai bagian metodologi +7. Cognitive Traps & Studi Kasus +8. Output Praktis: Diagram arsitektur + mapping ke variabel + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Menjelaskan perbedaan antara **sistem engineered** dan **sistem sebagai artefak penelitian** +- Memetakan **RQ → System Component** secara eksplisit +- Merancang sistem yang memenuhi **4 prinsip**: Traceability, Modularity, Controllability, Measurability +- Menjelaskan pentingnya **variabel control** dan **isolation** dalam desain eksperimen +- Mendokumentasikan arsitektur sebagai bagian metodologi riset + +> Sub-CPMK 2.2 → Merancang sistem sebagai artefak eksperimen (CPL06) + +--- + +## Perubahan Paradigma Fundamental + +| Pertanyaan | Engineering View | Research View | +|-----------|-----------------|--------------| +| **Untuk apa sistem ini dibangun?** | Agar pengguna bisa menggunakannya | Agar hipotesis bisa diuji | +| **Ukuran keberhasilan utama** | Sistem berjalan sesuai requirement | Hipotesis terjawab secara signifikan | +| **Yang diprioritaskan** | Fitur lengkap, UX bagus | Kontrol variabel, reproducibility | +| **Arsitektur dirancang berdasarkan** | Kebutuhan fungsional | RQ dan variabel eksperimen | +| **Dokumentasi terpenting** | User manual, API docs | Experimental setup, parameter log | + +> "Dalam penelitian, sistem bukan dibangun untuk digunakan, tetapi untuk **membuktikan sesuatu secara ilmiah**." + +--- + +## System as Experiment Model + +*RQ menentukan arsitektur, bukan sebaliknya* + +
+ +**Research Question** ↓ Variable (Independent & Dependent) ↓ System Component (apa yang perlu dibangun?) ↓ Experimental Setup (bagaimana dijalankan?) ↓ **Output / Measured Data** + +
+ +Setiap komponen sistem harus bisa dijawab: **"Komponen ini mendukung variabel/hipotesis yang mana?"** + +--- + +## 4 Prinsip Desain Sistem Riset + +### 1. Traceability — setiap komponen bisa ditelusuri ke RQ + +Setiap modul atau komponen sistem harus punya kaitan eksplisit ke variabel dalam RQ. + +
+ +**RQ:** "Apakah attention mechanism meningkatkan F1-score NER?" +- Modul A: BiLSTM encoder (baseline) +- Modul B: Attention layer (variabel independen) +- Modul C: CRF decoder (output) +- Modul D: Evaluasi F1 per entity (variabel dependen) + +
+ +Jika ada komponen yang tidak bisa ditelusuri ke RQ → pertanyakan apakah komponen itu diperlukan. + +--- + +## 4 Prinsip Desain Sistem Riset (lanjutan) + +### 2. Modularity — komponen yang diuji harus bisa diswap + +Sistem harus dirancang sehingga variabel yang diuji bisa diubah secara independen. + +**Monolith:** Semua logika dalam satu fungsi besar → tidak bisa isolasi perubahan + +**Modular:** Setiap komponen terpisah, bisa diganti tanpa mengubah yang lain + +### 3. Controllability — bisa mengontrol kondisi eksperimen + +Harus bisa mengatur: seed random, hyperparameter, ukuran dataset, split ratio — secara konsisten dan reproducible. + +### 4. Measurability — output bisa langsung diukur + +Output sistem harus langsung menghasilkan data dalam format yang bisa dievaluasi dengan metrik yang sudah didefinisikan. + +--- + +## Mapping RQ → System Component + +*Template traceability matrix* + +| RQ / Hipotesis | Variabel | Komponen Sistem | Cara MengukurNya | +|----------------|---------|----------------|-----------------| +| H1: attention meningkatkan F1 NER | IndepVar: ada/tidaknya attention layer | Modul attention (swappable) | F1 per entity type | +| | DepVar: F1-score NER | Evaluation module | Seqeval library | +| H2: batch size pengaruhi training speed | IndepVar: batch size (16/32/64/128) | Training config (YAML) | Training time per epoch | +| | DepVar: convergence speed | Logger | Loss curve per epoch | + +> **Traceability matrix** ini adalah bagian wajib dari bab Metodologi dalam laporan riset. + +--- + +## Control & Isolation Variabel + +**Prinsip eksperimen ilmiah:** Ubah **satu variabel pada satu waktu**, kontrol semua yang lain. + +**Variabel yang harus dikontrol (contoh ML):** + +| Variabel Kontrol | Cara Mengontrol | +|-----------------|----------------| +| Dataset split | Fixed seed, stratified split | +| Hyperparameter | Config file yang di-version control | +| Hardware | Sama untuk semua eksperimen | +| Random seed | Set di semua library (numpy, torch, sklearn) | +| Data preprocessing | Pipeline identik untuk semua kondisi | +| Jumlah epoch/run | Fixed, sama untuk semua kondisi | + +> Mengubah lebih dari satu variabel dalam satu eksperimen → tidak bisa mengidentifikasi variabel mana yang menyebabkan perubahan output. + +--- + + + +# Cognitive Traps +## Bab 6 — System Design + +--- + +## Cognitive Traps — Bab 6 + +**"Semakin kompleks sistem, semakin besar kontribusi"** +Kompleksitas bukan kontribusi. Sistem sederhana yang terkontrol dengan baik lebih kuat secara ilmiah daripada sistem kompleks yang tidak bisa diisolasi variabelnya. Reviewer menilai kontrol eksperimen, bukan jumlah fitur. + +**"Arsitektur bisa ditentukan setelah RQ"** +Dalam engineering, RQ ≠ yang menentukan arsitektur. Dalam research, RQ **adalah** yang menentukan arsitektur. Desain tanpa traceability ke RQ akan sulit dipertahankan saat sidang. + +**"Sistem monolith lebih mudah, jadi pakai itu saja"** +Monolith tidak bisa diisolasi. Jika Anda tidak bisa mematikan/menghidupkan satu komponen tanpa mengubah yang lain, Anda tidak bisa menguji pengaruh variabel secara independen. + +--- + +## Studi Kasus 1 — Monolith vs Modular (Basic) + +**Konteks:** Model ML untuk text classification. RQ: "Apakah pre-trained embedding meningkatkan F1?" + +**Desain monolith:** +```python +def train_and_evaluate(data): + # 500 baris kode: preprocessing + embedding + model + training + eval + # semua dalam satu fungsi +``` +Masalah: tidak bisa mengisolasi efek embedding. Preprocessing berubah → semua berubah. + +**Desain modular:** +```python +preprocessor = TextPreprocessor(config) # modul terpisah +embedder = EmbeddingLayer(type="pretrained" | "random") # swappable +model = ClassificationModel(embedder) # depend on embedder interface +evaluator = F1Evaluator() # independent +``` + +*Sekarang bisa swap `type="pretrained"` ↔ `type="random"` tanpa mengubah yang lain.* + +--- + +## Studi Kasus 2 — Multiple Feature Change (Advanced) + +**Konteks:** Peneliti melaporkan: "Model baru 15% lebih baik dari baseline." + +**Masalah — terlalu banyak perubahan sekaligus:** +- Menambahkan attention mechanism ✚ +- Mengubah optimizer dari Adam ke AdamW ✚ +- Menambahkan dropout layer ✚ +- Mengubah learning rate schedule ✚ + +Pertanyaan reviewer: *"Peningkatan 15% berasal dari yang mana?"* + +**Pendekatan yang benar: Ablation Study** + +| Eksperimen | Attention | AdamW | Dropout | F1-score | +|-----------|-----------|-------|---------|----------| +| Baseline | – | – | – | 74.2% | +| + Attention | ✓ | – | – | 81.5% (+7.3%) | +| + AdamW | ✓ | ✓ | – | 82.1% (+0.6%) | +| + Dropout | ✓ | ✓ | ✓ | 85.7% (+3.6%) | + +*Sekarang jelas: attention yang berkontribusi terbesar.* + +--- + +## Research vs Engineering — System Design + +| Aspek | Engineering | Research | +|-------|------------|---------| +| Tujuan rancangan | Sistem berfungsi | Hipotesis dapat diuji | +| Kompleksitas | Bisa kompleks jika diperlukan | Sesederhana mungkin agar terkontrol | +| Dokumentasi | User manual | Experimental setup (reproducibility) | +| Perubahan komponen | Untuk perbaikan fitur | Untuk ablation study | +| Evaluasi | Acceptance testing | Uji statistik vs baseline | +| Portability | Nice to have | Wajib (reproducibility) | + +--- + +## Ringkasan Pertemuan 6 + +| Konsep | Inti | +|--------|------| +| Paradigma shift | Sistem **bukan** tujuan → alat uji hipotesis | +| System as Experiment | RQ → Variable → Component → Setup → Output | +| 4 Prinsip | Traceability · Modularity · Controllability · Measurability | +| Mapping RQ | Setiap komponen harus bisa ditelusuri ke variabel | +| Control | Ubah 1 variabel, kontrol semua → ablation study | +| Dokumentasi | Traceability matrix wajib dalam metodologi | + +--- + +## Final Statement & Output Praktis + +
+"Dalam penelitian, sistem bukan dibangun untuk digunakan, tetapi untuk membuktikan sesuatu secara ilmiah." +
+ +### Output Praktis M6 + +Buat **2 dokumen**: + +1. **Diagram Arsitektur Sistem** (Mermaid/draw.io) — annotated dengan label variabel: + - Tandai: `[IndepVar]`, `[DepVar]`, `[Control]` pada setiap komponen +2. **Traceability Matrix** (tabel: RQ/Hipotesis → Variabel → Komponen → Cara Ukur) + +*Dokumen ini menjadi bagian "System Design" dalam bab Metodologi.* + +--- + +## Referensi Utama — Bab 6 + +- Hevner, A. R., March, S. T., Park, J., & Ram, S. (2004). Design science in information systems research. *MIS Quarterly, 28*(1), 75–105. + +- Wieringa, R. J. (2014). *Design science methodology for information systems and software engineering*. Springer. + +- Wohlin, C., Runeson, P., Höst, M., Ohlsson, M. C., Regnell, B., & Wesslén, A. (2012). *Experimentation in software engineering*. Springer. + +- Peffers, K., Tuunanen, T., Rothenberger, M. A., & Chatterjee, S. (2007). A design science research methodology for information systems research. *Journal of Management Information Systems, 24*(3), 45–77. diff --git a/slide/slide-07-experiment-design.md b/slide/slide-07-experiment-design.md new file mode 100644 index 0000000..cbcddc4 --- /dev/null +++ b/slide/slide-07-experiment-design.md @@ -0,0 +1,1455 @@ +--- +marp: true +paginate: true +class: bagian-ii +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 7 — Experimental Design & Validity + +## Membangun Bukti yang Dapat Dipercaya + +*Pertemuan 7 (M7)  |  Sub-CPMK 2.3  |  CPMK02  |  CPL06* + +Fase: **Designing** (M5–M7)  ·  Bagian II: Measurement & Design + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 7 + +1. Tujuan eksperimen: bukan "menjalankan program" +2. Experimental Validity Model +3. Kausalitas vs Korelasi — perbedaan mendasar +4. Empat jenis validitas eksperimen +5. Tiga jenis eksperimen: Comparison, Ablation, Parameter Study +6. Prinsip Controlled Experiment +7. Dokumen Desain Eksperimen — struktur lengkap +8. Cognitive Traps & Studi Kasus +9. Output Praktis: Desain Eksperimen Lengkap + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Menjelaskan perbedaan **kausalitas vs korelasi** dan implikasinya pada klaim riset +- Mendefinisikan 4 jenis **validitas eksperimen**: internal, external, construct, conclusion +- Merancang **controlled experiment** dengan memisahkan variabel independen dan kontrol +- Memilih jenis eksperimen yang tepat: **Comparison, Ablation Study, Parameter Study** +- Menyusun **dokumen desain eksperimen** yang lengkap dan reproducible + +> Sub-CPMK 2.3 → Merancang eksperimen yang valid dan terkontrol (CPL06) + +--- + +## Apa Tujuan Eksperimen? + +**Bukan:** "Menjalankan program dan melihat hasilnya" +**Bukan:** "Mendapatkan angka untuk dimasukkan ke laporan" + +**Ya:** Membangun **bukti empiris** yang menjawab hipotesis secara terkontrol, sehingga klaim dapat diverifikasi oleh peneliti lain. + +
+ +**Hipotesis (H0/H1)** ↓ Rancang kondisi yang mengisolasi variabel ↓ Kumpulkan data di bawah kondisi terkontrol ↓ Analisis statistik ↓ **Kesimpulan dengan tingkat kepercayaan terukur** + +
+ +> Eksperimen yang tidak dirancang dengan baik tidak bisa di-*peer review* — karena tidak ada yang bisa direplikasi. + +--- + +## Experimental Validity Model + +*Pipeline dari RQ ke Kesimpulan yang Valid* + +``` +RQ → Hypothesis → Variable Design → Controlled Experiment + → Data → Analysis → Conclusion (with Validity Level) +``` + +| Tahap | Kegagalan Tipikal | +|-------|------------------| +| Variable Design | Variabel tidak operasional (tidak terukur) | +| Controlled Experiment | Terlalu banyak variabel berubah sekaligus | +| Data | Tidak representatif, bias sampling | +| Analysis | Asumsi statistik dilanggar | +| Conclusion | Overgeneralisasi dari satu dataset | + +> Setiap kegagalan di satu tahap merusak validitas seluruh rantai. + +--- + +## Kausalitas vs Korelasi + +**Korelasi:** Dua variabel berubah bersamaan — tidak ada klaim tentang sebab-akibat. + +**Kausalitas:** Variabel A menyebabkan perubahan pada variabel B — membutuhkan kontrol eksperimental. + +| | Korelasi | Kausalitas | +|--|----------|-----------| +| **Claim** | "A dan B berhubungan" | "A menyebabkan B" | +| **Bukti** | Observasi | Controlled Experiment | +| **Ancaman** | Spurious correlation, confounders | Lebih sulit dipastikan, tapi lebih kuat | +| **Contoh riset TI** | "Model dengan lebih banyak parameter punya akurasi lebih tinggi" | "Menambahkan attention mechanism (dengan kondisi lain dikontrol) meningkatkan F1-score" | + +> Banyak paper TI mengklaim kausalitas berdasarkan korelasi. Validitas klaim bergantung pada kualitas desain eksperimen. + +--- + +## Empat Jenis Validitas Eksperimen + +*(Shadish, Cook & Campbell, 2002)* + +| Validitas | Pertanyaan | Ancaman Utama | Cara Memperkuat | +|-----------|-----------|--------------|----------------| +| **Internal** | Apakah hubungan kausal benar? | Confounders, history effect | Randomisasi, kontrolling variabel | +| **External** | Bisa digeneralisasi ke populasi lain? | Single dataset, narrow scope | Multiple dataset, diverse contexts | +| **Construct** | Kita mengukur konsep yang tepat? | Metrik tidak representatif | Justifikasi operasionalisasi | +| **Conclusion** | Bukti statistik cukup? | Underpowered test, alpha ≠ 0.05 | Power analysis, laporan effect size | + +> Setiap eksperimen menghadapi trade-off antar jenis validitas. Dokumentasikan dan akui keterbatasannya secara eksplisit. + +--- + +## Tiga Jenis Eksperimen + +### 1. Comparison Experiment +**Tujuan:** Membandingkan dua atau lebih metode/kondisi +**Contoh:** "BERT vs IndoBERT vs mBERT untuk sentimen Bahasa Indonesia" +**Persyaratan:** Semua metode diuji pada **kondisi yang identik** + +### 2. Ablation Study +**Tujuan:** Mengidentifikasi kontribusi setiap komponen terhadap performa keseluruhan +**Contoh:** "Full model vs tanpa attention vs tanpa dropout vs tanpa pretrained" +**Persyaratan:** Satu komponen dihilangkan per eksperimen + +### 3. Parameter Study +**Tujuan:** Menentukan nilai optimal untuk hyperparameter tertentu +**Contoh:** "Learning rate: 1e-3, 1e-4, 1e-5 → mana yang optimal?" +**Persyaratan:** Satu parameter bervariasi, semua yang lain dikontrol + +--- + +## Prinsip Controlled Experiment + +**Aturan Emas: Ubah SATU variabel, kontrol SEMUA yang lain** + +**Checklist desain controlled experiment:** + +| Item | Pertanyaan | Jawaban Anda | +|------|-----------|-------------| +| Random seed | Apakah seed ditetapkan untuk semua library? | `seed=42` di numpy, torch, sklearn | +| Dataset split | Apakah split identik untuk semua kondisi? | Stratified split, fixed index | +| Preprocessing | Apakah pipeline preprocessing sama? | Shared preprocessing module | +| Hardware | Apakah hardware sama untuk semua kondisi? | Catat GPU, RAM, OS | +| Evaluation | Apakah metrik dihitung dengan cara yang sama? | Shared evaluation module | +| Number of runs | Apakah diulang untuk statistical stability? | Minimal 5 runs, laporkan mean ± std | + +--- + +## Dokumen Desain Eksperimen — Struktur + +*Template yang wajib ada sebelum eksperimen dimulai:* + +``` +1. TUJUAN EKSPERIMEN + - RQ yang akan dijawab + - Hipotesis yang diuji (H0/H1) + +2. VARIABEL + - Independent: [nama, nilai yang diuji] + - Dependent: [nama, metrik, cara ukur] + - Control: [nama, nilai yang dikontrol] + +3. SKENARIO EKSPERIMEN + - Skenario 1: [kondisi] → [apa yang berubah] + - Skenario 2: ... + +4. DATA + - Dataset: [nama, sumber, split ratio, jumlah] + - Preprocessing: [langkah-langkah] + +5. VALIDITY THREATS & MITIGATION + - Internal: [ancaman] → [mitigasi] + - External: [ancaman] → [mitigasi] +``` + +--- + + + +# Cognitive Traps +## Bab 7 — Experimental Design + +--- + +## Cognitive Traps — Bab 7 + +**"Eksperimen = menjalankan program dan mencatat hasilnya"** +Eksperimen ilmiah membutuhkan: hipotesis yang ditetapkan sebelumnya, variabel yang terisolasi, kondisi yang dikontrol, dan jumlah run yang cukup untuk analisis statistik. + +**"Korelasi itu sudah cukup untuk klaim kausalitas"** +Korelasi hanya menunjukkan hubungan. Kausalitas membutuhkan isolasi variabel melalui controlled experiment. Tanpa kontrol, tidak ada yang bisa menjamin yang mana penyebabnya. + +**"Baseline tidak perlu fair — yang penting ada pembanding"** +Baseline yang tidak fair (versi lama, kondisi berbeda, hiperparameter tidak optimal) itu merugikan pembaca. Reviewer akan menolak paper dengan baseline yang unfair. + +--- + +## Studi Kasus 1 — Eksperimen Tanpa Kontrol (Basic) + +**Konteks:** Peneliti membandingkan model A (baru) vs model B (baseline). + +**Masalah — tidak terkontrol:** +- Model A dilatih lebih lama (100 epoch vs 50 epoch) +- Model A menggunakan data preprocessing yang lebih agresif +- Dataset split berbeda +- Hardware berbeda (GPU vs CPU) + +**Hasil:** Model A lebih baik 12%. Tapi **mengapa?** Tidak bisa diketahui. + +**Solusi — controlled comparison:** +| Item | Model A | Model B | +|------|---------|---------| +| Epoch | 50 | 50 | +| Preprocessing | Identik | Identik | +| Dataset split | Fixed seed 42 | Fixed seed 42 | +| Hardware | GPU RTX 3090 | GPU RTX 3090 | + +*Sekarang perbedaan performa bisa dikaitkan ke variabel yang benar-benar berbeda.* + +--- + +## Studi Kasus 2 — Baseline Tidak Fair (Advanced) + +**Konteks:** Paper mengklaim metode baru 23% lebih baik. Baseline: BERT 2019. + +**Masalah:** +- BERT 2019 tanpa fine-tuning vs metode baru dengan fine-tuning → tidak fair +- Baseline diuji pada dataset yang berbeda dari yang digunakan untuk training +- Hyperparameter baseline menggunakan default tanpa tuning + +**Pertanyaan reviewer:** "Apakah 23% benar-benar karena metode baru, atau karena baseline-nya dipersiapkan dengan buruk?" + +**Standar fair comparison:** +1. Semua metode di-fine-tune dengan kondisi identik +2. Hyperparameter baseline di-tune setidaknya dengan grid search +3. Dataset split identik +4. Evaluasi dengan metrik yang sama +5. Multiple runs (5+) → laporkan mean ± std + +--- + +## Research vs Engineering — Experimental Design + +| Aspek | Engineering | Research | +|-------|------------|---------| +| Pengujian | Functional testing, UAT | Controlled experiment dengan statistik | +| Jumlah run | 1 run (jika berhasil, selesai) | Multiple runs (minimal 5 untuk stat) | +| Baseline | Tidak ada (sistem baru) | Wajib, fair, state-of-the-art | +| Variabel | Semua bisa berganti | Satu berganti, semua lain dikontrol | +| Kegagalan | Diperbaiki | Dilaporkan dan dianalisis | +| Dokumentasi | "Sistem sudah jalan" | Reproducible setup untuk replikasi | + +--- + +## Ringkasan Pertemuan 7 + +| Konsep | Inti | +|--------|------| +| Tujuan Eksperimen | Membangun bukti empiris yang reproducible — bukan sekadar menjalankan program | +| Kausalitas vs Korelasi | Kausalitas butuh kontrol experimental; korelasi hanya observasi | +| 4 Validitas | Internal · External · Construct · Conclusion | +| 3 Jenis Eksperimen | Comparison · Ablation Study · Parameter Study | +| Controlled Experiment | Ubah 1 variabel, kontrol semua yang lain | +| Dokumen Desain | RQ → Variabel → Skenario → Data → Validity Threats | + +--- + +## Final Statement & Output Praktis + +
+"Eksperimen bukan sekadar menjalankan sistem, tetapi membangun bukti yang dapat dipercaya." +
+ +### Output Praktis M7 + +Buat **Dokumen Desain Eksperimen** yang mencakup: + +1. Tujuan eksperimen & hipotesis yang diuji +2. Tabel variabel (independent, dependent, control) +3. Skenario eksperimen (minimal 2 skenario) +4. Spesifikasi dataset (split, ukuran, sumber) +5. Validity threats & strategi mitigasi +6. Statistical test yang direncanakan (+ alpha level) + +*Dokumen ini = bab Metodologi bagian "Experiment Design" dalam laporan riset.* + +--- + +## Referensi Utama — Bab 7 + +- Shadish, W. R., Cook, T. D., & Campbell, D. T. (2002). *Experimental and quasi-experimental designs for generalized causal inference*. Houghton Mifflin. + +- Wohlin, C., Runeson, P., Höst, M., Ohlsson, M. C., Regnell, B., & Wesslén, A. (2012). *Experimentation in software engineering*. Springer. + +- Ko, A. J., LaToza, T. D., & Burnett, M. M. (2015). A practical guide to controlled experiments of software engineering tools with human participants. *Empirical Software Engineering, 20*(1), 110–141. + +- Juristo, N., & Moreno, A. M. (2001). *Basics of software engineering experimentation*. Springer. diff --git a/slide/slide-08-proposal-checkpoint.md b/slide/slide-08-proposal-checkpoint.md new file mode 100644 index 0000000..ba865fb --- /dev/null +++ b/slide/slide-08-proposal-checkpoint.md @@ -0,0 +1,1399 @@ +--- +marp: true +paginate: true +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 8 — Proposal & Checkpoint +## Integrasi Fase Thinking + Designing + +*Pertemuan 8 (M8)  |  Bab Integratif  |  UTS Checkpoint* + +Fase: **Integratif** (M8) — merangkum Bab 1–7 ke dalam Proposal Riset + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Tujuan Pertemuan 8 + +Bab ini **berbeda** dari pertemuan biasa. Tidak ada konsep baru. + +Tujuan: mengintegrasikan seluruh output M1–M7 menjadi **satu dokumen proposal riset yang koheren**. + +> Proposal bukan kumpulan tugas dari 7 pertemuan yang ditempelkan bersama. +> Proposal adalah **argumen ilmiah yang utuh** — tiap bagian menjawab satu pertanyaan, +> dan bersama-sama membuktikan bahwa riset Anda layak dan feasible. + +**Di akhir pertemuan ini, Anda memiliki:** +- Dokumen proposal riset lengkap (8 bagian) +- Kemampuan mengidentifikasi inkonsistensi antar bagian +- Kesiapan untuk mempresentasikan dan mempertahankan proposal + +--- + +## Integration Map — Bab 1 sampai 7 + +*Semua output dari 7 pertemuan harus saling terhubung* + +
+ +**[Bab 1]** Research Mindset → Etika & Validitas + +**[Bab 2]** Problem Statement + **[Bab 3]** Literature & Gap → **[Bab 4]** RQ + H0/H1 + Contribution + +↓ **[Bab 5]** Variabel + Metrik + Tipe Data + +↓ **[Bab 6]** Arsitektur Sistem (traceability ke variabel) + +↓ **[Bab 7]** Desain Eksperimen (skenario + controlled + validity) + +↓ **PROPOSAL RISET** (dokumen terintegrasi) + +
+ +--- + +## Anatomi Proposal Riset — 8 Bagian + +| No | Bagian | Sumber dari Bab | Pertanyaan yang Dijawab | +|----|--------|----------------|------------------------| +| 1 | **Latar Belakang** | Bab 2 + Bab 3 | Mengapa masalah ini penting dan belum terjawab? | +| 2 | **Rumusan Masalah** | Bab 2 | Apa tepatnya yang akan diteliti? | +| 3 | **Tinjauan Pustaka** | Bab 3 | Apa yang sudah diketahui dan apa gap-nya? | +| 4 | **Research Question** | Bab 4 | Pertanyaan apa yang akan dijawab? | +| 5 | **Kontribusi** | Bab 4 | Apa yang baru dari riset ini? | +| 6 | **Metodologi** | Bab 5 + 6 + 7 | Bagaimana hipotesis akan diuji? | +| 7 | **Jadwal & Sumber Daya** | Bab 7 | Apakah feasible dalam satu semester? | +| 8 | **Referensi** | Semua bab | APA 7th, min. 15 referensi | + +--- + +## Koherensi Vertikal — Konsistensi antar Bagian + +*Setiap bagian harus konsisten dengan semua bagian yang lain* + +**Cek 1: Problem ↔ RQ** +> Problem: "Tidak ada studi tentang efektivitas SMOTE di dataset fraud perbankan syariah Indonesia" +> RQ: "Apakah SMOTE meningkatkan Recall dalam deteksi fraud di dataset perbankan syariah Indonesia?" +> Konsisten — RQ menjawab secara langsung gap yang disebutkan di Problem + +**Cek 2: RQ ↔ Metodologi** +> RQ: "...meningkatkan Recall..." +> Metodologi: mengukur Accuracy dan Precision saja +> Inkonsisten — Recall harus menjadi metrik utama + +**Cek 3: Hipotesis ↔ Statistical Test** +> H1: "perbedaan signifikan (p < 0.05)" +> Statistical plan: visualisasi grafik saja +> Inkonsisten — butuh t-test atau Wilcoxon + +--- + +## Koherensi Horizontal — Argumen yang Mengalir + +Proposal harus bisa dibaca sebagai satu narasi, bukan kumpulan potongan: + +**Alur argumentasi yang baik:** + +
+ +"Di bidang X, masalah Y terjadi karena Z. *[Latar Belakang]* Studi-studi sebelumnya telah mencoba A, B, C, namun belum ada yang... *[Tinjauan Pustaka]* Oleh karena itu, riset ini bertanya: *[RQ]* Kontribusi yang diharapkan adalah *[Contribution]*. Untuk membuktikan hipotesis H1, kami merancang eksperimen dengan *[metodologi]* yang mengukur *[metrik]* terhadap baseline *[X]*." + +
+ +> Jika pembaca bisa mengikuti argumen ini tanpa tersesat → proposal koheren. + +--- + + + +# Cognitive Traps +## Proposal & Integrasi + +--- + +## Cognitive Traps — Bab 8 + +**"Proposal = kumpulan tugas dari bab sebelumnya yang di-paste"** +Proposal adalah dokumen baru yang menulis ulang semua elemen dalam alur argumentasi yang koheren. Copy-paste tugas per bab tanpa koneksi menghasilkan proposal yang patchwork — tidak lulus. + +**"Copy-paste methodology dari paper lain"** +Metodologi harus spesifik untuk RQ Anda, bukan template umum. Reviewer tahu ketika metodologi generik tidak sesuai dengan RQ yang diklaim. + +**"Jadwal: semua selesai di bulan terakhir"** +Jadwal yang tidak realistis adalah red flag. Setiap tahap (implementasi, pengambilan data, analisis, penulisan) butuh buffer waktu. Gagal dalam satu tahap akan mempengaruhi semua yang berikutnya. + +**"Tidak ada kemungkinan gagal"** +Proposal yang tidak mengidentifikasi risiko kegagalan tidak realistis. Selalu sertakan: "Jika kondisi X tidak tercapai, rencana alternatifnya adalah Y." + +--- + +## Template Integrasi — Self-Check Proposal + +
+ +**Gunakan checklist ini sebelum mengumpulkan proposal:** + +- [ ] Problem Statement sudah divalidasi dengan 5 kriteria kualitas (Bab 2) +- [ ] Literature review berisi ≥ 15 referensi dengan gap yang teridentifikasi (Bab 3) +- [ ] RQ spesifik, measurable, dan testable (Bab 4) +- [ ] Contribution claim eksplisit (improvement/comparison/novel) (Bab 4) +- [ ] H0/H1 yang falsifiable disertai statistical test yang direncanakan (Bab 4) +- [ ] Variabel + metrik + justifikasi terdokumentasi (Bab 5) +- [ ] Arsitektur sistem dengan traceability ke variabel (Bab 6) +- [ ] Dokumen desain eksperimen lengkap (skenario, controlled, validity threats) (Bab 7) +- [ ] Koherensi: Problem ↔ RQ ↔ Metodologi ↔ Metrik +- [ ] Jadwal realistis dengan buffer untuk setiap fase + +
+ +--- + +## Rubrik Evaluasi Proposal + +| Kriteria | Bobot | Level 1 (Lemah) | Level 2 (Cukup) | Level 3 (Kuat) | +|----------|-------|----------------|----------------|----------------| +| **Kejelasan masalah & gap** | 25% | Topik, bukan masalah | Masalah ada, gap kurang jelas | Problem + gap + validation | +| **Ketajaman RQ & Hipotesis** | 25% | RQ terlalu umum | RQ spesifik, hipotesis ada | RQ SMART, H0/H1 falsifiable | +| **Kelengkapan metodologi** | 30% | Deskripsi alat saja | Ada metrik, desain eksperimen parsial | Controlled, variabel terisolasi, validity | +| **Koherensi argumen** | 20% | Tiap bagian berdiri sendiri | Ada kesatuan tapi ada inkonsistensi | Alir argumen mulus Problem→Conclusion | + +--- + +## Struktur Presentasi Proposal (10 menit) + +**Slide 1:** Judul + nama + institusi (30 detik) + +**Slide 2:** Latar Belakang + Masalah (2 menit) +- Fenomena nyata + data pendukung +- Apa yang sudah ada dan apa gap-nya + +**Slide 3:** RQ + Contribution (1.5 menit) +- Satu kalimat RQ yang tajam +- Satu kalimat contribution yang eksplisit + +**Slide 4:** Metodologi ringkas (3 menit) +- Workflow eksperimen +- Variabel (indep, dep, control) +- Metrik + statistical test + +**Slide 5:** Jadwal + Ekspektasi Hasil (1 menit) + +**Q&A:** 5–10 menit + +--- + +## Pertanyaan yang Sering Diajukan Penguji + +**Tentang Problem:** +*"Mengapa masalah ini penting? Siapa yang dirugikan jika tidak diselesaikan?"* + +**Tentang RQ:** +*"Apakah RQ ini sudah ada jawabannya di paper yang Anda sitasi?"* + +**Tentang Metodologi:** +*"Mengapa memilih metrik X, bukan Y?"* +*"Bagaimana Anda memastikan baseline-nya fair?"* + +**Tentang Feasibility:** +*"Apakah dataset ini tersedia secara publik? Berapa ukurannya?"* +*"Bagaimana jika H0 tidak ditolak?"* + +> Persiapkan jawaban berbasis **data dan referensi** untuk setiap pertanyaan ini. + +--- + +## Ringkasan Pertemuan 8 + +| Elemen | Status di Proposal Anda | +|--------|------------------------| +| Problem Statement (Bab 2) | Tertulis dalam Latar Belakang + Rumusan Masalah | +| Gap Statement (Bab 3) | Tertulis dalam Tinjauan Pustaka | +| RQ + H0/H1 (Bab 4) | Bagian RQ + Hipotesis | +| Variabel + Metrik (Bab 5) | Bagian Metodologi — Pengukuran | +| Arsitektur Sistem (Bab 6) | Bagian Metodologi — Desain Sistem | +| Desain Eksperimen (Bab 7) | Bagian Metodologi — Eksperimen | +| Integratif Bab 8 | Koherensi seluruh dokumen | + +--- + +## Output: Proposal Riset Lengkap + +
+"Proposal bukan kumpulan output, tetapi argumen yang utuh dan koheren tentang mengapa riset ini layak dan bagaimana ia akan dilaksanakan." +
+ +### Submission M8 + +**Dokumen proposal riset lengkap** (min. 15 halaman): + +1. Latar Belakang · 2. Rumusan Masalah · 3. Tinjauan Pustaka · 4. RQ & Hipotesis +5. Contribution · 6. Metodologi (Sistem + Metric + Eksperimen) · 7. Jadwal · 8. Referensi + +*Self-check dengan checklist 10 item sebelum dikumpulkan. Presentasi 10 menit pada saat UTS.* + +--- + +## Referensi Utama — Bab 8 + +- Creswell, J. W., & Creswell, J. D. (2018). *Research design: Qualitative, quantitative, and mixed methods approaches* (5th ed.). SAGE Publications. + +- Wieringa, R. J. (2014). *Design science methodology for information systems and software engineering*. Springer. + +- Wohlin, C., Runeson, P., Höst, M., Ohlsson, M. C., Regnell, B., & Wesslén, A. (2012). *Experimentation in software engineering*. Springer. + +- Kitchenham, B. A., & Pfleeger, S. L. (2002). Principles of survey research part 2: Designing a survey. *ACM SIGSOFT Software Engineering Notes, 27*(1), 18–20. diff --git a/slide/slide-09-implementation-environment.md b/slide/slide-09-implementation-environment.md new file mode 100644 index 0000000..7574dc3 --- /dev/null +++ b/slide/slide-09-implementation-environment.md @@ -0,0 +1,1458 @@ +--- +marp: true +paginate: true +class: bagian-iii +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 9 — Implementation & Environment + +## Reproducibility sebagai Standar Ilmiah + +*Pertemuan 9 (M9)  |  Sub-CPMK 3.1  |  CPMK03  |  CPL06* + +Fase: **Executing** (M9–M11)  ·  Bagian III: Execution + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 9 + +1. Bridge dari Fase Designing — dari desain ke implementasi +2. Reproducible Implementation Model +3. Implementasi riset ≠ coding biasa +4. Kontrol lingkungan: hardware, OS, library, seed +5. Repeatability vs Reproducibility — perbedaan penting +6. Dokumentasi wajib: setup, parameter, dataset +7. Best practices: version control, config logging, isolation +8. Cognitive Traps & Studi Kasus +9. Output Praktis: Documentation Setup + README + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Menjelaskan perbedaan antara **repeatability** dan **reproducibility** +- Mengidentifikasi semua komponen **environment** yang harus dikontrol +- Mengimplementasikan **version control** dan **config logging** untuk eksperimen +- Membuat **dokumentasi setup** yang memungkinkan orang lain mereplikasi eksperimen +- Membuat **README eksperimen** yang standar + +> Sub-CPMK 3.1 → Mengimplementasikan eksperimen dengan kontrol reproducibility (CPL06) + +--- + +## Bridge dari Fase Designing + +Di Fase Designing (Bab 5–7), Anda merancang: +- Variabel yang akan diukur (Bab 5) +- Arsitektur sistem yang terkontrol (Bab 6) +- Desain eksperimen lengkap dengan skenario (Bab 7) + +**Sekarang: Fase Executing dimulai.** + +> Kualitas implementasi menentukan apakah desain eksperimen yang sudah baik bisa menghasilkan data yang **valid dan reproducible**. + +Implementasi yang buruk (tanpa dokumentasi, tanpa version control, tanpa environment isolation) bisa merusak eksperimen yang desainnya sempurna. + +--- + +## Reproducible Implementation Model + +*Dari desain eksperimen ke hasil yang bisa dipercaya* + +
+ +**Experiment Design** ↓ Implementation ↓ Environment Setup (dikontrol & didokumentasikan) ↓ Execution Consistency (setiap run identik) ↓ Reproducibility (orang lain bisa mereplikasi) ↓ **Trustworthy Result** + +
+ +> Jika eksperimen tidak bisa direplikasi oleh peneliti lain → hasilnya tidak bisa dipercaya secara ilmiah, terlepas dari seberapa bagus angkanya. + +--- + +## Implementasi Riset ≠ Coding Biasa + +| Aspek | Coding Biasa | Implementasi Riset | +|-------|-------------|-------------------| +| **Tujuan** | Sistem berfungsi | Eksperimen dapat direplikasi | +| **Konfigurasi** | Hardcoded dalam kode | Dipisah dalam config file (YAML/JSON) | +| **Random seed** | Diabaikan | Ditetapkan dan di-log | +| **Versi library** | "Yang terbaru" | Dikunci (requirements.txt/conda env) | +| **Hasil** | "Jalan, selesai" | Di-log lengkap, timestamped | +| **Dokumentasi** | Minimal | Wajib, cukup detail untuk replikasi | + +**Prinsip:** Jika Anda menjalankan ulang kode Anda sendiri 6 bulan kemudian dan hasilnya berbeda → reproducibility gagal. + +--- + +## Komponen Environment yang Harus Dikontrol + +*Semuanya didokumentasikan, semuanya di-version control* + +
+ +- **Hardware:** CPU/GPU (model, RAM, VRAM) +- **OS:** Ubuntu 20.04 / Windows 11 (versi spesifik) +- **Language:** Python 3.10.12 (bukan "Python 3") +- **Framework:** PyTorch 2.1.0 / TensorFlow 2.13.0 +- **Libraries:** numpy 1.24.3, scikit-learn 1.3.0, transformers 4.35.0 +- **Dataset:** nama, sumber URL, tanggal diunduh, checksum (MD5/SHA256) +- **Random Seed:** seed=42 — set di semua library +- **Config:** hyperparameter dalam config.yaml (tidak hardcoded) + +
+ +**Tool:** `conda env export > environment.yml` atau `pip freeze > requirements.txt` + +--- + +## Repeatability vs Reproducibility + +| | Repeatability | Reproducibility | +|-|--------------|----------------| +| **Definisi** | Hasil sama oleh **peneliti yang sama** di kondisi yang sama | Hasil sama oleh **peneliti berbeda** dari deskripsi metode | +| **Standar** | Minimum — harus dicapai | Target — yang membuat sains berkembang | +| **Syarat** | Kode + environment + data tersedia | Kode + environment + data + dokumentasi terbuka | +| **Gagal karena** | Seed tidak di-set, library berbeda | Dokumentasi tidak cukup, data tidak publik | + +**Dalam laporan riset:** +- Reportkan mean ± std dari multiple runs (minimal 5) → menunjukkan repeatability +- Sertakan kode + environment file → memungkinkan reproducibility + +--- + +## Best Practices: Version Control untuk Eksperimen + +### Git untuk Kode + +```bash +# Setiap eksperimen = branch tersendiri +git checkout -b exp/03-attention-mechanism +git commit -m "Exp03: baseline BiLSTM+CRF untuk NER" + +# Tag untuk eksperimen yang final +git tag exp-03-final +``` + +### Logging Eksperimen + +Setiap run harus menghasilkan log yang berisi: + +``` +timestamp: 2026-04-13 09:15:32 +experiment_id: exp-03 +model: BiLSTM+CRF +config: config_03.yaml +dataset: CoNLL2003, split=42 +random_seed: 42 +result: {f1: 0.872, precision: 0.889, recall: 0.856} +duration: 1h23m +hardware: RTX 3090, 24GB VRAM +``` + +--- + +## Template README Eksperimen + +```markdown +# Eksperimen [N]: [Nama Eksperimen] + +## Tujuan +[Menguji hipotesis apa? Terkait RQ mana?] + +## Environment +- Python 3.10.12 +- PyTorch 2.1.0 +- CUDA 11.8 +- GPU: NVIDIA RTX 3090 + +## Setup +```bash +conda env create -f environment.yml +conda activate rti-exp +``` + +## Cara Menjalankan +```bash +python train.py --config configs/exp_03.yaml +``` + +## Hasil Terakhir +| Run | F1 | Precision | Recall | +|-----|-----|-----------|--------| +| 1 | 87.2% | 88.9% | 85.6% | +| ... | | | | +| Mean ± Std | 87.1 ± 0.3% | | | + +## Catatan +[Anomali, variasi, observasi penting selama eksekusi] +``` + +--- + + + +# Cognitive Traps +## Bab 9 — Implementation & Environment + +--- + +## Cognitive Traps — Bab 9 + +**"Kode sudah jalan, dokumentasi bisa dibuat nanti"** +Dokumentasi yang dibuat setelah eksperimen sering tidak lengkap — detail kecil yang kritis (versi library, seed, preprocessing decision) sudah terlupakan. Dokumentasi harus **bersamaan dengan implementasi**. + +**"Environment = install library yang diperlukan"** +Environment yang tidak terdokumentasi berarti "pip install terbaru" — dan library berubah versi. Satu perbedaan versi library bisa mengubah hasil secara signifikan. + +**"Satu run sudah cukup — hasilnya sudah bagus"** +Satu run tidak bisa membuktikan stabilitas. Variance antar run bisa besar. Minimal 5 run dengan fixed seed berbeda, laporkan mean ± std. + +--- + +## Studi Kasus 1 — Implementasi Tidak Reproducible (Basic) + +**Konteks:** Mahasiswa A mengirimkan kode ke dosen. Dosen menjalankan kode tersebut — hasilnya berbeda 12% dari yang dilaporkan. + +**Penyebab:** +- Library tidak di-lock (transformers versi beda → tokenizer berubah) +- Random seed tidak di-set → augmentasi data berbeda setiap run +- Preprocessing ada operasi random (shuffle tanpa seed) +- Config disimpan di dalam fungsi, tidak di file terpisah + +**Dampak:** Hasil tidak bisa diverifikasi → laporan tidak diterima. + +**Checklist reproducibility:** +- [ ] `requirements.txt` / `environment.yml` tersedia +- [ ] Semua random seed ditetapkan +- [ ] Config dipisah dari kode +- [ ] README berisi langkah menjalankan dari awal + +--- + +## Studi Kasus 2 — Library Version Mismatch (Advanced) + +**Konteks:** Paper melaporkan F1 = 94.2% menggunakan `scikit-learn`. Peneliti lain mencoba mereplikasi: F1 = 91.8%. + +**Investigasi:** +| Komponen | Paper | Replikasi | +|---------|-------|----------| +| scikit-learn | 0.24.2 | 1.3.0 | +| Implementasi `F1-score` | macro average | micro average (default berubah) | +| Preprocessing | StandardScaler | Sama | + +**Penyebab:** Perubahan default parameter `average` di `sklearn.metrics.f1_score` antara versi 0.24 dan 1.x. + +**Dampak:** 3 bulan upaya replikasi, hasilnya tetap tidak bisa dicocokkan. + +**Pelajaran:** Lock versi library. Sebutkan versi dalam paper. Gunakan checksum dataset. + +--- + +## Research vs Engineering — Implementation + +| Aspek | Engineering | Research | +|-------|------------|---------| +| Kode | Fungsional | Fungsional + reproducible | +| Config | Bisa hardcoded | Harus dieksternalisasi | +| Versi library | "Yang terbaru" | Di-lock dalam environment file | +| Random seed | Opsional | Wajib, didokumentasikan | +| Logging | Debug logging | Experiment logging (ID, params, result, time) | +| Dokumentasi | README basic | README eksperimen (langkah-langkah detail) | + +--- + +## Ringkasan Pertemuan 9 + +| Konsep | Inti | +|--------|------| +| Reproducible Implementation | Design → Implementation → Environment → Consistency → Reproducibility | +| Kontrol Environment | Hardware + OS + Python version + Library versions + Dataset checksum | +| Repeatability vs Reproducibility | Same researcher (min) vs different researcher (target) | +| Version Control | Branch per eksperimen, tag versi final | +| Logging | Setiap run: timestamp, config, result, hardware | +| README Eksperimen | Cukup detail untuk orang lain jalankan dari awal | + +--- + +## Final Statement & Output Praktis + +
+"Implementasi yang baik bukan yang paling cepat, tetapi yang menghasilkan hasil yang bisa dipercaya dan diverifikasi." +
+ +### Output Praktis M9 + +Buat **2 dokumen**: + +1. **Documentation Setup** — environment.yml / requirements.txt + semua konfigurasi eksperimen +2. **README Eksperimen** — langkah setup sampai menjalankan, annotated dengan tujuan tiap langkah + +*Dokumen ini menjadi Appendix "Experiment Reproducibility" dalam laporan riset.* + +--- + +## Referensi Utama — Bab 9 + +- Pineau, J., Vincent-Lamarre, P., Sinha, K., Larivière, V., Beygelzimer, A., d'Alché-Buc, F., Fox, E., & Larochelle, H. (2021). Improving reproducibility in machine learning research. *Journal of Machine Learning Research, 22*(1), 7459–7478. + +- Stodden, V., McNutt, M., Bailey, D. H., Deelman, E., Gil, Y., Hanson, B., Heroux, M. A., Ioannidis, J. P. A., & Taufer, M. (2016). Enhancing reproducibility for computational methods. *Science, 354*(6317), 1240–1241. + +- Wohlin, C., Runeson, P., Höst, M., Ohlsson, M. C., Regnell, B., & Wesslén, A. (2012). *Experimentation in software engineering*. Springer. diff --git a/slide/slide-10-experiment-execution.md b/slide/slide-10-experiment-execution.md new file mode 100644 index 0000000..7951a28 --- /dev/null +++ b/slide/slide-10-experiment-execution.md @@ -0,0 +1,1441 @@ +--- +marp: true +paginate: true +class: bagian-iii +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 10 — Experiment Execution & Data Collection + +## Dari Rencana ke Data yang Terpercaya + +*Pertemuan 10 (M10)  |  Sub-CPMK 3.2  |  CPMK03  |  CPL06* + +Fase: **Executing** (M9–M11)  ·  Bagian III: Execution + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 10 + +1. Execution plan: pentingnya perencanaan sebelum eksekusi +2. Experiment Execution Pipeline +3. Mengapa multiple run wajib +4. Struktur data logging yang benar +5. Konsistensi eksekusi — sama persis setiap kali +6. Data collection protokol +7. Cognitive Traps & Studi Kasus +8. Output Praktis: Log Eksperimen + Dataset Mentah + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Menyusun **execution plan** yang detail sebelum menjalankan eksperimen +- Menerapkan **multiple run** dan menjelaskan alasan statistiknya +- Merancang struktur **data logging** yang komprehensif +- Memastikan **konsistensi eksekusi** di semua skenario dan run +- Menghasilkan **dataset eksperimen mentah** yang siap divalidasi + +> Sub-CPMK 3.2 → Melaksanakan eksperimen dan mengumpulkan data (CPL06) + +--- + +## Experiment Execution Pipeline + +*Dari desain ke dataset yang siap dianalisis* + +
+ +**Design** ↓ Execution Plan (sebelum eksperimen dimulai) ↓ Controlled Execution (skenario satu per satu) ↓ Data Collection (setiap metrik, setiap run) ↓ Data Logging (terstruktur, timestamped) ↓ **Dataset for Analysis** + +
+ +> Eksekusi **tanpa execution plan** = memasak tanpa resep. Mungkin jadi, tapi tidak terjamin konsistensinya. + +--- + +## Execution Plan — Apa yang Harus Ada + +**Sebelum menjalankan eksperimen pertama:** + +``` +EXECUTION PLAN — Eksperimen [N] + +Skenario yang akan dijalankan: + Skenario 1: [kondisi A] — [parameter spesifik] + Skenario 2: [kondisi B] — [parameter spesifik] + Skenario 3: [baseline] — [parameter spesifik] + +Jumlah run per skenario: 10 +Random seeds untuk tiap run: [42, 123, 456, 789, 1024, ...] + +Urutan eksekusi: + 1. Skenario baseline → 10 runs + 2. Skenario 1 → 10 runs + 3. Skenario 2 → 10 runs + +Estimasi waktu per run: 45 menit +Total waktu: ~22.5 jam +``` + +--- + +## Mengapa Multiple Run Wajib? + +**Satu run tidak cukup karena:** + +1. Inisialisasi random (weight initialization, shuffle order) berbeda setiap run +2. Hardware variance (thermal throttling, background processes) +3. Satu run tidak bisa menghitung **standard deviation → tidak bisa uji statistik** + +| Runs | Yang Bisa Dihitung | Yang Tidak Bisa | +|------|-------------------|----------------| +| 1 run | Point estimate saja | ± std, t-test, CI | +| 3 run | Mean (terlalu kecil untuk distribusi) | Reliable CI | +| 5 run | Mean ± std (minimum acceptable) | Large sample statistics | +| 10+ run | Mean ± std + t-test + CI | — | + +> **Minimum dalam riset TI:** 5 run. Disarankan 10 run untuk stabilitas statistik. + +--- + +## Struktur Data Logging + +*Setiap run harus menghasilkan log yang lengkap* + +```python +log_entry = { + "run_id": "exp03_run07", + "timestamp": "2026-04-13T10:25:33", + "experiment_id": "exp-03", + "scenario": "attention-mechanism", + "random_seed": 789, + "config": { + "model": "BiLSTM", + "attention": True, + "learning_rate": 1e-3, + "batch_size": 32, + "epochs": 50 + }, + "results": { + "f1_micro": 0.872, + "f1_macro": 0.815, + "precision": 0.889, + "recall": 0.856, + "training_time_sec": 2723 + }, + "hardware": "RTX 3090, 24GB VRAM, CUDA 11.8" +} +``` + +--- + +## Konsistensi Eksekusi — Checklist Setiap Run + +*Sebelum memulai setiap run, pastikan:* + +| Item | Cek | +|------|-----| +| Environment aktif (conda/venv) | `conda activate rti-exp` | +| Config file benar untuk skenario ini | `cat configs/exp_03_s1.yaml` | +| Random seed di-set | Set di numpy, torch, Python random | +| Dataset di lokasi yang benar + checksum OK | `md5sum dataset.csv` | +| GPU memory kosong | `nvidia-smi` | +| Log directory tersedia | `mkdir -p logs/exp03/` | +| Tidak ada proses berat yang berjalan | Tutup browser, aplikasi lain | + +> Konsistensi eksekusi bukan paranoia — ini adalah standar ilmiah. + +--- + + + +# Cognitive Traps +## Bab 10 — Experiment Execution + +--- + +## Cognitive Traps — Bab 10 + +**"Satu run sudah cukup kalau hasilnya bagus"** +"Bagus" dalam satu run mungkin keberuntungan (lucky seed). Tanpa multiple run, tidak ada cara mengetahui apakah hasil tersebut stabil atau artifact dari kondisi spesifik satu eksekusi. + +**"Data logging berlebihan, cukup catat hasil akhir saja"** +Ketika ada anomali atau hasil yang tidak terduga, log yang lengkap adalah satu-satunya cara untuk menginvestigasi. Logging minimal = debugging impossible. Disk space murah, waktu investigasi mahal. + +**"Eksperimen bisa dijalankan sambil mengerjakan yang lain"** +Background processes mengkonsumsi CPU/GPU/RAM dan dapat mempengaruhi throughput dan latency measurement. Untuk eksperimen yang mengukur performa sistem, isolasi resource wajib. + +--- + +## Studi Kasus 1 — Single Run Disaster (Basic) + +**Konteks:** Mahasiswa melaporkan F1=91.5%. Dosen meminta run ulang. Hasil: 84.2%. + +**Investigasi:** +- Run pertama: lucky seed, distribusi batch training kebetulan balans +- Run ulang: seed berbeda, batch distribution berbeda +- Variance sangat tinggi: std = 3.7% → model tidak stabil + +**Tabel dari 5 run:** +| Run | Seed | F1-score | +|-----|------|---------| +| 1 | 42 | 91.5% ← yang dilaporkan | +| 2 | 123 | 84.2% | +| 3 | 456 | 87.1% | +| 4 | 789 | 85.8% | +| 5 | 1024 | 86.3% | +| **Mean ± Std** | | **87.0 ± 2.6%** | + +**Pelajaran:** F1 yang sebenarnya adalah 87.0 ± 2.6%, bukan 91.5%. + +--- + +## Studi Kasus 2 — Eksekusi Tidak Konsisten (Advanced) + +**Konteks:** Researcher membandingkan dua model. Model A selalu dijalankan di pagi hari (server dingin), Model B di sore hari (server panas, thermal throttling aktif). + +**Hasil:** Model A 15% lebih cepat dalam inference time. + +**Masalah:** Perbedaan inference time bukan karena model — tapi karena kondisi hardware yang berbeda. + +**Protokol eksekusi yang benar:** +1. Randomize urutan eksekusi per run (Model A/B dijalankan bergantian dalam satu sesi) +2. Jalankan warm-up run sebelum pengukuran (GPU dalam kondisi stabil) +3. Ukur hardware state sebelum setiap run (`nvidia-smi`, CPU temperature) +4. Catat semua di log + +--- + +## Format Dataset Mentah + +*Hasil semua run harus tersimpan dalam format yang terstruktur* + +``` +results/ + exp03_summary.csv ← semua run, semua skenario + exp03_raw/ + run_01_seed42.json + run_02_seed123.json + ... + exp03_config/ + scenario_1_attention.yaml + scenario_2_baseline.yaml +``` + +**Format `exp03_summary.csv`:** +```csv +run_id,scenario,seed,f1_micro,f1_macro,precision,recall,time_sec +exp03_s1_r1,attention,42,0.872,0.815,0.889,0.856,2723 +exp03_s1_r2,attention,123,0.865,0.810,0.882,0.849,2698 +exp03_s2_r1,baseline,42,0.821,0.768,0.844,0.799,2511 +``` + +--- + +## Research vs Engineering — Execution + +| Aspek | Engineering | Research | +|-------|------------|---------| +| Eksekusi | Run sekali, jika berhasil → selesai | Minimal 5 run per skenario | +| Kondisi eksekusi | Tidak disebutkan | Dikontrol dan didokumentasikan | +| Data yang disimpan | Hasil akhir saja | Semua run, semua metrik, semua log | +| Anomali | Dibuang / diabaikan | Dicatat dan diinvestigasi | +| Urutan eksekusi | Tidak penting | Randomized untuk menghindari order bias | + +--- + +## Ringkasan Pertemuan 10 + +| Konsep | Inti | +|--------|------| +| Execution Pipeline | Design → Plan → Execution → Collection → Logging → Dataset | +| Multiple Run | Min. 5 runs → bisa hitung mean ± std → bisa uji statistik | +| Data Logging | Setiap run: ID, timestamp, config, result, hardware | +| Konsistensi | Checklist yang sama sebelum setiap run | +| Format Dataset | CSV summary + JSON detail per run + YAML config | + +--- + +## Final Statement & Output Praktis + +
+"Data yang baik bukan data yang banyak, tetapi data yang dikumpulkan dengan konsistensi metodologi yang ketat." +
+ +### Output Praktis M10 + +Hasilkan dan kumpulkan: + +1. **Log eksperimen** (minimal 5 run per skenario, format terstruktur) +2. **Dataset mentah** (`results/exp_summary.csv` + file per run) +3. **Catatan anomali** — apa yang terjadi di luar rencana selama eksekusi + +*Dokumen ini menjadi dasar untuk validasi data di Bab 11.* + +--- + +## Referensi Utama — Bab 10 + +- Wohlin, C., Runeson, P., Höst, M., Ohlsson, M. C., Regnell, B., & Wesslén, A. (2012). *Experimentation in software engineering*. Springer. + +- Pineau, J., Vincent-Lamarre, P., Sinha, K., Larivière, V., Beygelzimer, A., d'Alché-Buc, F., Fox, E., & Larochelle, H. (2021). Improving reproducibility in machine learning research. *Journal of Machine Learning Research, 22*(1), 7459–7478. + +- Hoefler, T., & Belli, R. (2015). Scientific benchmarking of parallel computing systems: Twelve ways to tell the masses when reporting performance results. In *Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis* (pp. 1–12). ACM. diff --git a/slide/slide-11-data-validation.md b/slide/slide-11-data-validation.md new file mode 100644 index 0000000..66b8b0d --- /dev/null +++ b/slide/slide-11-data-validation.md @@ -0,0 +1,1435 @@ +--- +marp: true +paginate: true +class: bagian-iii +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 11 — Data Validation & Integrity + +## Memastikan Data yang Dikumpulkan Dapat Dipercaya + +*Pertemuan 11 (M11)  |  Sub-CPMK 3.3  |  CPMK03  |  CPL06* + +Fase: **Executing** (M9–M11)  ·  Bagian III: Execution + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 11 + +1. Mengapa validasi data itu urusan peneliti, bukan pre-processing +2. Data Trust Model — pipeline dari Raw ke Analysis Ready +3. Empat Pilar Kualitas Data +4. Proses validasi step-by-step +5. Anomaly detection — outlier, missing values, inkonsistensi +6. Alignment data–eksperimen +7. Cognitive Traps & Studi Kasus +8. Output Praktis: Dataset Tervalidasi + Catatan Anomali + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Menjelaskan perbedaan **validasi data** dan **preprocessing data** +- Menerapkan **4 pilar kualitas data** sebagai kriteria penerimaan dataset +- Melaksanakan proses validasi (format → range → consistency → logic) +- Mendokumentasikan **anomali** yang ditemukan dan keputusan yang diambil +- Memeriksa **alignment** antara data yang dikumpulkan dan desain eksperimen + +> Sub-CPMK 3.3 → Memvalidasi integritas data eksperimen (CPL06) + +--- + +## Data Trust Model + +*Setiap langkah harus meningkatkan kepercayaan terhadap data* + +
+ +**Raw Data** (dari eksperimen) ↓ Data Cleaning (format, struktur) ↓ Consistency Check (antar-run, antar-skenario) ↓ Validation (range, logic, alignment) ↓ Trusted Data (dengan dokumentasi anomali) ↓ **Analysis Ready** (siap Bab 13) + +
+ +> Validasi ≠ Preprocessing. Validasi memastikan data **benar**. Preprocessing mempersiapkan data untuk **analisis**. Urutannya tidak bisa dibalik. + +--- + +## Empat Pilar Kualitas Data + +*Standar yang harus dipenuhi oleh setiap dataset penelitian* + +| Pilar | Definisi | Pertanyaan Kunci | Contoh Pelanggaran | +|-------|---------|-----------------|-------------------| +| **Accuracy** (Akurasi) | Data mencerminkan fenomena yang diukur | Apakah nilai ini masuk akal? | F1=1.02 (mustahil) | +| **Consistency** (Konsistensi) | Tidak ada kontradiksi dalam dataset | Apakah run yang sama menghasilkan format yang sama? | Skenario A: nilai 0–1, Skenario B: nilai 0–100 | +| **Completeness** (Kelengkapan) | Semua yang seharusnya ada, ada | Adakah run yang hilang? | 10 run direncanakan, 8 di CSV | +| **Validity** (Validitas) | Data sesuai dengan definisi variabel dalam desain | Apakah yang diukur sesuai dengan RQ? | Mengukur accuracy padahal RQ butuh recall | + +--- + +## Proses Validasi Data — 4 Tahap + +### Tahap 1 — Format Validation +```python +# Cek struktur CSV +import pandas as pd +df = pd.read_csv('exp03_summary.csv') +print(df.dtypes) # Apakah kolom numerik dibaca sebagai float? +print(df.shape) # Apakah jumlah baris sesuai rencana? +print(df.isnull().sum()) # Apakah ada missing values? +``` + +### Tahap 2 — Range Validation +```python +# Validasi range metrik +assert (df['f1_micro'] >= 0).all() and (df['f1_micro'] <= 1).all(), "F1 out of range!" +assert (df['precision'] >= 0).all() and (df['precision'] <= 1).all(), "Precision out of range!" +assert (df['time_sec'] > 0).all(), "Training time harus positif!" +``` + +--- + +## Proses Validasi Data — Lanjutan + +### Tahap 3 — Consistency Check +```python +# Cek jumlah run per skenario (harus 10 per skenario) +run_counts = df.groupby('scenario')['run_id'].count() +print(run_counts) + +# Output yang diharapkan: +# scenario +# attention 10 +# baseline 10 +# no-attention 10 +``` + +### Tahap 4 — Logic Validation (Alignment dengan Desain) +``` +□ Semua skenario yang direncanakan ada di dataset? +□ Semua random seed yang dijadwalkan tereksekusi? +□ Metrik yang ada di dataset ← sesuai dengan RQ dan hipotesis? +□ Satuan metrik konsisten? (0–1 atau 0–100%?) +``` + +--- + +## Anomaly Detection + +*Tiga jenis anomali yang paling sering ditemukan:* + +### 1. Outlier Statistik +```python +from scipy import stats +z_scores = stats.zscore(df['f1_micro']) +outliers = df[abs(z_scores) > 3] +print("Outliers:", outliers) +``` + +Jika ditemukan outlier → **jangan langsung dibuang**. Investigasi dulu: +- Apakah log menunjukkan sesuatu yang aneh pada run tersebut? +- Apakah hardware state berbeda? +- Dokumentasikan alasan, baru putuskan: retain atau exclude with justification. + +### 2. Missing Values +Cek cross-referensi dengan execution log. Run hilang = re-run jika memungkinkan. + +### 3. Inkonsistensi Format +Contoh: kolom `time_sec` yang seharusnya float, tertuliskan "N/A" di beberapa baris. + +--- + + + +# Cognitive Traps +## Bab 11 — Data Validation + +--- + +## Cognitive Traps — Bab 11 + +**"Data dari eksperimen saya sendiri pasti sudah benar"** +Eksperimen yang dirancang baik pun bisa menghasilkan data yang cacat karena bug kecil, kondisi hardware, atau kesalahan konfigurasi. Validasi bukan soal ketidakpercayaan — tapi standar ilmiah. + +**"Outlier dibuang karena pasti error"** +Outlier bisa menjadi temuan paling menarik dalam penelitian. Membuang outlier tanpa investigasi = kehilangan insight + manipulasi data. Selalu dokumentasikan outlier dan alasan keputusan. + +**"Validasi data itu sama dengan preprocessing"** +Validasi = memastikan data benar (integritas). Preprocessing = mempersiapkan data untuk analisis (transformasi). Urutan wajib: validasi dulu, baru preprocessing. Tidak bisa dibalik. + +**"Kalau run-nya banyak, satu yang error tidak apa-apa"** +Setiap run yang cacat mempengaruhi mean dan std. Dalam 10 run, 1 run error = 10% data rusak = seluruh analisis terdampak. + +--- + +## Studi Kasus 1 — Data Inconsistency (Basic) + +**Konteks:** Mahasiswa membandingkan Model A vs Model B, 10 run masing-masing. + +**Masalah yang ditemukan saat validasi:** +- Model A: F1-score dalam skala 0–1 (0.872, 0.865, dst) +- Model B: F1-score dalam skala 0–100 (87.5, 86.2, dst) +- Keduanya berasal dari library yang berbeda (sklearn vs torchmetrics) + +**Dampak jika tidak divalidasi:** +- Model A mean = 0.869 +- Model B mean = 86.8 → tampak 100x lebih buruk +- Analisis komparatif menjadi tidak valid + +**Solusi:** Normalisasi ke skala yang sama **setelah validasi mengidentifikasi ini**, dan dokumentasikan dalam catatan preprocessing. + +--- + +## Studi Kasus 2 — Missing Runs + Outlier (Advanced) + +**Konteks:** 10 run direncanakan per skenario. Dataset hanya berisi 9 run. Run ke-7 juga tampak anomali (F1 = 0.342, jauh di bawah mean 0.87). + +**Investigasi:** +1. **Missing run:** Cross-cek dengan execution log → run ke-6 gagal karena `CUDA OOM` dan tidak di-log dengan benar +2. **Outlier run-7:** Log menunjukkan GPU temperature spike 85°C selama run → thermal throttling aktif + +**Keputusan yang didokumentasikan:** +``` +Anomali 1 — Run ke-6: Eksekusi gagal (CUDA OOM). + Keputusan: Re-run dengan batch_size=16 (bukan 32). + +Anomali 2 — Run ke-7: Thermal throttling aktif (85°C). + Keputusan: Exclude dari analisis. Alasan: kondisi hardware tidak normal. + Pengganti: Re-run dengan server di ruangan ber-AC. +``` + +--- + +## Dokumentasi Catatan Validasi + +*Setiap keputusan tentang data harus terdokumentasi* + +``` +DATA VALIDATION REPORT — Eksperimen 3 +Tanggal validasi: 2026-05-02 +Peneliti: [Nama] + +HASIL VALIDASI FORMAT : PASS — semua kolom sesuai tipe yang diharapkan +HASIL VALIDASI RANGE : PASS — semua nilai F1 dalam [0,1] +HASIL VALIDASI KONSISTENSI: FAIL → lihat anomali 1 +HASIL VALIDASI ALIGNMENT : PASS — semua metrik sesuai RQ + +ANOMALI YANG DITEMUKAN: + [ANO-01] Run exp03_s1_r6: Missing. Penyebab: CUDA OOM. + Keputusan: Re-run. Status: Selesai (exp03_s1_r6b). + [ANO-02] Run exp03_s1_r7: Outlier (F1=0.342). Penyebab: Thermal throttling. + Keputusan: Exclude + re-run (exp03_s1_r7b). + +STATUS AKHIR: Dataset valid. Siap untuk preprocessing. +``` + +--- + +## Research vs Ad-Hoc — Data Handling + +| Aspek | Ad-Hoc | Research | +|-------|--------|---------| +| Validasi data | Langsung analisis | Validasi dulu sebelum apapun | +| Outlier | Dibuang atau diabaikan | Investigasi + dokumentasi keputusan | +| Missing data | Di-impute langsung | Cari tahu penyebab, pertimbangkan re-run | +| Format inconsistency | "Nanti saja saat analisis" | Temukan saat validasi, perbaiki dengan dokumentasi | +| Laporan | Hanya hasil | Hasil + catatan anomali + audit trail | + +--- + +## Ringkasan Pertemuan 11 + +| Konsep | Inti | +|--------|------| +| Data Trust Model | Raw → Cleaning → Consistency → Validation → Trusted → Analysis Ready | +| 4 Pilar | Accuracy, Consistency, Completeness, Validity | +| Proses Validasi | Format → Range → Consistency → Logic (4 tahap) | +| Anomaly Handling | Investigasi dulu → keputusan berbasis bukti → dokumentasi | +| Output Wajib | Dataset tervalidasi + Catatan anomali + Validation report | + +--- + +## Final Statement & Output Praktis + +
+"Data yang divalidasi dengan buruk adalah fondasi yang retak — bangunan analisis di atasnya, sebagus apapun, tidak akan dapat dipercaya." +
+ +### Output Praktis M11 + +Kumpulkan dan lampirkan: + +1. **Dataset tervalidasi** (`exp_summary_validated.csv`) +2. **Validation report** (format bebas, isi sesuai template catatan validasi) +3. **Catatan anomali** — setiap anomali yang ditemukan dan keputusan yang diambil + +*Dataset ini menjadi input untuk Preprocessing (Bab 13) dan Presentasi Hasil (Bab 12).* + +--- + +## Referensi Utama — Bab 11 + +- Pipino, L. L., Lee, Y. W., & Wang, R. Y. (2002). Data quality assessment. *Communications of the ACM, 45*(4), 211–218. + +- Strong, D. M., Lee, Y. W., & Wang, R. Y. (1997). Data quality in context. *Communications of the ACM, 40*(5), 103–110. + +- Rahm, E., & Do, H. H. (2000). Data cleaning: Problems and current approaches. *IEEE Data Engineering Bulletin, 23*(4), 3–13. + +- Wohlin, C., Runeson, P., Höst, M., Ohlsson, M. C., Regnell, B., & Wesslén, A. (2012). *Experimentation in software engineering*. Springer. diff --git a/slide/slide-12-result-presentation.md b/slide/slide-12-result-presentation.md new file mode 100644 index 0000000..a508e9f --- /dev/null +++ b/slide/slide-12-result-presentation.md @@ -0,0 +1,1427 @@ +--- +marp: true +paginate: true +class: bagian-iv +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 12 — Result Presentation & Visualization + +## Dari Data Mentah ke Insight yang Dapat Dikomunikasikan + +*Pertemuan 12 (M12)  |  Sub-CPMK 4.1  |  CPMK04  |  CPL07* + +Fase: **Analyzing & Communicating** (M12–M16)  ·  Bagian IV + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 12 + +1. Memasuki Bagian IV — dari eksekusi ke komunikasi hasil +2. Data → Insight Pipeline +3. Tabel vs Grafik — kapan menggunakan yang mana +4. Mapping tujuan → jenis visualisasi +5. Multi-metric presentation — cara melaporkan banyak metrik sekaligus +6. Visualization bias — cara visualisasi bisa menipu +7. Cognitive Traps & Studi Kasus +8. Output Praktis: Tabel + Grafik + Observasi Awal + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Menjelaskan perbedaan peran **tabel** (presisi) dan **grafik** (insight) +- Memilih jenis visualisasi berdasarkan **tujuan komunikasi hasil** +- Menyajikan hasil **multi-metrik** secara terstruktur dan tidak menyesatkan +- Mengidentifikasi dan menghindari **visualization bias** +- Menghasilkan **observasi awal** dari presentasi hasil sebelum interpretasi formal + +> Sub-CPMK 4.1 → Menyajikan dan memvisualisasikan hasil eksperimen (CPL07) + +--- + +## Sambutan ke Bagian IV + +*Apa yang sudah kita miliki, apa yang harus kita lakukan* + +``` +Bagian I → Thinking: Masalah ditemukan, RQ dirumuskan +Bagian II → Designing: Metrik ditentukan, sistem dirancang, eksperimen didesain +Bagian III → Executing: Sistem diimplementasikan, dijalankan, data dikumpulkan + divalidasi + +NOW: Bagian IV → Analyzing & Communicating + Bab 12: Sajikan hasil agar bisa dibaca + Bab 13: Preprocessing untuk analisis + Bab 14: Analisis, interpretasi, failure analysis + Bab 15: Tulis laporan ilmiah + Bab 16: Presentasikan dan defend +``` + +> Data yang valid (Bab 11) adalah fondasi. Presentasi yang jelas (Bab 12) adalah jembatan. + +--- + +## Data → Insight Pipeline + +*Proses mengubah angka mentah menjadi insight yang dapat dikomunikasikan* + +
+ +**Validated Data** (Bab 11) ↓ Structured Presentation (tabel, format baku) ↓ Visualization (grafik yang tepat sasaran) ↓ Pattern Recognition (tren, perbedaan, konsistensi) ↓ **Insight** (observasi bermakna, siap Bab 14) + +
+ +> Bab 12 menghasilkan **observasi** — "kita melihat X lebih baik dari Y dalam kondisi Z" +> Bab 14 menghasilkan **interpretasi** — "ini terjadi karena..." + +--- + +## Tabel vs Grafik — Pilih yang Benar + +| Situasi | Gunakan Tabel | Gunakan Grafik | +|---------|--------------|---------------| +| Tujuan | Presisi — angka exakt penting | Insight — pola, tren, perbandingan | +| Pembaca perlu | Mencari angka spesifik | Memahami pola dengan cepat | +| Data | Multi-metrik, banyak dimensi | Satu atau dua dimensi utama | +| Konteks | Laporan teknis, lampiran | Presentasi, paper figure | + +**Aturan praktis:** +- Tabel **selalu ada** di laporan → pembaca bisa verifikasi angka +- Grafik menampilkan **pesan utama** yang ingin disampaikan +- Tidak ada grafik tanpa tabel pendamping di laporan ilmiah + +--- + +## Mapping Tujuan → Jenis Visualisasi + +| Tujuan Komunikasi | Jenis Grafik | Contoh | +|------------------|-------------|--------| +| Bandingkan nilai antar model | Bar chart | Perbandingan F1 Model A vs B vs C | +| Bandingkan multiple metrik | Grouped/stacked bar | Precision, Recall, F1 per model | +| Lihat tren seiring waktu | Line chart | Training loss over epochs | +| Lihat distribusi performa | Box plot | F1 dari 10 run per skenario | +| Lihat trade-off dua metrik | Scatter plot | Precision-Recall curve | +| Lihat keseluruhan radar | Radar chart | 5 metrik sekaligus per model | +| Lihat sebaran error | Heatmap | Confusion matrix | + +> **Box plot sangat penting** untuk researcher: menampilkan median, IQR, dan outlier sekaligus. + +--- + +## Multi-Metric Presentation + +*Penelitian TI jarang punya satu metrik tunggal — cara melaporkan banyak metrik* + +**Format tabel standar:** + +| Skenario | F1-micro | F1-macro | Precision | Recall | Time (s) | +|----------|---------|---------|-----------|--------|---------| +| Baseline | 0.821 ± 0.015 | 0.768 ± 0.018 | 0.844 ± 0.012 | 0.799 ± 0.021 | 2511 ± 43 | +| +Attention | **0.869 ± 0.011** | **0.815 ± 0.014** | **0.882 ± 0.010** | **0.857 ± 0.016** | 2706 ± 52 | +| +Ensemble | 0.851 ± 0.013 | 0.798 ± 0.016 | 0.867 ± 0.011 | 0.836 ± 0.019 | 3124 ± 67 | + +**Prinsip:** Selalu tampilkan mean ± std. Bold = best per kolom. N = jumlah run (cantumkan di caption). + +--- + +## Visualization Bias — Cara Visualisasi Menipu + +*Tiga teknik visual yang menyesatkan (dan sering tidak disengaja)* + +### 1. Manipulasi Y-axis +``` + Y-axis mulai dari 0.85: vs. Y-axis mulai dari 0: + | | +0.89| █ 1.0| +0.87| █ █ 0.8| █ █ █ +0.85|█ █ | + A B C A B C + Tampak sangat berbeda Tampak hampir sama +``` +Kedua grafik menggunakan data yang persis sama! + +### 2. Selective Data — hanya menampilkan skenario terbaik +### 3. Misleading Chart Type — bar chart untuk data kontinu yang seharusnya box plot + +--- + + + +# Cognitive Traps +## Bab 12 — Result Presentation + +--- + +## Cognitive Traps — Bab 12 + +**"Lebih besar selalu lebih baik"** +Tidak semua metrik makin besar makin baik. Execution time, memory usage, dan false positive rate → lebih kecil lebih baik. Selalu beri label dan arah di tabel dan grafik. + +**"Grafik sudah cukup, tidak perlu tabel"** +Grafik tidak bisa di-verifikasi angkanya. Dalam laporan ilmiah, tabel pencantuman nilai exakt adalah standar — bukan opsional. Grafik tanpa tabel = tidak cukup untuk reproduksi. + +**"Saya hanya menampilkan skenario terbaik untuk memperkuat argumen"** +Selective reporting adalah pelanggaran integritas ilmiah. Semua skenario yang dijalankan harus dilaporkan. Argumen yang kuat muncul dari analisis yang jujur — bukan dari data yang dipilah. + +**"Observasi awal sudah cukup, tidak perlu analisis lebih lanjut"** +Bab 12 menghasilkan observasi. Interpretasi dan penjelasan mengapa — itu adalah tugas Bab 14. Jangan melompat dari angka ke kesimpulan tanpa analisis formal. + +--- + +## Studi Kasus 1 — Y-Axis Manipulation (Basic) + +**Presentasi original:** +Grafik menunjukkan model peneliti jauh lebih baik dari baseline. Dosen menanyakan skala Y-axis. + +Ternyata Y-axis dimulai dari 0.82, mengakhiri di 0.90. +Perbedaan aktual: 87.0% vs 82.1% = **4.9 percentage point**. + +**Revisi:** +1. Y-axis dimulai dari 0 +2. Tambahkan error bar (± std dari 10 run) +3. Tambahkan tabel dengan nilai exakt + +**Pelajaran:** Perbedaan 4.9pp tetap signifikan secara statistik. Tidak perlu "membesarkan" secara visual — biarkan angka bicara sendiri. + +--- + +## Studi Kasus 2 — Visualisasi yang Tepat (Advanced) + +**Original:** Bar chart untuk menampilkan performa dari 10 run. +Bar chart hanya menampilkan mean — variance tersembunyi. + +**Solusi: Box plot dari 10 run** + +``` +Attention: |───[===|===]───•| Median: 0.869, IQR: 0.011–0.015 +Ensemble: |──[===|===]──| Median: 0.851, IQR: 0.013–0.016 +Baseline: |─[===|===]──| Median: 0.821, IQR: 0.015–0.018 +``` + +**Informasi tambahan yang terlihat dari box plot:** +- Attention memiliki variance lebih kecil (lebih stabil) +- Ensemble lebih stabil dari Baseline +- Tidak ada overlap distribusi → perbedaan kemungkinan signifikan + +--- + +## Format Observasi Awal + +*Sebelum interpretasi, dokumentasikan dulu apa yang terlihat* + +``` +OBSERVASI AWAL HASIL EKSPERIMEN + +[OBS-01] Skenario "+Attention" menghasilkan F1-micro tertinggi (0.869 ± 0.011), + diikuti "+Ensemble" (0.851 ± 0.013), dan Baseline (0.821 ± 0.015). + +[OBS-02] Variance skenario "+Attention" lebih kecil dari Baseline, + menunjukkan stabilitas yang lebih baik. + +[OBS-03] "+Ensemble" memerlukan waktu eksekusi lebih lama (3124 ± 67s) + dibanding "+Attention" (2706 ± 52s). + +[OBS-04] Pada F1-macro, semua skenario menunjukkan nilai lebih rendah daripada + F1-micro, mengindikasikan performa yang tidak seimbang antar kelas. + +CATATAN: Observasi ini baru mendeskripsikan "apa yang terjadi". Interpretasi + mengapa — akan dilakukan di Bab 14. +``` + +--- + +## Ringkasan Pertemuan 12 + +| Konsep | Inti | +|--------|------| +| Data→Insight Pipeline | Validated Data → Structured → Visualization → Pattern → Insight | +| Tabel vs Grafik | Tabel = presisi (selalu ada), Grafik = insight (pilih tepat) | +| Mapping Visualisasi | Tujuan berbeda → jenis grafik berbeda (bar/box/scatter/radar) | +| Multi-metric | Mean ± std, bold best, N runs disebut di caption | +| Visualization Bias | Y-axis manipulation, selective data, misleading chart type | +| Observasi vs Interpretasi | Bab 12 = "apa yang terjadi", Bab 14 = "mengapa terjadi" | + +--- + +## Final Statement & Output Praktis + +
+"Visualisasi yang jujur bukan hanya soal estetika — ini adalah pernyataan integritas ilmiah. Data yang baik tidak perlu dimanipulasi agar terlihat menarik." +
+ +### Output Praktis M12 + +Buat dan kumpulkan: + +1. **Tabel hasil** (semua skenario, semua metrik, format mean ± std) +2. **Minimal 2 grafik** (pilih jenis sesuai tujuan komunikasi) +3. **Dokumen observasi awal** (format [OBS-XX] seperti template di atas) + +--- + +## Referensi Utama — Bab 12 + +- Tufte, E. R. (2001). *The visual display of quantitative information* (2nd ed.). Graphics Press. + +- Few, S. (2012). *Show me the numbers: Designing tables and graphs to enlighten* (2nd ed.). Analytics Press. + +- Munzner, T. (2014). *Visualization analysis and design*. CRC Press. + +- Jain, R. (1991). *The art of computer systems performance analysis: Techniques for experimental design, measurement, simulation, and modeling*. Wiley. diff --git a/slide/slide-13-data-preprocessing.md b/slide/slide-13-data-preprocessing.md new file mode 100644 index 0000000..ad4f6df --- /dev/null +++ b/slide/slide-13-data-preprocessing.md @@ -0,0 +1,1464 @@ +--- +marp: true +paginate: true +class: bagian-iv +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 13 — Data Preprocessing + +## Mengubah Data Mentah menjadi Siap Analisis + +*Pertemuan 13 (M13)  |  Sub-CPMK 4.2  |  CPMK04  |  CPL07* + +Fase: **Analyzing & Communicating** (M12–M16)  ·  Bagian IV + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 13 + +1. Preprocessing vs Validasi — perbedaan yang kritis +2. Data Refinement Pipeline +3. Data Cleaning — missing values, duplikat, error +4. Data Transformation — encoding, agregasi, feature creation +5. Normalization & Scaling +6. Empat Prinsip Preprocessing +7. Cognitive Traps & Studi Kasus +8. Output Praktis: Dataset Bersih + Dokumentasi Preprocessing + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Membedakan **validasi data** (Bab 11) vs **preprocessing data** (Bab 13) +- Menerapkan teknik **data cleaning**: missing values, duplikat, outlier handling +- Melakukan **transformasi data** yang sesuai (encoding, normalisasi, agregasi) +- Mendokumentasikan setiap langkah preprocessing untuk **reproduksi** +- Menerapkan **4 prinsip preprocessing** agar tidak memperkenalkan bias + +> Sub-CPMK 4.2 → Melakukan preprocessing data untuk analisis (CPL07) + +--- + +## Data Refinement Pipeline + +*Dari data tervalidasi hingga siap dianalisis* + +
+ +**Raw Data Tervalidasi** (Bab 11) ↓ Cleaning (hapus noise, missing, duplikat) ↓ Transformation (ubah format/representasi) ↓ Normalization (sesuaikan skala/distribusi) ↓ **Processed Data** ↓ Analysis Ready (input Bab 14) + +
+ +> **Prinsip fundamental:** Preprocessing harus **dapat direproduksi** dan **terdokumentasi**. Tidak boleh ada langkah yang dilakukan tanpa jejak. + +--- + +## Validasi vs Preprocessing — Garis yang Jelas + +*Perbedaan yang sering tertukar* + +| Aspek | Validasi (Bab 11) | Preprocessing (Bab 13) | +|-------|-----------------|----------------------| +| **Tujuan** | Memastikan data benar | Mempersiapkan data untuk analisis | +| **Pertanyaan** | "Apakah data ini valid?" | "Bagaimana mengoptimalkan data untuk analisis?" | +| **Tindakan** | Identifikasi masalah + keputusan | Transformasi + normalisasi | +| **Output** | Dataset valid + catatan anomali | Dataset siap analisis | +| **Urutan** | **Pertama** | **Kedua** (setelah validasi) | + +> Jika preprocessing dilakukan sebelum validasi → kita mungkin "memperbaiki" data yang seharusnya diinvestigasi lebih lanjut. + +--- + +## Data Cleaning — Tiga Masalah Utama + +### 1. Missing Values +```python +# Identifikasi +print(df.isnull().sum()) + +# Strategi penanganan (pilih berdasarkan konteks): +# a. Drop baris jika jumlah kecil dan tidak sistemik +df.dropna(subset=['f1_micro'], inplace=True) + +# b. Impute dengan mean (hanya untuk data kontinu, non-kritis) +df['time_sec'].fillna(df['time_sec'].mean(), inplace=True) + +# c. Flag sebagai missing category (untuk data kategoris) +df['hardware'].fillna('unknown', inplace=True) +``` + +### 2. Duplikat (run yang ter-log dua kali) +```python +df.drop_duplicates(subset=['run_id'], keep='first', inplace=True) +``` + +### 3. Format Error (nilai "N/A" teks di kolom numerik) +```python +df['time_sec'] = pd.to_numeric(df['time_sec'], errors='coerce') +``` + +--- + +## Data Transformation + +*Mengubah representasi data untuk memudahkan analisis* + +### Encoding Variabel Kategoris +```python +# Label encoding (untuk variabel ordinal) +scenario_map = {'baseline': 0, '+attention': 1, '+ensemble': 2} +df['scenario_code'] = df['scenario'].map(scenario_map) + +# One-hot encoding (untuk variabel nominal, tanpa urutan) +df_encoded = pd.get_dummies(df, columns=['hardware']) +``` + +### Agregasi +```python +# Hitung statistik per skenario (dari 10 run ke 1 baris per skenario) +summary = df.groupby('scenario').agg({ + 'f1_micro': ['mean', 'std', 'min', 'max'], + 'time_sec': ['mean', 'std'] +}).round(4) +``` + +--- + +## Normalization & Scaling + +*Mengapa diperlukan dan kapan digunakan* + +| Teknik | Formula | Kapan Digunakan | +|--------|---------|----------------| +| Min-Max Normalization | $x' = \frac{x - x_{min}}{x_{max} - x_{min}}$ | Ketika distribusi tidak diketahui, butuh skala [0,1] | +| Z-Score Standardization | $z = \frac{x - \mu}{\sigma}$ | Ketika data asumsi distribusi normal, ML yang sensitif skala | +| Log Transformation | $x' = \log(x)$ | Data sangat skewed (mis. execution time) | +| Robust Scaling | $x' = \frac{x - Q2}{Q3 - Q1}$ | Ada outlier yang tidak bisa dibuang | + +> **Penting:** Fit scaler HANYA pada training data, apply ke test data. Jangan fit pada seluruh dataset → data leakage! + +--- + +## Empat Prinsip Preprocessing + +*Standar yang membedakan preprocessing ilmiah dari ad-hoc* + +**1. Consistency** — Terapkan langkah yang sama persis ke semua skenario +```python +# Satu fungsi preprocessing, dipanggil untuk setiap skenario +def preprocess(df): return pipeline.fit_transform(df) +``` + +**2. Transparency** — Setiap langkah terdokumentasi dengan alasan +``` +[STEP-01] Normalisasi waktu eksekusi dengan log transform. + Alasan: distribusi sangat right-skewed (skewness=4.3). +``` + +**3. Reproducibility** — Simpan pipeline sebagai kode, bukan manual +```python +joblib.dump(pipeline, 'preprocessing_pipeline.pkl') +``` + +**4. Minimal Distortion** — Jangan hapus karakteristik penting dari data +> Normalisasi boleh mengubah skala, tidak boleh mengubah urutan atau hubungan relatif. + +--- + + + +# Cognitive Traps +## Bab 13 — Data Preprocessing + +--- + +## Cognitive Traps — Bab 13 + +**"Preprocessing dilakukan dulu sebelum memahami data"** +Preprocessing tanpa pemahaman konteks dapat memperkenalkan bias yang tidak disadari. Selalu lakukan exploratory analysis terlebih dahulu, baru tentukan preprocessing yang tepat. + +**"Normalisasi selalu diperlukan"** +Beberapa algoritma (decision tree, random forest) tidak sensitif terhadap skala. Normalisasi tidak selalu meningkatkan performa. Pilih berdasarkan kebutuhan algoritma, bukan habit. + +**"Data leakage tidak masalah karena kita tahu hasilnya"** +Data leakage (fit scaler pada entire dataset termasuk test) adalah invalidasi hasil yang fundamental. Hasil yang tinggi karena data leakage bukan prestasi — itu artifact. + +**"Langkah preprocessing tidak perlu didokumentasikan satu per satu"** +Jika preprocessing tidak terdokumentasi, penelitian tidak dapat direproduksi. Penelitian yang tidak dapat direproduksi tidak dapat diverifikasi. Ini adalah standar minimum publikasi ilmiah. + +--- + +## Studi Kasus 1 — Data Leakage (Basic) + +**Konteks:** Mahasiswa melakukan normalisasi sebelum train/test split. + +```python +# Data Leakage +from sklearn.preprocessing import StandardScaler + +scaler = StandardScaler() +X_scaled = scaler.fit_transform(X) # Fit pada SEMUA data, termasuk test! + +X_train, X_test = train_test_split(X_scaled, test_size=0.2) + +# Masalah: scaler telah "melihat" test data → test data tidak independen lagi +``` + +```python +# Benar +from sklearn.preprocessing import StandardScaler +from sklearn.pipeline import Pipeline + +X_train, X_test = train_test_split(X, test_size=0.2) + +scaler = StandardScaler() +X_train_scaled = scaler.fit_transform(X_train) # Fit HANYA pada training +X_test_scaled = scaler.transform(X_test) # Transform saja test data +``` + +--- + +## Studi Kasus 2 — Inconsistent Preprocessing (Advanced) + +**Konteks:** Researcher membandingkan Model A dan Model B. + +**Masalah:** +- Model A: preprocessing dengan normalisasi Min-Max +- Model B: preprocessing dengan standardisasi Z-score +- Kedua model dibandingkan sebagai "perbandingan arsitektur" + +**Tapi preprocessing yang berbeda = bukan hanya arsitektur yang berbeda!** + +Model B mungkin lebih baik bukan karena arsitekturnya, tapi karena Z-score lebih cocok dengan distribusi data ini. + +**Solusi:** +1. Tentukan satu pipeline preprocessing yang sama untuk semua model yang dibandingkan +2. Jika ingin membandingkan teknik preprocessing → buat itu sebagai variabel eksperimen eksplisit + +--- + +## Dokumentasi Preprocessing + +*Format standar yang harus ada dalam laporan* + +``` +PREPROCESSING DOCUMENTATION + +Dataset: exp03_summary_validated.csv (setelah validasi Bab 11) +Tanggal preprocessing: 2026-05-05 +Peneliti: [Nama] + +LANGKAH PREPROCESSING: + +[STEP-01] Log transform pada kolom 'time_sec' + Alasan: skewness = 4.3 (right-skewed). Log transform menurunkan ke 0.8. + Kode: df['time_sec'] = np.log1p(df['time_sec']) + +[STEP-02] One-hot encoding pada kolom 'scenario' + Alasan: variabel nominal (tidak ada urutan). + Output: 3 kolom dummy (attendance_baseline, +attention, +ensemble) + +[STEP-03] Min-Max normalization pada seluruh fitur numerik + Alasan: SVM dan neural network sensitif terhadap skala. + Penting: Scaler di-fit HANYA pada training fold (cross-validation). + +OUTPUT: exp03_processed.csv + preprocessing_pipeline.pkl +``` + +--- + +## Ringkasan Pertemuan 13 + +| Konsep | Inti | +|--------|------| +| Preprocessing vs Validasi | Validasi dulu (cek kebenaran), preprocessing kemudian (siapkan analisis) | +| Cleaning | Missing (drop/impute/flag) + Duplikat + Format Error | +| Transformation | Encoding kategoris + Agregasi runs → per-skenario | +| Normalization | Min-Max/Z-score/Log/Robust sesuai konteks + hindari data leakage | +| 4 Prinsip | Consistency · Transparency · Reproducibility · Minimal Distortion | + +--- + +## Final Statement & Output Praktis + +
+"Preprocessing yang tidak terdokumentasi adalah black box — tidak ada yang bisa memverifikasi apakah transformasi yang dilakukan valid atau tidak, termasuk penelitinya sendiri setelah 6 bulan." +
+ +### Output Praktis M13 + +Kumpulkan: + +1. **Dataset bersih** (`exp_processed.csv` — siap untuk analisis) +2. **Preprocessing pipeline** (kode Python / file `.pkl`) +3. **Dokumentasi preprocessing** (format [STEP-XX] lengkap dengan alasan) + +--- + +## Referensi Utama — Bab 13 + +- Famili, A., Shen, W. M., Weber, R., & Simoudis, E. (1997). Data preprocessing and intelligent data analysis. *Intelligent Data Analysis, 1*(1), 3–23. + +- Garcia, S., Luengo, J., & Herrera, F. (2015). *Data preprocessing in data mining*. Springer. + +- Kaufman, S., Rosset, S., Perlich, C., & Stitelman, O. (2012). Leakage in data mining: Formulation, detection, and avoidance. *ACM Transactions on Knowledge Discovery from Data, 6*(4), 1–21. + +- Géron, A. (2022). *Hands-on machine learning with Scikit-Learn, Keras, and TensorFlow* (3rd ed.). O'Reilly Media. diff --git a/slide/slide-14-data-analysis.md b/slide/slide-14-data-analysis.md new file mode 100644 index 0000000..b521273 --- /dev/null +++ b/slide/slide-14-data-analysis.md @@ -0,0 +1,1458 @@ +--- +marp: true +paginate: true +class: bagian-iv +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 14 — Data Analysis, Interpretation & Failure Analysis + +## Dari Data ke Pengetahuan yang Dapat Dipertanggungjawabkan + +*Pertemuan 14 (M14)  |  Sub-CPMK 4.3  |  CPMK04  |  CPL07* + +Fase: **Analyzing & Communicating** (M12–M16)  ·  Bagian IV + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 14 + +1. Perbedaan analisis dan interpretasi +2. Data → Knowledge Pipeline +3. Link wajib: Result → RQ → Hypothesis → Conclusion +4. Uji statistik untuk penelitian TI +5. Failure analysis — kegagalan sebagai sumber insight +6. Limitation — membatasi klaim dengan jujur +7. Cognitive Traps & Studi Kasus +8. Output Praktis: Analisis + Interpretasi + Failure Analysis + Limitation + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Membedakan **analisis** ("apa yang terjadi") dari **interpretasi** ("mengapa terjadi") +- Membangun rantai logis **hasil → RQ → hipotesis → kesimpulan** +- Melakukan **uji statistik** yang sesuai untuk mendukung klaim perbandingan +- Menulis **failure analysis** yang mengubah kegagalan menjadi insight +- Menyatakan **limitation** dengan jujur dan proporsional + +> Sub-CPMK 4.3 → Menganalisis, menginterpretasikan, dan menyimpulkan hasil eksperimen (CPL07) + +--- + +## Data → Knowledge Pipeline + +*Lima tahap yang dapat dibedakan secara epistemologis* + +
+ +**Data** (angka mentah, Bab 13) ↓ **Analysis** — "Apa yang terjadi?" (statistik deskriptif + uji hipotesis) ↓ **Interpretation** — "Mengapa ini terjadi?" (berbasis teori/literatur) ↓ **Explanation** — "Apa implikasinya?" (link ke RQ & kontribusi) ↓ **Knowledge** (temuan yang dapat dipercaya) + +
+ +> Melompat dari Data langsung ke Knowledge tanpa Analysis dan Interpretation → **pseudoscience**, bukan penelitian. + +--- + +## Analisis vs Interpretasi — Garis yang Tegas + +*Dua pertanyaan berbeda, dua langkah berbeda* + +| Aspek | Analisis | Interpretasi | +|-------|---------|-------------| +| **Pertanyaan** | Apa yang terjadi di data? | Mengapa ini terjadi? | +| **Sumber** | Data itu sendiri + statistik | Teori, literatur, pengetahuan domain | +| **Output** | Fakta tentang data (deskriptif + inferensial) | Penjelasan, mekanisme, insight | +| **Contoh** | "F1 dengan attention 87.0%, baseline 82.1%, p=0.003" | "Attention meningkatkan F1 karena model dapat fokus pada fitur kontekstual yang relevan" | + +> Analisis harus datang sebelum interpretasi. Interpretasi tanpa analisis = opini. Analisis tanpa interpretasi = laporan teknis, bukan penelitian. + +--- + +## Rantai Logis Wajib + +*Setiap klaim dalam laporan harus dapat ditelusuri* + +``` +RQ: "Apakah mekanisme attention meningkatkan F1 pada klasifikasi teks?" + +Hipotesis H1: "Penggunaan attention meningkatkan F1-macro secara signifikan" + +Hasil Empiris: + Attention: 0.891 ± 0.012 + Baseline: 0.841 ± 0.018 + Δ = +0.050, t(18) = 3.24, p = 0.004 + +Analisis: "Perbedaan signifikan secara statistik (p < 0.05). H1 diterima." + +Interpretasi: "Attention mechanism memungkinkan model untuk memberikan + bobot lebih pada token yang relevan secara kontekstual, + mengurangi noise dari token yang tidak informatif." + +Kesimpulan: "Attention meningkatkan F1-macro untuk klasifikasi teks + multi-kelas pada domain yang diuji." +``` + +--- + +## Uji Statistik dalam Penelitian TI + +*Memilih uji yang tepat untuk mendukung klaim* + +| Situasi | Uji yang Tepat | Asumsi | +|---------|---------------|--------| +| Bandingkan 2 model (≥5 runs/model) | Paired t-test atau Wilcoxon signed-rank | Normalitas (t-test) atau tidak (Wilcoxon) | +| Bandingkan 3+ model | One-way ANOVA → post-hoc Tukey | Normalitas, homogenitas varians | +| Ukuran efek (seberapa besar beda) | Cohen's d | — | +| Korelasi dua variabel | Pearson (linear) atau Spearman (non-linear) | — | + +```python +from scipy import stats + +# Paired t-test: 10 run attention vs 10 run baseline +t_stat, p_value = stats.ttest_rel(attention_results, baseline_results) +print(f"t = {t_stat:.3f}, p = {p_value:.4f}") + +# Effect size (Cohen's d) +d = (np.mean(attention_results) - np.mean(baseline_results)) / np.std(baseline_results) +print(f"Cohen's d = {d:.3f}") +``` + +--- + +## Failure Analysis — Kegagalan sebagai Insight + +*Tidak semua hipotesis terkonfirmasi — dan itu sebaiknya begitu* + +**Ketika H1 DITOLAK:** + +``` +Respons yang salah: "Hasil tidak sesuai hipotesis, diabaikan" +Respons yang salah: "Ganti metrik/dataset sampai H1 terkonfirmasi" (p-hacking) + +Respons yang benar: + 1. Terima hasil empiris apa adanya + 2. Investigasi mengapa hipotesis tidak terkonfirmasi + 3. Pertimbangkan apakah ada masalah pada desain eksperimen + 4. Tulis failure analysis — ini adalah kontribusi ilmiah! +``` + +**Nilai failure analysis:** +- Menambah pengetahuan tentang kondisi di mana pendekatan TIDAK bekerja +- Mencegah peneliti lain mengulangi jalan buntu yang sama +- Menunjukkan kejujuran ilmiah → meningkatkan kredibilitas penelitian + +--- + +## Template Failure Analysis + +``` +FAILURE ANALYSIS — Skenario "+Ensemble" + +Hipotesis: "+Ensemble akan meningkatkan F1 lebih tinggi dari +Attention" +Hasil aktual: +Ensemble (0.851 ± 0.013) vs +Attention (0.869 ± 0.011) +Status: H1b DITOLAK untuk skenario ini + +INVESTIGASI: +1. Waktu eksekusi +Ensemble 15% lebih tinggi (3124s vs 2706s) +2. Kedua model memiliki arsitektur yang serupa di bagian encoder +3. Ensemble hanya menggabungkan 2 model — jumlah terlalu sedikit + untuk mendapatkan keuntungan diversity yang signifikan + +PENJELASAN YANG MUNGKIN: +- Ensemble menguntungkan ketika model-model yang digabungkan + memiliki error yang tidak berkorelasi. Dua model dengan arsitektur + serupa cenderung membuat error yang sama. + +IMPLIKASI: Penelitian lanjutan perlu menguji ensemble > 3 model + dengan diversitas arsitektur yang lebih tinggi. +``` + +--- + +## Limitation — Kejujuran yang Memperkuat Klaim + +*Limitation bukan mengakui kelemahan — ini adalah presisi tentang domain of validity* + +**Apa yang harus ada di seksi limitation:** + +``` +LIMITATION + +1. Domain data: Eksperimen dilakukan pada dataset teks berbahasa Indonesia + (SMSA, 10.000 sampel). Generalisasi ke bahasa lain atau domain lain + belum diverifikasi. + +2. Ukuran dataset: Dataset berukuran sedang. Penelitian lanjutan dengan + dataset lebih besar diperlukan untuk mengkonfirmasi stabilitas temuan. + +3. Arsitektur baseline: Baseline menggunakan BiLSTM. Perbandingan dengan + transformer-based baseline (BERT) belum dilakukan. + +4. Hardware dependency: Eksperimen dijalankan pada GPU tunggal. Performa + dalam distributed setting mungkin berbeda. +``` + +> Limitation yang ditulis dengan baik **memperkuat** kreadibilitas penelitian, bukan melemahkannya. + +--- + + + +# Cognitive Traps +## Bab 14 — Analysis & Interpretation + +--- + +## Cognitive Traps — Bab 14 + +**"Hasil tinggi = hipotesis terkonfirmasi, tidak perlu analisis lebih lanjut"** +Angka tinggi tidak otomatis menjawab RQ. Harus ada uji statistik, perbandingan yang valid, dan interpretasi yang menghubungkan hasil ke teori. + +**"Kegagalan berarti penelitian gagal"** +Penelitian yang menghasilkan temuan negatif (hipotesis ditolak) tetap merupakan kontribusi ilmiah yang valid — bahkan seringkali lebih berharga karena mencegah peneliti lain mengulangi jalan buntu. + +**"Limitation tidak perlu ditulis agar terkesan lebih kuat"** +Tidak mencantumkan limitation tidak membuat klaim lebih kuat — sebaliknya membuat klaim tidak kredibel karena terkesan menyembunyikan sesuatu. Reviewer yang berpengalaman selalu mencari seksi limitation. + +**"Interpretasi saya tidak perlu didukung literatur"** +Interpretasi tanpa dukungan teori atau literatur = spekulasi. Setiap klaim interpretasi harus dapat menunjuk ke mekanisme yang diusulkan dalam literatur. + +--- + +## Studi Kasus 1 — Analysis Tanpa Interpretasi (Basic) + +**Laporan yang bermasalah:** +> "Model dengan attention menghasilkan F1 = 87.0%, sedangkan baseline F1 = 82.1%. Model attention lebih baik dari baseline. Hipotesis diterima." + +**Masalah:** +- Tidak ada uji statistik — apakah perbedaan 4.9pp tersebut signifikan? +- Tidak ada interpretasi — mengapa attention meningkatkan F1? +- Tidak ada kontekstualisasi — apakah 4.9pp besar atau kecil di literatur? + +**Versi yang benar:** +> "Model dengan attention (87.0 ± 1.1%) secara statistik signifikan melampaui baseline (82.1 ± 1.5%), t(18)=3.24, p=0.004, Cohen's d=1.02 (efek besar). Peningkatan ini konsisten dengan temuan Lee et al. (2024) yang menemukan bahwa attention mechanism meningkatkan F1 sebesar 3–6pp pada task klasifikasi teks. Mekanismenya diduga karena..." + +--- + +## Studi Kasus 2 — Honest Failure Analysis (Advanced) + +**Konteks:** Penelitian mengusulkan metode baru (Metode X) yang diharapkan 15% lebih akurat dari baseline. + +**Hasil:** Metode X hanya 2% lebih akurat. Tidak signifikan secara statistik (p = 0.18). + +**Respons yang salah:** +- Tukar metrik (dari F1-macro ke F1-micro) → p = 0.04. Laporkan ini saja. + +**Respons yang benar:** +``` +FAILURE ANALYSIS: + Hipotesis: Metode X meningkatkan akurasi >15% + Hasil: +2% (p = 0.18, tidak signifikan) + + Investigasi: BERT-based baseline yang digunakan telah mengimplementasikan + mekanisme yang serupa dengan Metode X. Gap yang diharapkan + tidak terwujud karena baseline sudah lebih kuat dari yang + diasumsikan saat desain eksperimen. + + Kontribusi: Mereplikasi baseline yang lebih kuat untuk task ini beserta + analisis kondisi di mana Metode X TIDAK memberikan gain signifikan. +``` + +--- + +## Ringkasan Pertemuan 14 + +| Konsep | Inti | +|--------|------| +| Analysis vs Interpretation | "Apa?" vs "Mengapa?" — keduanya wajib, berbeda | +| Rantai Logis | Result → RQ → Hipotesis → Kesimpulan (harus terhubung) | +| Uji Statistik | t-test/Wilcoxon + Cohen's d untuk perbandingan | +| Failure Analysis | Kegagalan = kontribusi ilmiah, bukan aib yang disembunyikan | +| Limitation | Mendefinisikan domain of validity = memperkuat klaim | + +--- + +## Final Statement & Output Praktis + +
+"Peneliti yang jujur lebih berharga dari peneliti yang 'selalu berhasil'. Ilmu pengetahuan dibangun dari akumulasi temuan yang jujur — termasuk yang negatif." +
+ +### Output Praktis M14 + +Dokumen yang harus dikumpulkan: + +1. **Hasil analisis** (statistik deskriptif + uji statistik) +2. **Interpretasi** (penjelasan berbasis teori untuk setiap temuan) +3. **Failure analysis** (jika ada hipotesis yang ditolak atau hasil di luar ekspektasi) +4. **Limitation section** (minimal 3 limitation yang relevan) + +--- + +## Referensi Utama — Bab 14 + +- Cohen, J. (1988). *Statistical power analysis for the behavioral sciences* (2nd ed.). Lawrence Erlbaum. + +- Demšar, J. (2006). Statistical comparisons of classifiers over multiple data sets. *Journal of Machine Learning Research, 7*, 1–30. + +- Goodman, S. (2008). A dirty dozen: Twelve p-value misconceptions. *Seminars in Hematology, 45*(3), 135–140. + +- Wohlin, C., Runeson, P., Höst, M., Ohlsson, M. C., Regnell, B., & Wesslén, A. (2012). *Experimentation in software engineering*. Springer. diff --git a/slide/slide-15-scientific-writing.md b/slide/slide-15-scientific-writing.md new file mode 100644 index 0000000..51cd5a6 --- /dev/null +++ b/slide/slide-15-scientific-writing.md @@ -0,0 +1,1433 @@ +--- +marp: true +paginate: true +class: bagian-iv +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 15 — Scientific Writing + +## Menyusun Argumen Ilmiah yang Koheren + +*Pertemuan 15 (M15)  |  Sub-CPMK 4.4  |  CPMK04  |  CPL07* + +Fase: **Analyzing & Communicating** (M12–M16)  ·  Bagian IV + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 15 + +1. Penulisan ilmiah = menyusun argumen, bukan dokumentasi +2. Scientific Argument Flow +3. Struktur IMRAD dan ekstensinya +4. Logical flow: Why → What → How → Result → So What +5. Konsistensi antar bagian laporan +6. Writing quality: clarity, precision, conciseness, consistency +7. Cognitive Traps & Studi Kasus +8. Output Praktis: Laporan Ilmiah Lengkap (IMRAD) + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Menjelaskan bahwa penulisan ilmiah adalah **konstruksi argumen**, bukan dokumentasi +- Menyusun laporan penelitian menggunakan **struktur IMRAD** yang lengkap +- Memastikan **logical flow** yang konsisten dari masalah ke kesimpulan +- Memeriksa **konsistensi** antar bagian laporan (problem ↔ RQ ↔ method ↔ result ↔ conclusion) +- Menerapkan **4 standar kualitas penulisan** ilmiah (clarity, precision, conciseness, consistency) + +> Sub-CPMK 4.4 → Menyusun laporan ilmiah yang koheren (CPL07) + +--- + +## Scientific Argument Flow + +*Arsitektur logis sebuah laporan ilmiah* + +
+ +**Problem** ↓ Gap (penelitian sebelumnya belum menjawabnya) ↓ Research Question ↓ Method (dengan kontrol yang tepat) ↓ Result (temuan empiris) ↓ Analysis (statistik + uji hipotesis) ↓ Conclusion (jawaban RQ + implikasi) ↓ **Contribution** + +
+ +--- + +## Penulisan Ilmiah ≠ Dokumentasi + +*Perbedaan yang mengubah cara kita menulis* + +| Aspek | Dokumentasi | Penulisan Ilmiah | +|-------|------------|-----------------| +| **Tujuan** | Mencatat apa yang sudah dilakukan | Meyakinkan pembaca tentang validitas klaim | +| **Struktur** | Kronologis (saya melakukan X, lalu Y) | Argumentatif (ada masalah, inilah solusi, inilah buktinya) | +| **Pembaca** | Diri sendiri / tim teknis | Komunitas penelitian yang skeptis | +| **Standar** | Selesai jika semua langkah tercatat | Selesai jika argumen terbukti dan dapat diverifikasi | + +> Kalau kamu menulis "Saya melakukan preprocessing menggunakan Python" → itu dokumentasi. +> Kalau kamu menulis "Normalisasi Min-Max diterapkan karena distribusi data sangat skewed (skewness=4.3), konsisten dengan rekomendasi Garcia et al. (2015)" → itu penulisan ilmiah. + +--- + +## Struktur IMRAD + Extension + +*Standar internasional laporan penelitian* + +| Bagian | Pertanyaan | Isi Utama | +|--------|-----------|-----------| +| **Introduction** | *Why?* | Masalah, gap literatur, RQ, hipotesis, kontribusi | +| **Method** | *How?* | Desain eksperimen, setting, metrik, prosedur | +| **Results** | *What did we find?* | Tabel, grafik, statistik deskriptif — tanpa interpretasi | +| **Analysis & Discussion** | *What does it mean?* | Interpretasi, failure analysis, limitation | +| **Conclusion** | *So what?* | Jawaban RQ, kontribusi, saran penelitian lanjutan | +| **References** | | Harvard/IEEE/APA style, konsisten | +| **Appendix** | | Log eksperimen lengkap, kode, data tambahan | + +--- + +## Logical Flow — Dari Why ke So What + +*Menu: semua harus terhubung satu sama lain* + +``` +WHY (Introduction): + "Klasifikasi teks multi-kelas pada teks informal bahasa Indonesia + masih memiliki F1 di bawah 85% karena belum ada penelitian yang + mengintegrasikan attention mechanism untuk konteks ini." + +WHAT (Research Question + Hypothesis): + "Apakah attention mechanism meningkatkan F1 pada klasifikasi teks + informal bahasa Indonesia? H1: Ya, secara signifikan." + +HOW (Method): + "Eksperimen terkontrol dengan 3 skenario, 10 run masing-masing, + BiLSTM baseline vs +Attention vs +Ensemble." + +RESULT (Results): + "Attention: 87.0 ± 1.1%, Baseline: 82.1 ± 1.5%, p=0.004." + +SO WHAT (Conclusion): + "Attention mechanism secara signifikan meningkatkan F1 pada domain ini. + Kontribusi: baseline baru + konfirmasi efektivitas attention pada + klasifikasi teks bahasa Indonesia informal." +``` + +--- + +## Konsistensi Antar Bagian + +*Cek silang yang wajib dilakukan sebelum submit* + +``` +Cek Konsistensi Internal Laporan: + +□ Problem di Introduction ←→ sesuai dengan RQ? +□ RQ ←→ sesuai dengan Hipotesis? +□ Hipotesis ←→ metrik utama yang diukur? +□ Metrik yang diukur ←→ dibahas di Results? +□ Results ←→ dikaitkan ke Hipotesis di Discussion? +□ Discussion ←→ menjawab RQ di Conclusion? +□ Contribution di Conclusion ←→ konsisten dengan Gap di Introduction? + +Inkonsistensi yang paling sering terjadi: + - RQ berbunyi "perbandingan" tapi Discussion tidak membandingkan + - Hipotesis menyebut metrik A, tapi hasil menekankan metrik B + - Conclusion mengklaim generalisasi yang lebih luas dari yang diuji +``` + +--- + +## Writing Quality — Empat Standar + +### 1. Clarity — Pembaca mengerti tanpa perlu membaca ulang +``` +"Sistem yang diimplementasikan menunjukkan hasil yang cukup baik." +"Sistem mencapai F1-micro 87.0%, melampaui baseline sebesar 4.9 pp." +``` + +### 2. Precision — Klaim spesifik, bukan ambigu +``` +"Metode X lebih cepat dari baseline." +"Metode X mengurangi inference time sebesar 23% (312ms vs 405ms)." +``` + +### 3. Conciseness — Katakan dengan sedikit kata tanpa kehilangan makna +``` +"Pada bagian ini kami akan menjelaskan tentang..." +"Bagian ini menjelaskan..." +``` + +### 4. Consistency — Sama persis dalam terminologi di seluruh dokumen +``` +Bab 1: "klasifikasi sentimen" → Bab 3: "analisis sentimen" → Bab 5: "opinion mining" +Pilih satu istilah, gunakan konsisten dari halaman 1 sampai akhir. +``` + +--- + + + +# Cognitive Traps +## Bab 15 — Scientific Writing + +--- + +## Cognitive Traps — Bab 15 + +**"Saya tulis sesuai urutan kronologis pelaksanaan"** +Pembaca tidak peduli dengan urutan kronologis. Mereka peduli dengan argumen ilmiah. IMRAD bukan kronologi — Introduction ditulis terakhir setelah kita tahu apa yang kita temukan. + +**"Results dan Discussion bisa digabung karena lebih efisien"** +Penggabungan boleh, tapi harus tetap jelas mana yang *fakta dari data* dan mana yang *interpretasi peneliti*. Mencampurnya tanpa penanda = membuat pembaca bingung apakah klaim tersebut empiris atau spekulatif. + +**"Tujuan: agar laporan terlihat panjang dan komprehensif"** +Panjang bukan tujuan. Argumen yang kuat, terstruktur, dan dapat diverifikasi adalah tujuan. Laporan yang panjang tapi tidak koheren lebih lemah dari laporan pendek yang argumentatif. + +**"Conclusion adalah ringkasan dari seluruh bab"** +Conclusion bukan ringkasan — ini adalah jawaban eksplisit terhadap RQ yang diajukan di Introduction. Harus ada kalimat yang secara langsung menjawab "Apakah X?" yang ditanyakan di awal. + +--- + +## Studi Kasus 1 — Inkonsistensi RQ–Conclusion (Basic) + +**RQ di Introduction:** +> "Apakah attention mechanism meningkatkan F1 pada klasifikasi teks bahasa Indonesia?" + +**Conclusion yang ditulis:** +> "Sistem yang dikembangkan berhasil mengklasifikasikan teks dengan akurasi yang baik dan dapat diimplementasikan dalam sistem nyata." + +**Masalah:** +1. RQ menanyakan "attention vs non-attention" → Conclusion tidak menjawab ini +2. RQ menanyakan "F1" → Conclusion menyebut "akurasi yang baik" (metrik berbeda!) +3. Conclusion mengklaim "sistem nyata" → ini tidak diuji dalam eksperimen + +**Conclusion yang benar:** +> "Attention mechanism secara signifikan meningkatkan F1-micro sebesar 4.9 pp (82.1% → 87.0%, p=0.004, d=1.02) pada klasifikasi teks informal bahasa Indonesia. H1 diterima. Penemuan ini mengkonfirmasi efektivitas attention pada konteks bahasa Indonesia dan menetapkan baseline baru untuk penelitian lanjutan." + +--- + +## Studi Kasus 2 — From Documentation to Argument (Advanced) + +**Versi dokumentasi:** +> "Pada preprocessing, kami melakukan normalisasi data menggunakan Min-Max. Kemudian kami membagi dataset menjadi training dan testing. Setelah itu kami melatih model BiLSTM. Hasilnya menunjukkan F1 sebesar 87%." + +**Versi argumentatif:** +> "Untuk mengontrol pengaruh perbedaan skala terhadap konvergensi model, normalisasi Min-Max diterapkan pada seluruh fitur numerik (García et al., 2015). Pembagian dataset 80:20 (stratified) memastikan representasi kelas yang proporsional di setiap split. Model BiLSTM dengan attention dilatih menggunakan konfigurasi yang ditetapkan dalam desain eksperimen (Bab 3). +> +> Skenario +Attention mencapai F1-micro 87.0 ± 1.1%, secara signifikan melampaui baseline BiLSTM tanpa attention (82.1 ± 1.5%), t(18)=3.24, p=0.004." + +--- + +## Checklist Akhir Sebelum Submit + +``` +LAPORAN FINAL — QUALITY GATE + +□ IMRAD structure lengkap (termasuk appendix dengan raw data) +□ RQ → Hipotesis → Metrik → Result → Conclusion: rantai konsisten +□ Semua klaim empiris dilengkapi angka dan uji statistik +□ Semua skenario dilaporkan (bukan hanya yang terbaik) +□ Failure analysis ada (jika hipotesis ditolak atau hasil tidak terduga) +□ Limitation section ada dan proporsional +□ Kutipan konsisten: semua yang disebut di teks ada di daftar pustaka +□ Format referensi konsisten (pilih satu: APA/IEEE/Harvard) +□ Terminologi konsisten dari bab 1 sampai akhir +□ Tidak ada klaim generalisasi yang melampaui scope eksperimen +``` + +--- + +## Ringkasan Pertemuan 15 + +| Konsep | Inti | +|--------|------| +| Scientific Argument Flow | Problem → Gap → RQ → Method → Result → Analysis → Conclusion → Contribution | +| Writing vs Documentation | Dokumentasi = kronologi, Ilmiah = argumen | +| IMRAD | Introduction–Method–Results–Analysis/Discussion–Conclusion | +| Logical Flow | Why → What → How → Result → So What | +| Konsistensi | Problem ↔ RQ ↔ Method ↔ Result ↔ Conclusion | +| Writing Quality | Clarity + Precision + Conciseness + Consistency | + +--- + +## Final Statement & Output Praktis + +
+"Penulisan ilmiah bukan tentang melaporkan apa yang kamu lakukan — ini tentang membangun kasus yang meyakinkan bahwa apa yang kamu temukan dapat dipercaya dan bermakna bagi komunitas penelitian." +
+ +### Output Praktis M15 + +Kumpulkan: + +1. **Laporan ilmiah lengkap** (format IMRAD, minimal 30 halaman) +2. **Cek konsistensi silang** (checklist diisi dan dilampirkan) +3. **Daftar pustaka** (minimal 15 referensi, format konsisten) + +--- + +## Referensi Utama — Bab 15 + +- Day, R. A., & Gastel, B. (2011). *How to write and publish a scientific paper* (7th ed.). Greenwood. + +- Swales, J. M., & Feak, C. B. (2012). *Academic writing for graduate students: Essential tasks and skills* (3rd ed.). University of Michigan Press. + +- Hofmann, A. H. (2013). *Scientific writing and communication: Papers, proposals, and presentations*. Oxford University Press. + +- Bem, D. J. (2004). Writing the empirical journal article. In J. M. Darley, M. P. Zanna, & H. L. Roediger III (Eds.), *The compleat academic: A practical guide for the beginning social scientist* (pp. 185–219). APA. diff --git a/slide/slide-16-presentation-defense.md b/slide/slide-16-presentation-defense.md new file mode 100644 index 0000000..0992d09 --- /dev/null +++ b/slide/slide-16-presentation-defense.md @@ -0,0 +1,1475 @@ +--- +marp: true +paginate: true +class: bagian-iv +header: 'RTI — Riset Teknologi Informasi | Universitas Putra Bangsa Kebumen' +footer: 'Helmi Bahar Alim, S.Kom., M.Kom. | 2026' +--- + + + + + + + + + + + + + + + + +# Bab 16 — Presentation & Defense + +## Mempertahankan Pengetahuan yang Telah Kamu Bangun + +*Pertemuan 16 (M16)  |  Sub-CPMK 4.5  |  CPMK04  |  CPL07* + +Fase: **Analyzing & Communicating** (M12–M16)  ·  Bagian IV + +**Pertemuan Penutup — M16 dari 16** + +**Universitas Putra Bangsa**  |  Fak. Sains & Teknologi  ·  Prodi Teknik Informatika + +--- + +## Agenda Pertemuan 16 + +1. Presentasi = simulasi peer review langsung +2. Scientific Defense Model +3. Struktur slide presentasi yang efektif +4. Membangun argumen yang kuat (claim + evidence + reasoning) +5. Mengantisipasi pertanyaan evaluator +6. Teknik menjawab pertanyaan +7. Cognitive Traps & Studi Kasus +8. **Full Circle: Bab 16 = Bab 1 Revisited** +9. Output Praktis: Slide + Defense Argument + Jawaban Berbasis Data + +--- + +## Capaian Pembelajaran + +Setelah pertemuan ini, mahasiswa mampu: + +- Memahami bahwa presentasi adalah **simulasi peer review** — bukan formalitas +- Membangun **argumen defensif** berbasis data (claim + evidence + reasoning) +- **Mengantisipasi pertanyaan** evaluator berdasarkan kategori yang umum +- **Menjawab pertanyaan** secara langsung, berbasis data, dan dengan akui limitation bila perlu +- Menampilkan **slide presentasi** yang komunikatif dan tidak membebani pendengar + +> Sub-CPMK 4.5 → Mempresentasikan dan mempertahankan penelitian secara ilmiah (CPL07) + +--- + +## Scientific Defense Model + +*Dari karya penelitian ke penerimaan komunitas* + +
+ +**Research Work** (Bab 1–15) ↓ Presentation (komunikasi terstruktur & persuasif) ↓ Questioning (evaluator menantang klaim) ↓ Defense — Argumentation (claim + evidence + reasoning) ↓ Evaluation (validitas klaim + kemampuan defend) ↓ **Acceptance** + +
+ +> Defense bukan ujian hafalan — ini adalah **simulasi peer review langsung**. Pertanyaan evaluator adalah versi lisan dari proses review yang terjadi di jurnal ilmiah. + +--- + +## Presentasi ≠ Membaca Ulang Laporan + +*Perbedaan antara slide yang baik dan slide yang buruk* + +| Aspek | Slide Buruk | Slide Efektif | +|-------|-------------|-------------------| +| Teks | Copy-paste dari laporan | Poin kunci saja (max 5 bullets) | +| Angka | Semua angka dari tabel | Hanya angka paling penting | +| Visual | Tidak ada / dekoratif | Grafik yang menceritakan story | +| Presenter | Membaca slide | Menggunakan slide sebagai anchor | +| Waktu | 1 menit per slide | 2–3 menit per slide (kedalaman) | + +**Struktur slide presentasi (15 menit):** +- Slide 1–2: Motivasi + Masalah (3 mnt) +- Slide 3–4: Method + Setup (3 mnt) +- Slide 5–7: Hasil + Visualisasi kunci (5 mnt) +- Slide 8–9: Diskusi + Conclusion (3 mnt) +- Slide 10: Q&A ready + +--- + +## Membangun Argumen Defensif — Struktur Toulmin + +*Setiap klaim penelitian harus punya struktur argumen yang kuat* + +``` +CLAIM (klaim yang kamu pertahankan): + "Attention mechanism secara signifikan meningkatkan performa + klasifikasi teks bahasa Indonesia." + +EVIDENCE (bukti empiris): + "F1-macro meningkat dari 82.1 ± 1.5% ke 87.0 ± 1.1%. + Uji t berpasangan: t(18)=3.24, p=0.004, d=1.02." + +REASONING (mekanisme yang menghubungkan): + "Attention memungkinkan model memberi bobot berbeda pada token, + sehingga token yang bermakna secara kontekstual mendapat penekanan + lebih dibanding kata stopword. Ini konsisten dengan Lee et al. (2024) + yang menemukan pattern serupa pada bahasa morfologis tinggi." + +QUALIFIER (batas validitas): + "Dalam konteks teks informal bahasa Indonesia, dataset SMSA, + BiLSTM backbone. Generalisasi ke bahasa lain belum diverifikasi." +``` + +--- + +## Mengantisipasi Pertanyaan Evaluator + +*Kategori pertanyaan yang paling sering muncul di sidang* + +| Kategori | Contoh Pertanyaan | Persiapan | +|----------|-----------------|-----------| +| **Problem/Gap** | "Mengapa masalah ini penting? Sudah ada penelitian serupa?" | Siapkan 3 referensi gap terkini | +| **Method** | "Mengapa pilih BiLSTM bukan BERT?" | Siapkan justifikasi berbasis literatur dan resource constraint | +| **Metric** | "Mengapa F1-macro dan bukan accuracy?" | Siapkan penjelasan class imbalance + alasan metodologis | +| **Result** | "Confidence interval-nya berapa?" | Siapkan tabel lengkap + p-value | +| **Validity** | "Dataset ini representatif?" | Siapkan deskripsi distribusi dataset | +| **Limitation** | "Apa kelemahan penelitian ini?" | Jawab jujur + saran penelitian lanjutan | + +--- + +## Teknik Menjawab Pertanyaan + +*Tiga mode jawaban sesuai situasi* + +### Mode 1 — Jawab Langsung dengan Data +``` +Q: "Bagaimana model Anda menangani kelas minoritas?" +A: "Kami menggunakan F1-macro yang memberikan bobot setara ke semua kelas. + Dari confusion matrix (halaman 47), kelas minoritas 'neutral' + mencapai F1 = 0.79, dibanding baseline 0.68." +``` + +### Mode 2 — Akui Limitation + Tunjukkan Arah +``` +Q: "Bagaimana perbandingan dengan BERT?" +A: "Itu limitation yang kami akui di halaman 52. BiLSTM dipilih karena + resource constraint dan scope penelitian ini. Perbandingan dengan + BERT adalah arah penelitian lanjutan yang jelas." +``` + +### Mode 3 — Klarifikasi Pertanyaan Ambigu +``` +Q: "Sistemnya scalable?" +A: "Bisa Bapak/Ibu klarifikasi — scalable dalam konteks ukuran dataset + atau throughput inference? Kami mengukur keduanya dalam eksperimen." +``` + +--- + + + +# Cognitive Traps +## Bab 16 — Defense & Presentation + +--- + +## Cognitive Traps — Bab 16 + +**"Presentasi = membacakan laporan lebih cepat"** +Presentasi ilmiah bukan summary dari laporan. Ini adalah penampilan narasi penelitian yang paling penting: mengapa masalah ini penting dan mengapa temuan Anda dapat dipercaya. Slide adalah pendukung bicara, bukan pengganti bicara. + +**"Menjawab 'tidak tahu' adalah tanda kelemahan"** +Menjawab "Itu di luar scope penelitian ini" atau "Itu adalah gap yang menarik untuk penelitian lanjutan" adalah jawaban yang benar dan jujur. Evaluator menghargai presisi lebih dari kepura-puraan tahu segalanya. + +**"Pertanyaan sulit berarti presentasi saya gagal"** +Pertanyaan mendalam adalah tanda bahwa evaluator TERTARIK dengan penelitian Anda. Pertanyaan mudah atau tidak ada pertanyaan justru mengkhawatirkan. Defense yang baik = dialog intelektual yang produktif. + +**"Saya harus defend semua klaim, termasuk yang lemah"** +Defender yang baik tahu mana yang perlu dipertahankan kuat dan mana yang perlu diakui sebagai limitation. Mempertahankan sesuatu yang lemah dengan keras hanya merusak kredibilitas. + +--- + +## Studi Kasus 1 — Pertanyaan yang Tidak Diantisipasi (Basic) + +**Situasi:** Mahasiswa mempresentasikan penelitian klasifikasi sentimen. + +**Q evaluator:** "Mengapa dataset Anda hanya 5.000 sampel? Apakah cukup?" + +**Jawaban yang salah:** +> "Karena segitu yang ada, jadi saya pakai itu saja." + +**Jawaban yang benar:** +> "Ukuran dataset 5.000 sampel dipilih berdasarkan dua pertimbangan. +> Pertama, penelitian pembanding (Andi et al., 2023) menggunakan 4.700 sampel domain serupa. +> Kedua, power analysis menunjukkan bahwa 5.000 sampel cukup untuk mendeteksi +> efek medium (d=0.5) dengan power 0.80. +> +> Kami mengakui bahwa dataset lebih besar akan meningkatkan external validity. +> Ini adalah salah satu limitation yang kami cantumkan di Bab 5." + +--- + +## Studi Kasus 2 — Berpindah dari Defense ke Dialog (Advanced) + +**Q evaluator:** "Saya perhatikan Anda tidak menggunakan cross-validation. Kenapa?" + +**Jawaban defensif:** +> "Dataset kami sudah cukup besar, jadi tidak perlu cross-validation." + +**Jawaban berbasis data + akui limitation + tunjukkan arah:** +> "Keputusan itu memang kami pertimbangkan. Kami menggunakan hold-out split +> 80:20 karena computational constraint menjalankan 10-fold cross-validation +> pada 10 skenario × 5 run setiap skenario membutuhkan waktu ~300 jam GPU. +> +> Anda benar bahwa k-fold cross-validation akan memberikan estimasi variance +> yang lebih robust. Kami mencantumkan ini sebagai limitation di halaman 52. +> Untuk penelitian lanjutan dengan resource lebih, k-fold adalah langkah yang +> tepat. Terima kasih atas masukannya." + +--- + +## Persiapan Q&A yang Terstruktur + +*Template persiapan defense sebelum sidang* + +``` +Q&A PREPARATION SHEET + +PERTANYAAN CATEGORY 1 — Problem/Motivation + Q: Mengapa masalah ini penting? + A: [3 alasan + 1 statistik dari literatur] + Slides pendukung: Slide 2, 3 + +PERTANYAAN CATEGORY 2 — Methodology + Q: Mengapa BiLSTM, bukan transformer? + A: [Resource constraint + comparable performance + scope] + Slides pendukung: Slide 5 + +PERTANYAAN CATEGORY 3 — Results + Q: Apakah hasil ini generalizable? + A: [Dataset description + limitation + external validity caveat] + Slides pendukung: Slide 7, 8 + +BACKUP SLIDES (tidak ditampilkan kecuali ditanya): + - Confusion matrix lengkap + - Hyperparameter tuning results + - Statistical test details + - Full comparison table semua skenario +``` + +--- + + + +# Full Circle — Bab 16 = Bab 1 Revisited + +> *"Bab 1 mengajarkan kita bahwa penelitian adalah tentang memastikan hasil dapat dipercaya.* +> +> *Bab 16 adalah ujian apakah kita benar-benar berhasil melakukannya."* + +**Research Trust Model (Bab 1):** + +``` +Reality → Data → Processing → Analysis → Inference → Knowledge +``` + +**Defense menguji setiap mata rantai:** +- Apakah data dikumpulkan dengan integritas? (Bab 10–11) +- Apakah processing valid dan terdokumentasi? (Bab 13) +- Apakah analysis dilakukan dengan benar? (Bab 14) +- Apakah inference dibatasi dengan limitation yang jujur? (Bab 14–15) +- Apakah knowledge yang dihasilkan layak dipercaya oleh komunitas? (Bab 16) + +--- + +## Perjalanan 16 Pertemuan — Ringkasan Besar + +| Bagian | Bab | Fase | Inti | +|--------|-----|------|------| +| **Bagian I** | 1–4 | Thinking | Mindset → Masalah → Gap → RQ | +| **Bagian II** | 5–8 | Designing | Metrik → Sistem → Eksperimen → Proposal | +| **Bagian III** | 9–11 | Executing | Implementasi → Eksekusi → Validasi | +| **Bagian IV** | 12–16 | Communicating | Sajikan → Preprocess → Analisis → Tulis → Defend | + +> Dari "Apa itu penelitian?" ke "Saya bisa mempertahankan penelitian saya di depan evaluator" — itulah perjalanan 16 pertemuan ini. + +--- + +## Ringkasan Pertemuan 16 + +| Konsep | Inti | +|--------|------| +| Defense Model | Research Work → Presentation → Questioning → Defense → Evaluation → Acceptance | +| Argumen | Claim + Evidence + Reasoning + Qualifier | +| Antisipasi Q | 6 kategori pertanyaan evaluator | +| Teknik Jawab | Langsung/Data · Akui Limitation · Klarifikasi | +| Slide Efektif | Anchor bicara, bukan pengganti bicara | +| Full Circle | Bab 16 menguji semua yang dipelajari dari Bab 1 | + +--- + +## Final Statement & Output Praktis + +
+"Defense bukan akhir dari penelitian. Defense adalah awal dari kontribusi Anda kepada komunitas ilmiah. Penelitian yang dipertahankan dengan baik adalah penelitian yang siap dipublikasikan." +
+ +### Output Praktis M16 — Penutup Mata Kuliah + +Kumpulkan paket final: + +1. **Slide presentasi** (10–12 slide, format Marp atau PowerPoint) +2. **Q&A preparation sheet** (minimal 10 pasang Q&A yang diantisipasi) +3. **Laporan ilmiah final** (IMRAD lengkap + appendix) +4. **Repository penelitian** (kode, data, log eksperimen, README) + +--- + +## Referensi Utama — Bab 16 + +- Booth, W. C., Colomb, G. G., Williams, J. M., Bizup, J., & FitzGerald, W. T. (2016). *The craft of research* (4th ed.). University of Chicago Press. + +- Sword, H. (2012). *Stylish academic writing*. Harvard University Press. + +- Toulmin, S. E. (2003). *The uses of argument* (updated ed.). Cambridge University Press. + +- Lebrun, J. L. (2011). *Scientific writing 2.0: A reader and writer's guide*. World Scientific. diff --git a/slide/theme/logo-upb.png b/slide/theme/logo-upb.png new file mode 100644 index 0000000000000000000000000000000000000000..1aa4224132725035f2393813a39051bdfe720f98 GIT binary patch literal 180402 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

O`|Q_spvn$KZG~#~jfR(7Wcs_~ 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 k{!rabX2x3RQT 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: + cover = Cover / halaman judul + section-header = Pembatas antar-topik + integrative = Bab 8 (UTS — gradien biru-ungu) + fullcircle = Bab 16 penutup (gradien gelap) + ============================================================ +*/ + +/* ============================================================ + 1. CSS CUSTOM PROPERTIES — DEFAULT (Bagian I · Biru) + ============================================================ */ +section { + --accent: #2563EB; + --accent-dark: #1e3a5f; + --accent-light: #eff6ff; + --accent-border: #bfdbfe; + --cover-grad: linear-gradient(135deg, #1e3a5f 0%, #2563EB 100%); + --cover-sub: #bfdbfe; + --cover-meta: #93c5fd; + + font-family: 'Segoe UI', Arial, sans-serif; + font-size: 1.1em; + color: #1e293b; + padding: 40px 60px; +} + +/* ============================================================ + 2. VARIAN WARNA PER BAGIAN + ============================================================ */ + +/* Bagian II — Hijau */ +section.bagian-ii { + --accent: #059669; + --accent-dark: #064e3b; + --accent-light: #ecfdf5; + --accent-border: #a7f3d0; + --cover-grad: linear-gradient(135deg, #064e3b 0%, #059669 100%); + --cover-sub: #a7f3d0; + --cover-meta: #6ee7b7; +} + +/* Bagian III — Oranye */ +section.bagian-iii { + --accent: #d97706; + --accent-dark: #78350f; + --accent-light: #fffbeb; + --accent-border: #fde68a; + --cover-grad: linear-gradient(135deg, #78350f 0%, #d97706 100%); + --cover-sub: #fde68a; + --cover-meta: #fcd34d; +} + +/* Bagian IV — Ungu */ +section.bagian-iv { + --accent: #7c3aed; + --accent-dark: #3b0764; + --accent-light: #f5f3ff; + --accent-border: #ddd6fe; + --cover-grad: linear-gradient(135deg, #3b0764 0%, #7c3aed 100%); + --cover-sub: #ddd6fe; + --cover-meta: #c4b5fd; +} + +/* ============================================================ + 3. LAYOUT: COVER + ============================================================ */ +section.cover { + background: var(--cover-grad); + color: white; + justify-content: center; + text-align: center; +} + +/* Logo dimuat dari CSS — tidak perlu tag img di markdown */ +section.cover::before { + content: ''; + display: block; + width: 90px; + height: 90px; + background: white url('../theme/logo-upb.png') center / contain no-repeat; + border-radius: 8px; + padding: 6px; + margin: 0 auto 14px; + box-sizing: border-box; +} + +section.cover h1 { + color: white; + font-size: 2em; + margin-bottom: 8px; + border-bottom: none; +} + +section.cover h2 { + color: var(--cover-sub); + font-size: 1.1em; + font-weight: normal; +} + +section.cover p { color: var(--cover-meta); font-size: 0.85em; } +section.cover strong { color: white; } + +/* ============================================================ + 4. LAYOUT: SECTION HEADER (pembatas topik) + ============================================================ */ +section.section-header { + background: var(--accent); + color: white; + justify-content: center; + text-align: center; +} + +section.section-header h1 { + color: white; + font-size: 2.5em; + border-bottom: none; +} + +section.section-header h2 { color: rgba(255, 255, 255, 0.85); } + +/* ============================================================ + 5. LAYOUT: INTEGRATIVE (Bab 8 — UTS Checkpoint) + ============================================================ */ +section.integrative { + background: linear-gradient(135deg, #1e3a5f 0%, #7c3aed 100%); + color: white; + justify-content: center; + text-align: center; +} + +section.integrative::before { + content: ''; + display: block; + width: 90px; + height: 90px; + background: white url('../theme/logo-upb.png') center / contain no-repeat; + border-radius: 8px; + padding: 6px; + margin: 0 auto 14px; + box-sizing: border-box; +} + +section.integrative h1 { + color: white; + font-size: 2.2em; + border-bottom: none; +} + +section.integrative h2 { color: #ddd6fe; font-size: 1.1em; } +section.integrative p { color: #c4b5fd; font-size: 0.85em; } +section.integrative strong { color: white; } + +/* ============================================================ + 6. LAYOUT: FULLCIRCLE (Bab 16 — Penutup) + ============================================================ */ +section.fullcircle { + background: linear-gradient(135deg, #1e293b 0%, #1e3a5f 50%, #1e293b 100%); + color: white; + justify-content: center; + text-align: center; +} + +section.fullcircle h1 { + color: #ddd6fe; + font-size: 2.2em; + border-bottom: 3px solid #7c3aed; +} + +section.fullcircle blockquote { + border-left: 5px solid #7c3aed; + background: rgba(255, 255, 255, 0.08); + color: #ddd6fe; + font-style: italic; +} + +/* ============================================================ + 7. ELEMEN KONTEN — menggunakan CSS vars dari bagian + ============================================================ */ + +h1 { + color: var(--accent); + border-bottom: 3px solid var(--accent); + padding-bottom: 8px; +} + +h2 { color: var(--accent-dark); font-size: 1.3em; } +h3 { color: var(--accent); font-size: 1.05em; } + +blockquote { + border-left: 5px solid var(--accent); + background: var(--accent-light); + padding: 12px 20px; + margin: 16px 0; + color: var(--accent-dark); + font-style: italic; + border-radius: 0 8px 8px 0; +} + +table { font-size: 0.82em; width: 100%; border-collapse: collapse; } +th { background: var(--accent); color: white; padding: 8px 12px; } +td { padding: 6px 12px; border-bottom: 1px solid var(--accent-border); } +tr:nth-child(even) td { background: var(--accent-light); } + +code { + background: var(--accent-light); + color: var(--accent-dark); + padding: 2px 6px; + border-radius: 4px; + font-size: 0.9em; +} + +pre { + background: #f1f5f9; + color: #1e293b; + padding: 16px; + border-radius: 8px; + border-left: 4px solid var(--accent-border); +} + +ul li, ol li { margin-bottom: 6px; line-height: 1.6; } + +/* ============================================================ + 8. HELPER CLASSES + ============================================================ */ + +/* Status / penekanan */ +.warn { color: #d97706; font-weight: bold; } +.good { color: #059669; font-weight: bold; } +.bad { color: #dc2626; font-weight: bold; } + +/* Kotak pernyataan akhir */ +.final { + background: #fef3c7; + border-left: 5px solid #d97706; + padding: 14px 20px; + border-radius: 0 8px 8px 0; + font-size: 1.1em; +} + +/* Kotak highlight */ +.highlight-box { + background: var(--accent-light); + border-left: 5px solid var(--accent); + color: var(--accent-dark); + padding: 16px 20px; + border-radius: 8px; + margin: 12px 0; +} + +/* Kotak checkpoint bab 8 */ +.checkpoint { + background: #f5f3ff; + border: 2px solid #7c3aed; + border-radius: 8px; + padding: 16px 24px; + margin: 16px 0; +} + +/* ============================================================ + 9. PAGINATION & HEADER/FOOTER + ============================================================ */ +section::after { + font-size: 0.7em; + color: #94a3b8; +} + +section[data-marpit-advanced-background] > div:last-child { padding: 40px 60px; }