<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Rifai Martin on Medium]]></title>
        <description><![CDATA[Stories by Rifai Martin on Medium]]></description>
        <link>https://medium.com/@rifamartin?source=rss-4050401565a4------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*FB96VWb6EMcNqh6YdQDMew.jpeg</url>
            <title>Stories by Rifai Martin on Medium</title>
            <link>https://medium.com/@rifamartin?source=rss-4050401565a4------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 02:44:39 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@rifamartin/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Refleksi Pembelajaran NLP: Menjelajahi Transformer dari Konsep Dasar hingga Penerapan Praktis]]></title>
            <link>https://medium.com/@rifamartin/refleksi-pembelajaran-nlp-menjelajahi-transformer-dari-konsep-dasar-hingga-penerapan-praktis-ff8cc3148cb7?source=rss-4050401565a4------2</link>
            <guid isPermaLink="false">https://medium.com/p/ff8cc3148cb7</guid>
            <category><![CDATA[transformers]]></category>
            <category><![CDATA[supervised-learning]]></category>
            <category><![CDATA[hugging-face]]></category>
            <category><![CDATA[nlp]]></category>
            <dc:creator><![CDATA[Rifai Martin]]></dc:creator>
            <pubDate>Wed, 12 Mar 2025 02:36:15 GMT</pubDate>
            <atom:updated>2025-03-12T05:20:37.360Z</atom:updated>
            <content:encoded><![CDATA[<h4>(Minggu 5–7)</h4><h3>Pendahuluan</h3><p>Artikel ini merupakan refleksi pembelajaran kolektif dari kelompok kami tentang materi Natural Language Processing (NLP) yang dipelajari pada minggu ke-5 hingga minggu ke-7. Dalam periode ini, kami mempelajari berbagai aspek penting dalam pengembangan model NLP modern, dengan fokus utama pada arsitektur Transformer yang telah merevolusi bidang pemrosesan bahasa alami.</p><p>Berdasarkan modul pembelajaran yang disusun oleh Bapak <a href="https://medium.com/u/60752bf53018">Feliks VP Samosir</a>, S.Pd., M.Kom., kami memperoleh pemahaman mendalam tentang dasar-dasar arsitektur Transformer, kerangka kerja encoder-decoder, mekanisme perhatian (attention mechanism), dan ekosistem Hugging Face</p><p>Transformer telah menjadi fondasi penting dalam kemajuan NLP beberapa tahun terakhir. Sejak diperkenalkan melalui paper “Attention is All You Need” oleh Vaswani et al. pada 2017, model ini telah mengatasi berbagai keterbatasan pendekatan sebelumnya dan menghasilkan peningkatan performa yang signifikan pada berbagai tugas NLP. Artikel ini akan membahas tiga topik utama yang kami pelajari: pengantar arsitektur Transformer, teknik klasifikasi teks, dan anatomi detail dari model Transformer.</p><h3><strong>Minggu 5: Memahami Model Transformer: Dari Struktur Fundamental hingga Aplikasi Praktis dengan Hugging Face (Pengantar Transformer) — </strong><a href="https://medium.com/u/fc32fdda507f"><strong>Ilham Daulay</strong></a><strong> — </strong><a href="https://medium.com/u/4050401565a4"><strong>Rifai Martin</strong></a></h3><p>Minggu ke-5 diawali dengan pengenalan terhadap evolusi arsitektur Transformer sebagaimana dijelaskan dalam modul NLP_Mod5_Intro_to_Transformers. Kami mempelajari bagaimana Transformer, yang diperkenalkan dalam paper “Attention Is All You Need” (2017) oleh Google, telah merevolusi bidang NLP bersama dengan model-model seperti ULMFiT, GPT, dan BERT.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xpDSimHTYDLJry6kZ4SktQ.png" /><figcaption>Gambar 1: Timeline Perkembangan Transformer</figcaption></figure><p>Pembahasan dimulai dari keterbatasan arsitektur rekuren (RNN dan LSTM) yang sebelumnya mendominasi bidang NLP. Meskipun efektif, RNN memiliki kelemahan fundamental: komputasinya bersifat berurutan(sequentil) dan tidak dapat diparalelkan.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*b1lY8fbQ0pCRS2DhNjfgmA.png" /><figcaption>Gambar 2: Unrolling an RNN in Time</figcaption></figure><p>Hal ini menyebabkan pemrosesan teks panjang menjadi tidak efisien, dengan informasi penting seringkali hilang saat jarak antar kata terlalu jauh.</p><p>Kami kemudian memahami kerangka kerja encoder-decoder yang menjadi dasar Transformer. Modul menjelaskan bagaimana encoder mengubah kalimat input (misalnya “Transformers are great!”) menjadi representasi numerik atau context vector, yang kemudian digunakan decoder untuk menghasilkan output (misalnya terjemahan “Transformer sind grossartig!”).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KfzJ5hIFHcq9M6p6U_xFcg.png" /><figcaption>Gambar 3 : Encoder-Decoder Architecture</figcaption></figure><p>Namun, pendekatan ini masih memiliki masalah “information bottleneck” ketika mengompres seluruh input ke dalam satu vektor.</p><p>Inovasi kunci dari Transformer adalah mekanisme attention, yang memungkinkan decoder untuk mengakses seluruh hidden states dari encoder, bukan hanya state terakhir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*53l79y78qHLkObQbnwDaAQ.png" /><figcaption>Gambar 4 :Encoder-Decoder dengan Attention Mechanism</figcaption></figure><p>Lebih jauh lagi, Transformer memperkenalkan self-attention, dimana setiap kata dalam urutan dapat “memperhatikan” semua kata lainnya, memungkinkan pemahaman konteks yang lebih kaya dan pemrosesan paralel yang efisien.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Kr0X9DC2fuYoKEsgwO8FVQ.png" /><figcaption>Gambar 5: Self-Attention Mechanism</figcaption></figure><p>Dalam self-attention, setiap kata diproyeksikan ke tiga vektor: Query (Q), Key (K), dan Value (V). Attention scores dihitung antara queries dan keys, lalu digunakan untuk menggabungkan values dengan bobot yang sesuai. Implementasi dasarnya dapat dirumuskan sebagai:</p><pre># Simplified implementation of multi-head attention<br>class MultiHeadAttention(nn.Module):<br>    def __init__(self, d_model, num_heads):<br>        super().__init__()<br>        self.d_model = d_model<br>        self.num_heads = num_heads<br>        self.head_dim = d_model // num_heads<br>        <br>        self.q_linear = nn.Linear(d_model, d_model)<br>        self.k_linear = nn.Linear(d_model, d_model)<br>        self.v_linear = nn.Linear(d_model, d_model)<br>        self.out_linear = nn.Linear(d_model, d_model)<br>        <br>    def forward(self, q, k, v, mask=None):<br>        batch_size = q.size(0)<br>        <br>        # Linear projections and reshape<br>        q = self.q_linear(q).view(batch_size, -1, self.num_heads, self.head_dim).transpose(1, 2)<br>        k = self.k_linear(k).view(batch_size, -1, self.num_heads, self.head_dim).transpose(1, 2)<br>        v = self.v_linear(v).view(batch_size, -1, self.num_heads, self.head_dim).transpose(1, 2)<br>        <br>        # Scaled dot-product attention<br>        scores = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(self.head_dim)<br>        <br>        if mask is not None:<br>            scores = scores.masked_fill(mask == 0, -1e9)<br>            <br>        attention_weights = F.softmax(scores, dim=-1)<br>        output = torch.matmul(attention_weights, v)<br>        <br>        # Reshape and final linear projection<br>        output = output.transpose(1, 2).contiguous().view(batch_size, -1, self.d_model)<br>        <br>        return self.out_linear(output)</pre><p>Pada bagian akhir modul, kami mempelajari konsep transfer learning dalam NLP dan bagaimana ekosistem Hugging Face telah menyederhanakan penggunaan model-model pretrained Transformer.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fYYrIB69TaDNo9uSOQudUg.png" /><figcaption>Gambar 6: Transfer Learning vs Supervised learning</figcaption></figure><blockquote>Perbandingan antara supervised learning (kiri) dan transfer learning (kanan). Supervised learning melatih dan mengevaluasi model pada domain/tugas yang sama, sementara transfer learning mengekstrak pengetahuan dari tugas sumber (Domain A) dan menerapkannya ke tugas target yang berbeda (Domain B) dengan mempertahankan Body A sebagai inisialisasi.</blockquote><p>Hugging Face menyediakan akses ke ribuan model untuk berbagai tugas NLP, dengan antarmuka yang konsisten dan mudah digunakan.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/853/1*99BgFylHiBt8TgFFX0NXxQ.png" /><figcaption>Gambar 7: Ekosistem Hugging Face</figcaption></figure><p>Sebagai contoh, kami dapat menjalankan klasifikasi sentimen hanya dengan beberapa baris kode:</p><pre>from transformers import pipeline<br><br>classifier = pipeline(&quot;text-classification&quot;)<br>result = classifier(&quot;Saya sangat menyukai kuliah NLP ini.&quot;)<br>print(result)  # Output: [{&#39;label&#39;: &#39;POSITIVE&#39;, &#39;score&#39;: 0.9998}]</pre><p>Melalui pembelajaran ini, kami memahami bahwa kombinasi arsitektur Transformer dengan transfer learning telah membuka era baru dalam NLP, memungkinkan pengembangan aplikasi bahasa yang lebih canggih dengan data terbatas dan komputasi yang lebih efisien.</p><h3>Minggu 6: Teknik Klasifikasi Teks Menggunakan Transformer: Dari Tahap Pengolahan Data hingga Evaluasi Kinerja Model — <a href="https://medium.com/u/4f91cb89069a">Vaniasyifaa</a>— <a href="https://medium.com/u/7166b40e15b8">Kartikasofia</a></h3><p>Pada minggu ke-6, kami mempelajari teknik klasifikasi teks menggunakan model Transformer. Klasifikasi teks dalam NLP dapat digunakan untuk berbagai tugas, seperti memberi tag pada ulasan pelanggan, memisahkan email spam, dan melakukan analisis sentimen. Misalnya, mengidentifikasi emosi seperti “marah” atau “gembira” dalam tweet tentang suatu produk.</p><p>DistilBERT, versi ringan dari BERT, cocok untuk tugas ini karena tetap memiliki performa yang baik namun lebih kecil dan efisien, memungkinkan pelatihan cepat dalam beberapa menit.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/545/0*V7jH8aNbLDvB_-gI" /><figcaption>Gambar 8: Arsitektur DistilBERT</figcaption></figure><p>Pembahasan dimulai dengan pengenalan library Hugging Face yang menyediakan tiga komponen utama — <strong>Datasets, Tokenizers, dan Transformers</strong> — untuk memudahkan proses dari teks mentah hingga model yang telah disesuaikan. Dengan library ini, model dapat langsung digunakan untuk menganalisis tweet baru secara efisien.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*RumFa4ZHbWpIPL1v" /></figure><p>Kami menggunakan dataset dari artikel “CARER: Contextualized Affect Representations for Emotion Recognition (2018)” untuk menganalisis emosi dalam tweet berbahasa Inggris. Berbeda dari dataset analisis sentimen biasa yang hanya memiliki polaritas positif dan negatif, dataset ini mencakup enam emosi dasar: kemarahan, jijik, ketakutan, kegembiraan, kesedihan, dan kejutan.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/663/0*b3hfj3i7jGaElMqA" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*vaxqyiCCL3auX0P0" /></figure><p>Datasets menyediakan metode set_format() yang memungkinkan kita mengubah format keluaran dari Dataset, memudahkan konversi ke DataFrame untuk analisis lebih lanjut.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/818/0*ehF9af-jitTmnqqo" /></figure><p>Kami kemudian menganalisis distribusi kelas untuk memahami keseimbangan dataset. Hal ini penting karena dataset dengan distribusi kelas yang tidak seimbang memerlukan penanganan khusus, baik dari segi training loss maupun metrik evaluasi.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*nBCGAld2UgriWrq2" /></figure><p>Dari analisis tersebut, kami menemukan bahwa dataset sangat tidak seimbang. Kelas joy dan sadness muncul cukup sering, sedangkan kelas love dan surprise jauh lebih jarang — hanya 5–10 kali lebih sedikit. Untuk mengatasi ketidakseimbangan ini, beberapa strategi yang dapat diterapkan adalah:</p><ul><li>Melakukan oversampling secara acak pada kelas minoritas</li><li>Melakukan undersampling secara acak pada kelas mayoritas</li><li>Mengumpulkan lebih banyak data berlabel dari kelas yang kurang terwakili</li></ul><p>Model berbasis Transformer memiliki batas maksimum panjang urutan masukan, yang disebut <em>maximum context size</em>. Untuk aplikasi yang menggunakan <strong>DistilBERT</strong>, batas maksimum ini adalah 512 token. Kami menganalisis panjang tweet dalam dataset dan menemukan bahwa mayoritas tweet memiliki panjang sekitar 15 kata, jauh di bawah batas maksimum.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/861/0*-LrwEIvy0U2B17vb" /></figure><p>Bagian penting lainnya yang kami pelajari adalah proses tokenisasi. Model seperti <strong>DistilBERT</strong> memerlukan teks yang sudah di-tokenisasi, yaitu diubah menjadi unit kecil dan vektor numerik. Metode tokenisasi bisa berbasis <strong>karakter</strong> (memecah per huruf) atau <strong>kata</strong> (memisahkan tiap kata).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/793/0*QJu2Z1gBxR-3s_Ld" /></figure><p>Salah satu teknik tokenisasi kata yang sederhana adalah dengan menggunakan spasi (<strong><em>whitespace</em></strong>) untuk memecah teks. Beberapa tokenizer kata memiliki aturan tambahan untuk menangani tanda baca. Kita juga bisa menerapkan teknik <em>stemming</em> atau <em>lemmatisasi</em>, yang menormalkan kata-kata ke bentuk dasarnya.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/713/0*SuTTxCXUwIhMpHU8" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/746/0*aYPK_XsM7B7xMvUg" /></figure><p>Kami secara khusus mempelajari tokenisasi subkata (subword tokenization), yang menggabungkan kelebihan tokenisasi berbasis karakter dan kata.</p><p>Metode ini memecah kata langka menjadi unit-unit yang lebih kecil sambil mempertahankan kata umum sebagai satu kesatuan, meningkatkan efisiensi sekaligus memungkinkan model memahami kata kompleks atau kata yang salah eja.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/584/0*HQepVCYuNq9uV95f" /></figure><p>Tokenisasi subkata dipelajari dari korpus pre-training menggunakan aturan statistik dan algoritma. Salah satu algoritma populer adalah WordPiece, yang digunakan dalam tokenizer untuk BERT dan DistilBERT. Prinsip kerja WordPiece adalah:</p><ul><li><strong>Kata umum</strong> tetap sebagai satu token (misalnya: “hello” → [“hello”])</li><li><strong>Kata yang jarang</strong> dipecah menjadi beberapa sub-token (misalnya: “unfriendly” → [“un”, “##friendly”])</li><li>Prefix “##” menandakan bahwa token tersebut merupakan bagian dari kata sebelumnya</li></ul><p>Berikut adalah contoh implementasi tokenisasi menggunakan WordPiece:</p><pre>from transformers import DistilBertTokenizer<br><br># Load tokenizer DistilBERT<br>tokenizer = DistilBertTokenizer.from_pretrained(&quot;distilbert-base-uncased&quot;)<br><br># Tokenisasi kata &quot;unfriendly&quot;<br>tokens = tokenizer.tokenize(&quot;The staff was unfriendly.&quot;)<br>ids = tokenizer.convert_tokens_to_ids(tokens)<br><br># Cetak hasil tokenisasi<br>print(&quot;Tokens:&quot;, tokens)<br>print(&quot;Token IDs:&quot;, ids)</pre><p>Output yang dihasilkan menunjukkan bagaimana kata “unfriendly” dipecah menjadi dua token:</p><pre>Tokens: [&#39;the&#39;, &#39;staff&#39;, &#39;was&#39;, &#39;un&#39;, &#39;##friendly&#39;, &#39;.&#39;]<br>Token IDs: [1996, 3096, 2001, 4895, 21337, 1012]</pre><p>Langkah terakhir yang kami pelajari adalah penyiapan data input untuk model, termasuk padding dan truncation untuk memastikan semua input memiliki panjang yang sama:</p><pre>from transformers import DistilBertTokenizer<br># Load tokenizer DistilBERT<br>tokenizer = DistilBertTokenizer.from_pretrained(&quot;distilbert-base-uncased&quot;)<br># Contoh teks dengan kata &quot;unfriendly&quot;<br>sentences = [&quot;The staff was unfriendly.&quot;, &quot;Her attitude was unfriendly and rude.&quot;]<br># Tokenisasi dengan max_length 8 dan padding<br>tokens = tokenizer(sentences, padding=&quot;max_length&quot;, max_length=8, truncation=True, return_tensors=&quot;pt&quot;)<br># Cetak hasil tokenisasi<br>print(&quot;Token IDs:\n&quot;, tokens[&quot;input_ids&quot;])<br>print(&quot;Attention Mask:\n&quot;, tokens[&quot;attention_mask&quot;])</pre><p>Melalui pembelajaran ini, kami memahami bagaimana memproses dan mempersiapkan data teks untuk klasifikasi menggunakan model Transformer, mulai dari tokenisasi hingga penanganan masalah ketidakseimbangan kelas. Pengetahuan ini memberikan dasar yang kuat untuk mengimplementasikan model klasifikasi teks yang efektif untuk berbagai aplikasi NLP.</p><h3>Minggu 7: Mengurai Struktur Transformer: Mekanisme Self-Attention, Ragam Arsitektur, dan Implementasi dalam Bidang NLP <a href="https://medium.com/u/273c1e47e44d">Christoffelhm</a> — <a href="https://medium.com/u/4050401565a4">Rifai Martin</a></h3><p>Pada minggu ke-7, kami mempelajari anatomi transformer secara mendalam. Fokus pembelajaran adalah menganalisis elemen utama model transformer, menjelaskan peran berbagai arsitektur transformer, dan menghubungkan komponen-komponen tersebut dengan aplikasinya dalam NLP.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*b-dQq6qVsntqLDMnjELMeQ.png" /><figcaption>Gambar : Arsitektur Encoder-Decoder Transformer</figcaption></figure><p>Pembahasan dimulai dengan mendalami arsitektur Transformer, yang terdiri dari dua komponen utama:</p><ol><li><strong>Encoder</strong>: Bertugas mengonversi urutan token input menjadi rangkaian vektor embedding (hidden state/konteks). Proses ini mengandalkan positional embeddings untuk menangkap informasi urutan teks.</li><li><strong>Decoder</strong>: Menggunakan hidden state dari encoder untuk secara bertahap menghasilkan urutan token output. Decoder menjaga hubungan sebab-akibat dengan hanya memperhatikan token-token yang telah dihasilkan sebelumnya.</li></ol><p>Kami mempelajari bahwa terdapat tiga jenis utama model Transformer yang diterapkan untuk tugas-tugas NLP berbeda:</p><ul><li><strong>Encoder-only</strong>: Digunakan untuk tugas-tugas seperti klasifikasi teks dan Named Entity Recognition (NER) dengan memanfaatkan attention secara bidirectional.</li><li><strong>Decoder-only</strong>: Cocok untuk melengkapi urutan teks dengan memprediksi kata berikutnya secara berulang, menggunakan mekanisme causal/autoregressive attention.</li><li><strong>Encoder-decoder</strong>: Ideal untuk pemetaan kompleks dari satu urutan teks ke urutan lain, seperti pada terjemahan mesin dan peringkasan teks.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/887/1*0bmtw7W_Oa7FFLIQOjRp4Q.png" /><figcaption>Gambar : Struktur Encoder</figcaption></figure><p>Komponen kritis dari arsitektur Transformer adalah mekanisme self-attention. Kami mempelajari proses detail Scaled Dot-Product Attention yang melibatkan beberapa langkah penting:</p><ol><li><strong>Proyeksi Embedding</strong>: Setiap token embedding diproyeksikan menjadi tiga vektor terpisah: query (Q), key (K), dan value (V).</li><li><strong>Perhitungan Skor Attention</strong>: Hubungan antara setiap vektor query dan key dihitung menggunakan operasi dot product, menghasilkan matriks berukuran n×n.</li><li><strong>Normalisasi Skor</strong>: Skor dot product dikalikan dengan scaling factor dan diterapkan fungsi softmax untuk mendapatkan probabilitas.</li><li><strong>Pembaruan Embedding</strong>: Matriks bobot attention yang telah dinormalisasi dikalikan dengan vektor value untuk masing-masing token, menghasilkan representasi kontekstual.Diskusi Kolektif</li></ol><pre># Implementasi sederhana Scaled Dot-Product Attention<br>def scaled_dot_product_attention(query, key, value, mask=None):<br>    dim_k = query.size(-1)<br>    scores = torch.bmm(query, key.transpose(1, 2)) / sqrt(dim_k)<br>    <br>    if mask is not None:<br>        scores = scores.masked_fill(mask == 0, float(&quot;-inf&quot;))<br>        <br>    weights = F.softmax(scores, dim=-1)<br>    return weights.bmm(value)</pre><p>Mekanisme self-attention memungkinkan model memberikan “perhatian” yang berbeda untuk setiap token, sehingga menghasilkan Contextualized Embeddings. Misalnya dalam kalimat “time flies like an arrow”, kata “flies” dapat diinterpretasikan sebagai kata kerja karena konteks dari seluruh kalimat.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dv92dEWaiCCTqka_kWPheQ.png" /><figcaption>Gambar : Multi-Head Attention Mechanism</figcaption></figure><p>Selain self-attention, kami juga mempelajari Multi-Head Attention — pendekatan yang memungkinkan model menangkap berbagai jenis hubungan dalam teks secara simultan. Dengan membagi ruang embedding menjadi beberapa heads, setiap head dapat fokus pada aspek semantik yang berbeda, misalnya:</p><ul><li>Satu head mengamati interaksi antara subjek dan kata kerja</li><li>Head lain dapat fokus pada atribut atau kata sifat di sekitar kata benda</li></ul><pre>class MultiHeadAttention(nn.Module):<br>    def __init__(self, config):<br>        super().__init__()<br>        embed_dim = config.hidden_size<br>        num_heads = config.num_attention_heads<br>        head_dim = embed_dim // num_heads<br>        self.heads = nn.ModuleList(<br>            [AttentionHead(embed_dim, head_dim) for _ in range(num_heads)]<br>        )<br>        self.output_linear = nn.Linear(embed_dim, embed_dim)<br><br>    def forward(self, hidden_state):<br>        # Menggabungkan output dari setiap attention head<br>        x = torch.cat([h(hidden_state) for h in self.heads], dim=-1)<br>        # Melalui lapisan linier untuk mendapatkan tensor berukuran [batch_size, seq_len, hidden_dim]<br>        x = self.output_linear(x)<br>        return x</pre><p><strong>Feed-Forward Layer</strong> adalah komponen penting lainnya dalam Transformer. Lapisan ini terdiri dari dua transformasi linear dengan aktivasi non-linear di antaranya, berfungsi memproses setiap posisi secara independen.</p><p>Feed-forward layer membantu Transformer memahami hubungan antar kata sehingga terjemahan yang dihasilkan lebih akurat dan alami.</p><p>Contoh Kode Implementasi Fee-Forward Layer</p><pre>class FeedForward(nn.Module):<br>    def __init__(self, config):<br>        super().__init__()<br>        self.linear_1 = nn.Linear(config.hidden_size, config.intermediate_size)<br>        self.linear_2 = nn.Linear(config.intermediate_size, config.hidden_size)<br>        self.gelu = nn.GELU()<br>        self.dropout = nn.Dropout(config.hidden_dropout_prob)<br><br>    def forward(self, x):<br>        x = self.linear_1(x)<br>        x = self.gelu(x)<br>        x = self.linear_2(x)<br>        x = self.dropout(x)<br>        return x</pre><p>Contoh Konteks Penerjemahan :<br>Misalkan kita ingin menerjemahkan kalimat Saya suka makan nasi goreng ke bahasa Inggris:</p><ol><li><strong>Encoder:</strong> Mengubah kalimat bahasa Indonesia menjadi serangkaian vektor.</li><li><strong>Feed-forward layer:</strong> Memproses vektor-vektor tersebut dan mempelajari hubungan antar kata.</li><li><strong>Decoder:</strong> Menggunakan informasi yang telah diproses untuk menghasilkan kalimat bahasa Inggris, misalnya, I like to eat fried rice.</li></ol><p>Komponen terakhir yang kami pelajari adalah Decoder Transformer, yang menggunakan tiga jenis lapisan utama:</p><ol><li><strong>Masked Multi-Head Self-Attention</strong>: Memastikan decoder hanya melihat token yang telah dihasilkan sebelumnya.</li><li><strong>Encoder-Decoder Attention</strong>: Memungkinkan decoder “mengintip” informasi dari kalimat sumber (output encoder).</li><li><strong>Feed-Forward Network</strong>: Memproses representasi untuk menghasilkan output akhir.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sq3u0yJvrn8iEmDF54Mokg.png" /><figcaption>Gambar 4: Decoder Transformer</figcaption></figure><p>Melalui pembelajaran mendalam ini, kami memahami bagaimana berbagai komponen Transformer bekerja sama untuk menangani berbagai tugas NLP — dari klasifikasi dan pengenalan entitas hingga terjemahan dan peringkasan teks. Kami juga mempelajari bagaimana model-model seperti XLM-RoBERTa dapat digunakan untuk Named Entity Recognition lintas bahasa, menunjukkan kemampuan transfer zero-shot yang mengesankan dengan skor F1 hingga 86,8% pada data bahasa Jerman dan performa baik pada bahasa Prancis dan Italia meskipun tanpa fine-tuning khusus.</p><h3>Kesimpulan</h3><p>Pembelajaran tentang model Transformer selama tiga minggu ini telah memberikan pemahaman yang komprehensif tentang salah satu kemajuan paling signifikan dalam bidang NLP. Dari konsep dasar hingga implementasi praktis, kami telah mengeksplorasi berbagai aspek arsitektur ini dan aplikasinya dalam tugas-tugas seperti klasifikasi teks.</p><p>Beberapa poin penting yang kami peroleh:</p><ol><li><strong>Fleksibilitas Arsitektur</strong>: Transformer dapat diadaptasi untuk berbagai tugas NLP, dari pemahaman teks (BERT) hingga generasi teks (GPT), menunjukkan fleksibilitas yang luar biasa.</li><li><strong>Transfer Learning</strong>: Pendekatan pre-training followed by fine-tuning telah merevolusi cara kita mengembangkan model NLP, memungkinkan hasil yang baik bahkan dengan data latih yang terbatas.</li><li><strong>Ekosistem yang Matang</strong>: Tools seperti Hugging Face Transformers menyederhanakan proses implementasi dan eksperimen, memungkinkan fokus pada solusi masalah daripada detail implementasi.</li><li><strong>Tantangan Komputasi</strong>: Meskipun powerful, model Transformer memerlukan resource komputasi yang signifikan, mendorong penelitian dalam efisiensi dan optimisasi.</li><li><strong>Interpretabilitas</strong>: Memahami bagaimana model membuat keputusan tetap menjadi tantangan, membuka peluang untuk penelitian dalam interpretabilitas dan explainable AI.</li></ol><p>Dalam konteks aplikasi nyata, pemahaman ini sangat relevan untuk pengembangan berbagai solusi NLP, seperti chatbot, sistem pencarian, analisis sentimen, dan banyak lagi. Melihat ke depan, kami berharap dapat menerapkan pengetahuan ini dalam proyek-proyek praktis dan terus mengikuti perkembangan terbaru dalam bidang yang dinamis ini.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ff8cc3148cb7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Unlocking Insights: A Comprehensive Guide to Exploratory Data Analysis (EDA) with IMDB Dataset]]></title>
            <link>https://medium.com/@rifamartin/unlocking-insights-a-comprehensive-guide-to-exploratory-data-analysis-eda-with-imdb-dataset-6c376dd286cc?source=rss-4050401565a4------2</link>
            <guid isPermaLink="false">https://medium.com/p/6c376dd286cc</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[data-preparation]]></category>
            <category><![CDATA[eda]]></category>
            <dc:creator><![CDATA[Rifai Martin]]></dc:creator>
            <pubDate>Tue, 18 Feb 2025 16:38:26 GMT</pubDate>
            <atom:updated>2025-02-18T16:51:15.449Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*iQs-7HRZjqIgwvMsgVSGaQ.jpeg" /><figcaption>Figure 1: The iterative process of Exploratory Data Analysis</figcaption></figure><h3>The Power of Looking Before You Leap</h3><p>Imagine building a house without first examining the foundation. That’s exactly what many data scientists do when they jump straight into model building without proper Exploratory Data Analysis (EDA). In this article, we’ll dive deep into how EDA can transform your machine learning projects, using the IMDB movie reviews dataset as our guide.</p><h3>Prerequisites</h3><p>Before we begin, make sure you have:</p><ul><li>Basic Python knowledge</li><li>Familiarity with pandas and numpy</li><li>Understanding of basic statistics</li><li>Python environment with required libraries installed</li></ul><pre># Required libraries<br>!pip install pandas numpy matplotlib seaborn wordcloud nltk</pre><h3>The Evolution of EDA: More Than Just Data Cleaning</h3><p>When John Tukey introduced EDA in the 1970s, data science wasn’t even a term. Today, it’s become the cornerstone of successful machine learning projects. But why is it so crucial?</p><h3>The Four Pillars of Modern EDA:</h3><ol><li>Data Understanding</li><li>Pattern Recognition</li><li>Hypothesis Generation</li><li>Anomaly Detection</li></ol><h3>Hands-on with IMDB Datase</h3><h4>1. Initial Data Exploration</h4><p>Let’s start by loading our dataset and understanding its basic structure:</p><pre>import pandas as pd<br>import numpy as np<br>from datasets import load_dataset<br><br># Load dataset<br>dataset = load_dataset(&quot;imdb&quot;, split=&quot;train&quot;)<br>df = pd.DataFrame(dataset)<br><br># Basic information<br>print(&quot;Dataset Dimensions:&quot;, df.shape)<br>print(&quot;\nDataset Information:&quot;)<br>df.info()<br><br># Check missing values<br>print(&quot;\nMissing Values Check:&quot;)<br>print(df.isnull().sum())</pre><p>Output:</p><pre>Dataset Dimensions: (25000, 2)<br><br>Dataset Information:<br>RangeIndex: 25000 entries, 0 to 24999<br>Data columns (total 2 columns):<br> #   Column  Non-Null Count  Dtype <br>---  ------  --------------  ----- <br> 0   text    25000 non-null  object<br> 1   label   25000 non-null  int64 <br>dtypes: int64(1), object(1)<br>memory usage: 390.8+ KB<br><br>Missing Values Check:<br>text     0<br>label    0<br>dtype: int64</pre><p>💡 <strong>Key Insight</strong>: Our dataset is perfectly balanced with no missing values — a rare luxury in real-world data science!</p><h4>2. Deep Dive into Text Analysis</h4><p>Now, let’s examine the characteristics of our reviews:</p><pre># Import required libraries<br>import pandas as pd<br>import numpy as np<br>import matplotlib.pyplot as plt<br>import seaborn as sns<br>from datasets import load_dataset<br><br># Set style for better visualization<br>plt.style.use(&#39;seaborn&#39;)<br><br># Load dataset and create DataFrame<br>dataset = load_dataset(&quot;imdb&quot;, split=&quot;train&quot;)<br>df = pd.DataFrame(dataset)<br><br># Calculate basic text metrics<br>df[&#39;text_length&#39;] = df[&#39;text&#39;].apply(len)  # Character length<br>df[&#39;word_count&#39;] = df[&#39;text&#39;].apply(lambda x: len(x.split()))  # Word count<br><br># Statistical analysis<br>print(&quot;\nText Length Statistics (characters):&quot;)<br>print(df[&#39;text_length&#39;].describe())<br><br>print(&quot;\nWord Count Statistics:&quot;)<br>print(df[&#39;word_count&#39;].describe())<br><br># Create visualization<br>plt.figure(figsize=(15, 5))<br><br># 1. Word Count Distribution<br>plt.subplot(1, 2, 1)<br>sns.histplot(data=df, x=&#39;word_count&#39;, bins=50)<br>plt.title(&#39;Distribution of Review Lengths&#39;)<br>plt.xlabel(&#39;Word Count&#39;)<br>plt.ylabel(&#39;Frequency&#39;)<br><br># 2. Box Plot for Word Count<br>plt.subplot(1, 2, 2)<br>sns.boxplot(data=df[[&#39;word_count&#39;]])<br>plt.title(&#39;Word Count Distribution (Box Plot)&#39;)<br>plt.ylabel(&#39;Word Count&#39;)<br><br>plt.tight_layout()<br>plt.show()<br><br># Additional statistical insights<br>print(&quot;\nDetailed Statistical Analysis:&quot;)<br>print(&quot;-&quot; * 50)<br>print(f&quot;Total number of reviews: {len(df)}&quot;)<br>print(f&quot;Average words per review: {df[&#39;word_count&#39;].mean():.2f}&quot;)<br>print(f&quot;Median words per review: {df[&#39;word_count&#39;].median():.2f}&quot;)<br>print(f&quot;Standard deviation: {df[&#39;word_count&#39;].std():.2f}&quot;)<br>print(f&quot;Shortest review: {df[&#39;word_count&#39;].min()} words&quot;)<br>print(f&quot;Longest review: {df[&#39;word_count&#39;].max()} words&quot;)<br>print(&quot;\nQuantile Analysis:&quot;)<br>print(f&quot;25th percentile: {df[&#39;word_count&#39;].quantile(0.25):.2f} words&quot;)<br>print(f&quot;75th percentile: {df[&#39;word_count&#39;].quantile(0.75):.2f} words&quot;)<br>print(f&quot;90th percentile: {df[&#39;word_count&#39;].quantile(0.90):.2f} words&quot;)<br><br># Check for reviews of different lengths<br>print(&quot;\nReview Length Categories:&quot;)<br>print(f&quot;Very short reviews (&lt;50 words): {len(df[df[&#39;word_count&#39;] &lt; 50])}&quot;)<br>print(f&quot;Short reviews (50-150 words): {len(df[(df[&#39;word_count&#39;] &gt;= 50) &amp; (df[&#39;word_count&#39;] &lt; 150)])}&quot;)<br>print(f&quot;Medium reviews (150-300 words): {len(df[(df[&#39;word_count&#39;] &gt;= 150) &amp; (df[&#39;word_count&#39;] &lt; 300)])}&quot;)<br>print(f&quot;Long reviews (300+ words): {len(df[df[&#39;word_count&#39;] &gt;= 300])}&quot;)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/961/1*dQ8I29TpKIy_Jy9DNm68dg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/472/1*uLN-FxBMll1SlA4ioiVkoQ.png" /></figure><h3>Statistical Analysis Results</h3><h4>Basic Statistics</h4><ul><li><strong>Mean Length</strong>: 233.79 words per review</li><li><strong>Median Length</strong>: 174 words</li><li><strong>Standard Deviation</strong>: 173.73 words</li><li><strong>Range</strong>: 10 to 2,470 words</li></ul><h4>Distribution Analysis</h4><p>📊 <strong>Key Insights</strong>:</p><ol><li><strong>Central Tendency</strong></li></ol><ul><li>Most reviews cluster between 100–300 words</li><li>The median (174 words) is lower than the mean (233.79 words), indicating right skew</li></ul><ol><li><strong>Distribution Pattern</strong></li></ol><ul><li>Right-skewed distribution (long tail)</li><li>Most reviews are of moderate length</li><li>Some extremely long reviews (&gt;1000 words) present as outliers</li></ul><ol><li><strong>Length Categories</strong></li></ol><ul><li>Very short reviews (&lt;50 words): Small minority</li><li>Short reviews (50–150 words): Common</li><li>Medium reviews (150–300 words): Most frequent</li><li>Long reviews (300+ words): Significant tail</li></ul><h4>Implications for Analysis</h4><ol><li><strong>Data Preprocessing</strong></li></ol><ul><li>Consider truncating extremely long reviews</li><li>May need to pad very short reviews</li><li>Potential for length normalization</li></ul><ol><li><strong>Model Considerations</strong></li></ol><ul><li>Need to handle variable length inputs</li><li>Consider computational impact of long reviews</li><li>Possible need for length-based stratification</li></ul><ol><li><strong>Quality Indicators</strong></li></ol><ul><li>Good variety in review lengths</li><li>No missing or zero-length reviews</li><li>Natural distribution pattern typical of user-generated content</li></ul><h4>3. Sentiment Analysis Patterns</h4><pre># Sentiment distribution visualization<br>plt.figure(figsize=(10, 6))<br>sns.countplot(data=df, x=&#39;label&#39;)<br>plt.title(&#39;Distribution of Review Sentiments&#39;)<br>plt.xlabel(&#39;Sentiment (0: Negative, 1: Positive)&#39;)<br>plt.ylabel(&#39;Count&#39;)<br>plt.show()<br><br># Length by sentiment analysis<br>plt.figure(figsize=(10, 6))<br>sns.boxplot(data=df, x=&#39;label&#39;, y=&#39;word_count&#39;)<br>plt.title(&#39;Review Length by Sentiment&#39;)<br>plt.show()</pre><p>🔍 <strong>Pattern Discovery:</strong></p><ul><li>Perfect 50–50 split between positive and negative reviews</li><li>Negative reviews tend to be slightly longer</li><li>More variance in positive review lengths</li></ul><h3>Next Steps and Resources</h3><h4>Where to Go From Here</h4><ol><li>Experiment with different preprocessing techniques</li><li>Try advanced visualization methods</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6c376dd286cc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Memahami Peran Krusial Exploratory Data Analysis (EDA) dalam Machine Learning: Studi Kasus Dataset…]]></title>
            <link>https://medium.com/@rifamartin/memahami-peran-krusial-exploratory-data-analysis-eda-dalam-machine-learning-studi-kasus-dataset-b62aa8f71c19?source=rss-4050401565a4------2</link>
            <guid isPermaLink="false">https://medium.com/p/b62aa8f71c19</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[eda]]></category>
            <dc:creator><![CDATA[Rifai Martin]]></dc:creator>
            <pubDate>Tue, 18 Feb 2025 16:18:30 GMT</pubDate>
            <atom:updated>2025-02-18T16:31:16.184Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>Memahami Peran Krusial Exploratory Data Analysis (EDA) dalam Machine Learning: Studi Kasus Dataset IMDB</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*iQs-7HRZjqIgwvMsgVSGaQ.jpeg" /><figcaption>Fig 1. Exploratoru Data Analysis (EDA)</figcaption></figure><p>Pada era data-driven decision making, Exploratory Data Analysis (EDA) menjadi langkah fundamental yang menentukan keberhasilan proyek machine learning. Artikel ini menyajikan pengalaman komprehensif tim kami dalam mengeksplorasi dataset IMDB, menggabungkan teori dengan praktik, serta menghasilkan insights yang dapat diaplikasikan secara nyata.</p><h3>Latar Belakang</h3><p>EDA, yang dikembangkan oleh John Tukey sejak 1970-an, telah berevolusi menjadi metodologi yang krusial dalam data science. Pendekatan ini memungkinkan kita untuk:</p><ul><li>Memahami struktur dan karakteristik data secara mendalam</li><li>Mengidentifikasi anomali dan pattern tersembunyi</li><li>Memvalidasi asumsi untuk pemodelan</li><li>Mengoptimalkan proses pengambilan keputusan</li></ul><h3>Analisis Eksploratif Dataset IMDB</h3><h4>1. Analisis Struktur Data &amp; Identifikasi Pola</h4><pre># Load dataset<br>df = pd.DataFrame(dataset)</pre><pre># Basic information<br>print(&quot;Dimensi dataset:&quot;, df.shape)<br>print(&quot;\nInformasi dataset:&quot;)<br>print(df.info())</pre><pre># Check missing values<br>print(&quot;\nMissing values:&quot;)<br>print(df.isnull().sum())</pre><pre># Calculate text lengths<br>df[&#39;text_length&#39;] = df[&#39;text&#39;].apply(len)</pre><p>Hasil analisis menunjukkan:</p><ul><li>Dataset terdiri dari 25.000 review film</li><li>Setiap entry memiliki dua kolom utama: text (ulasan) dan label (sentimen)</li><li>Tidak ditemukan missing values</li><li>Label terdistribusi secara seimbang (50% positif, 50% negatif)</li></ul><h4>2. Analisis Statistik Mendalam</h4><pre># Statistical analysis<br>print(&quot;\nStatistik deskriptif panjang teks:&quot;)<br>print(df[&#39;text_length&#39;].describe())<br><br># Word count analysis<br>df[&#39;word_count&#39;] = df[&#39;text&#39;].apply(lambda x: len(x.split()))<br>print(&quot;\nStatistik jumlah kata:&quot;)<br>print(df[&#39;word_count&#39;].describe())</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/376/1*Yg_wfvcDmYYHF-LWJlKVBQ.png" /></figure><p>Temuan statistik utama:</p><ol><li>Karakteristik Teks:</li></ol><ul><li>Mean: 233.79 kata per review</li><li>Median: 174 kata</li><li>Range: 10–2470 kata</li><li>Standar deviasi: 173.73 kata</li></ul><ol><li>Distribusi Label:</li></ol><ul><li>12,500 review positif (50%)</li><li>12,500 review negatif (50%</li></ul><h3>Visualisasi Data Komprehensif</h3><h4>1. Distribusi Panjang Teks</h4><pre>import matplotlib.pyplot as plt<br>import seaborn as sns<br><br>plt.figure(figsize=(10, 6))<br>sns.histplot(data=df, x=&#39;word_count&#39;, bins=50)<br>plt.title(&#39;Distribusi Panjang Review&#39;)<br>plt.xlabel(&#39;Jumlah Kata&#39;)<br>plt.ylabel(&#39;Frekuensi&#39;)<br>plt.show()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/948/1*RjG26fdn6uAXiYd718h5Vg.png" /></figure><h4>2. Analisis Sentimen</h4><pre>plt.figure(figsize=(8, 6))<br>sns.countplot(data=df, x=&#39;label&#39;)<br>plt.title(&#39;Distribusi Label Sentimen&#39;)<br>plt.xlabel(&#39;Label (0: Negatif, 1: Positif)&#39;)<br>plt.ylabel(&#39;Jumlah Review&#39;)<br>plt.show()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/772/1*A514y5s3tz4yJ78POwjx3g.png" /></figure><h3>Interpretasi Hasil Analisis</h3><h3>1. Pattern dan Trend Utama</h3><ol><li>Distribusi Teks:</li></ol><ul><li>Mayoritas review memiliki panjang 100–300 kata</li><li>Terdapat outliers dengan panjang &gt;1000 kata</li><li>Distribusi right-skewed menunjukkan preferensi review pendek</li></ul><ol><li>Pattern Linguistik:</li></ol><ul><li>Dominasi kata-kata terkait film (‘movie’, ‘film’)</li><li>Penggunaan kata sentimen (‘good’, ‘great’, ‘bad’) signifikan</li><li>Presence of informal language dan slang</li></ul><h3>2. Implikasi untuk Pengembangan Model</h3><ol><li>Preprocessing Requirements:</li></ol><ul><li>Normalisasi panjang teks diperlukan</li><li>Standardisasi format teks</li></ul><ol><li>Feature Engineering Opportunities:</li></ol><ul><li>Ekstraksi fitur berbasis panjang teks</li><li>Penggunaan word embeddings</li></ul><ol><li>Model Selection Considerations:</li></ol><ul><li>Balance dataset mendukung berbagai jenis model</li><li>Pertimbangan computational cost untuk long texts</li></ul><h3>Kesimpulan</h3><p>Melalui EDA yang komprehensif pada dataset IMDB, kami telah:</p><ol><li>Mengidentifikasi karakteristik kunci dataset</li><li>Menemukan patterns dan anomali penting</li><li>Mengembangkan strategi preprocessing yang tepat</li><li>Membuat rekomendasi konkret untuk pengembangan model</li></ol><p>EDA ini memberikan fondasi solid untuk tahap pengembangan model selanjutnya, dengan pemahaman mendalam tentang karakteristik data dan potensial challenges yang mungkin dihadapi.</p><p>Link Collab :<br><a href="https://colab.research.google.com/drive/1Bm0SD3ADrHRkdJhPyPwFWFGi1z3DGXOG?usp=sharing">https://colab.research.google.com/drive/1Bm0SD3ADrHRkdJhPyPwFWFGi1z3DGXOG?usp=sharing</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b62aa8f71c19" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Refleksi pertemuan ke-2 Mata kuliah Advance Machine Learning]]></title>
            <link>https://medium.com/@rifamartin/refleksi-pertemuan-ke-2-mata-kuliah-advance-machine-learning-7bea938bbe7f?source=rss-4050401565a4------2</link>
            <guid isPermaLink="false">https://medium.com/p/7bea938bbe7f</guid>
            <category><![CDATA[nn]]></category>
            <category><![CDATA[neural-networks]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Rifai Martin]]></dc:creator>
            <pubDate>Sat, 31 Aug 2024 12:08:37 GMT</pubDate>
            <atom:updated>2024-09-04T11:52:14.024Z</atom:updated>
            <content:encoded><![CDATA[<p>By : Rifai Martin</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/562/1*qPBjMI2d5M5t44ulzReaEg.png" /></figure><p>Hallo pembaca! Dalam modul 2, kita belajar tentang konsep dasar neural network (NN) dan bagaimana jaringan ini memproses input untuk menghasilkan prediksi dengan menggunakan bobot (weights). Kita juga membangun dan mengimplementasikan Neural Network sederhana yang dapat menangani multiple inputs dan multiple outputs, serta memahami bagaimana bobot mempengaruhi hasil prediksi.</p><p>Awalnya, saya mulai dengan membuat prediksi menggunakan jaringan neural sederhana yang hanya memiliki satu input dan satu output. Saya menemukan bahwa mekanisme jaringan neural cukup mudah dipahami, yakni dengan mengalikan input dengan bobot yang telah ditentukan. Namun, seiring perkembangan, saya menyadari bahwa kompleksitas jaringan meningkat, terutama ketika jumlah datapoints yang diproses secara bersamaan bertambah. Hal ini memiliki pengaruh signifikan terhadap akurasi dan performa prediksi.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/492/1*GXaQY9ixsp8UIFzzt6cyZA.png" /><figcaption><a href="https://rpubs.com/laxmikant/NeuralNetworks">https://rpubs.com/laxmikant/NeuralNetworks</a></figcaption></figure><p>Berikut adalah variabel penting yang perlu diketahui dalam Neural Networks:</p><ol><li><strong>Input</strong>: Data awal yang dimasukkan ke jaringan neural.</li><li><strong>Weights (Bobot)</strong>: Parameter yang menentukan kontribusi setiap input terhadap output.</li><li><strong>Prediction (Prediksi)</strong>: Hasil akhir dari proses perhitungan dalam jaringan.</li></ol><p>Salah satu hal menarik adalah bagaimana bobot dalam jaringan neural mempengaruhi hasil prediksi. Sebagai contoh, dengan menggunakan satu input dan satu bobot, saya bisa memprediksi sesuatu yang sederhana seperti jumlah jari kaki seseorang.</p><p>Penggunaan vektor dan operasi perkalian elementwise juga memperlihatkan kekuatan matematika dalam menangani tugas-tugas yang kompleks. Saya mempelajari bahwa perkalian bobot dengan input secara elementwise tidak hanya memengaruhi output secara langsung, tetapi juga memberikan wawasan tentang seberapa besar kontribusi setiap input terhadap hasil akhir. Hal ini mengajarkan saya pentingnya memilih bobot yang tepat, terutama dalam konteks multiple inputs dan outputs.</p><p>Pada akhirnya, saya memahami bahwa forward propagation adalah tahap yang penting dalam perjalanan jaringan neural untuk belajar. Meskipun prediksi awal mungkin belum sempurna, proses ini merupakan fondasi yang kuat sebelum jaringan neural diperbaiki melalui pembelajaran dan penyesuaian bobot.</p><p>Modul ini membuat saya lebih menghargai peran matematika dalam AI, sekaligus membuka wawasan saya tentang bagaimana kita dapat menggunakan NN untuk memecahkan berbagai masalah yang kompleks di berbagai bidang, mulai dari prediksi sederhana hingga analisis data besar yang lebih kompleks.</p><p>Intinya, modul ini membuka mata saya tentang betapa pentingnya tahap forward propagation dalam neural networks. Meski prediksi awal mungkin belum akurat, proses ini jadi dasar yang penting sebelum jaringan neural belajar dan memperbaiki bobotnya. Dengan memahami ini, saya jadi lebih menghargai bagaimana neural networks bisa diaplikasikan untuk memecahkan masalah kompleks, mulai dari prediksi sederhana sampai analisis data besar yang lebih rumit.</p><p>Part 1 : <br><a href="https://medium.com/@kartikasofia35/refleksi-pertemuan-ke-1-mata-kuliah-pembelajaran-mesin-lanjut-a4dd65828a45">Refleksi pertemuan ke-1 Mata kuliah pembelajaran mesin lanjut | by Kartikasofia | Aug, 2024 | Medium</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7bea938bbe7f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Bedah Jurnal Integrasi Data Mining dan OLAP Pada Data Performa Siswa (Part 2)]]></title>
            <link>https://medium.com/@rifamartin/bedah-jurnal-integrasi-data-mining-dan-olap-pada-data-performa-siswa-part-2-0633a84ba8fd?source=rss-4050401565a4------2</link>
            <guid isPermaLink="false">https://medium.com/p/0633a84ba8fd</guid>
            <category><![CDATA[journal]]></category>
            <category><![CDATA[olap]]></category>
            <category><![CDATA[data-mining]]></category>
            <dc:creator><![CDATA[Rifai Martin]]></dc:creator>
            <pubDate>Thu, 23 Nov 2023 23:14:30 GMT</pubDate>
            <atom:updated>2023-11-23T23:14:30.603Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*YcBoQSR2y5GZoZLO.png" /></figure><p>Melalui sinergi antara data mining dan OLAP, analisis mendalam terhadap performa siswa telah mengeksplorasi lapisan tersembunyi yang mengubah paradigma dalam pendekatan edukatif. Part 2 dari penelitian ini memperlihatkan betapa esensialnya kolaborasi ini dalam mengungkap pola baru dan memberikan wawasan yang mencerahkan terkait faktor-faktor yang memengaruhi kinerja siswa.</p><p>Integrasi data mining dan OLAP pada data performa siswa telah membuka cakrawala baru dalam mengidentifikasi pola-pola data yang relevan. Beberapa metodologi seperti metode association, clustering, classification, dan forecasting memberikan wawasan yang signifikan:</p><ul><li>Metode association menyoroti bahwa persiapan ujian tidak selalu menjamin hasil terbaik; perlunya analisis lebih lanjut terhadap faktor-faktor yang mempengaruhi performa siswa saat melakukan persiapan.</li><li>Metode clustering membuktikan bahwa beberapa kelompok siswa memerlukan strategi pembelajaran yang berbeda-beda untuk meningkatkan performa mereka.</li><li>Melalui metode classification, teridentifikasi bahwa tingkat pendidikan orang tua berhubungan erat dengan tingkat kesulitan dalam pembelajaran siswa.</li><li>Metode forecasting memberikan prediksi tentang cara meningkatkan nilai siswa di masa mendatang.</li></ul><p>Kontribusi terhadap Bidang Penelitian:</p><ul><li>Penelitian ini memberikan kontribusi dalam memahami pentingnya integrasi antara data mining dan OLAP dalam konteks pendidikan.</li><li>Mengidentifikasi pola baru dalam data performa siswa dapat membantu institusi pendidikan dalam menyusun strategi yang lebih efektif dalam meningkatkan performa siswa.</li></ul><p>Institusi pendidikan dapat menggunakan hasil penelitian ini untuk merancang strategi yang lebih tepat guna meningkatkan performa siswa. Hal ini dapat menjadi acuan dalam mengoptimalkan pembelajaran dan strategi pendidikan di masa depan. Diperlukan perhatian lebih terhadap proses pengumpulan data primer untuk mendapatkan informasi yang lebih mendalam dan akurat. Evaluasi lebih lanjut diperlukan untuk memastikan kehandalan dan validitas hasil dari metode data mining yang digunakan.</p><p>Kritik terhadap Metodologi yang Digunakan:</p><ul><li>Perlu perhatian lebih terhadap proses pengumpulan data primer untuk memperoleh informasi yang lebih mendalam dan akurat.</li><li>Evaluasi lebih lanjut diperlukan untuk memastikan kehandalan dan validitas hasil yang dihasilkan oleh metode data mining yang digunakan.</li></ul><p>Keterbatasan Penelitian:</p><ul><li>Penelitian ini menggunakan data sekunder pada tahun 2018; penggunaan data aktual yang lebih baru bisa memberikan wawasan yang lebih aktual tentang performa siswa.</li><li>Faktor-faktor lain di luar variabel yang dianalisis dalam penelitian ini mungkin juga berpengaruh terhadap performa siswa.</li></ul><p>Saran dan Pemikiran untuk Pengembangan Selanjutnya:</p><ul><li>Disarankan untuk melakukan penelitian lebih lanjut dengan menggunakan data aktual dan lebih mendalam untuk memperoleh pemahaman yang lebih komprehensif tentang faktor-faktor yang memengaruhi performa siswa.</li><li>Penting untuk mempertimbangkan faktor-faktor sosial, psikologis, dan lingkungan yang mungkin mempengaruhi hasil yang diperoleh.</li></ul><p>Integrasi antara data mining dan OLAP memiliki dampak yang signifikan dalam memahami dan meningkatkan performa siswa. Penelitian ini memberikan wawasan baru tentang pentingnya analisis data performa siswa dalam meningkatkan strategi pendidikan. Dengan menggabungkan data mining dan OLAP, penelitian ini memberikan pandangan yang mendalam tentang bagaimana institusi pendidikan dapat meningkatkan strategi mereka untuk membantu siswa mencapai potensi maksimal mereka.</p><p>Sinergi antara data mining dan OLAP dalam konteks pendidikan telah membuka jendela menuju pemahaman yang lebih dalam tentang faktor-faktor yang memengaruhi performa siswa. Meskipun menawarkan wawasan yang berharga, penelitian ini menyoroti pentingnya pengembangan metodologi yang lebih kuat dan penggunaan data aktual untuk menangkap dinamika yang lebih tepat dalam meningkatkan pendidikan di masa depan. Keberlanjutan eksplorasi ini menjadi kunci dalam membentuk landasan edukatif yang lebih efektif dan inklusif.</p><p><a href="https://www.researchgate.net/publication/346548036_INTEGRASI_DATA_MINING_DAN_ONLINE_ANALYTICAL_PROCESSING_OLAP_PADA_DATA_PERFORMA_SISWA">https://www.researchgate.net/publication/346548036_INTEGRASI_DATA_MINING_DAN_ONLINE_ANALYTICAL_PROCESSING_OLAP_PADA_DATA_PERFORMA_SISWA</a></p><p><a href="https://revou.co/kosakata/olap">https://revou.co/kosakata/olap</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0633a84ba8fd" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Menguasai SQL Join]]></title>
            <link>https://medium.com/@rifamartin/menguasai-sql-join-211b8d576003?source=rss-4050401565a4------2</link>
            <guid isPermaLink="false">https://medium.com/p/211b8d576003</guid>
            <category><![CDATA[sql-joins]]></category>
            <dc:creator><![CDATA[Rifai Martin]]></dc:creator>
            <pubDate>Sat, 30 Sep 2023 11:59:45 GMT</pubDate>
            <atom:updated>2023-09-30T11:59:45.493Z</atom:updated>
            <content:encoded><![CDATA[<p>Kalau kamu tidak pernah mendengar tentang SQL Join sebelumnya, jangan khawatir. Kami akan membawamu ke dalam dunia seru dan misterius ini dengan cara yang mudah dimengerti. Kami akan memberikanmu semua trik, tips, dan strategi agar kamu bisa menjadi seorang ahli dalam menggabungkan data.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/312/1*tl6WpiD6WgA6CFAqRRgbzw.png" /><figcaption><a href="https://www.dofactory.com/sql/join">https://www.dofactory.com/sql/join</a></figcaption></figure><p><strong>Apa itu SQL Join?</strong></p><p>Sebelum kita masuk ke dalam jenis-jenis join, mari kita pahami apa itu SQL Join. Join adalah operasi dalam SQL yang memungkinkan Anda menggabungkan data dari dua atau lebih tabel berdasarkan kolom-kolom tertentu. Ini memungkinkan Anda untuk menggabungkan data dari tabel yang berbeda sehingga Anda dapat melakukan analisis yang lebih komprehensif.</p><p><strong>Jenis-Jenis SQL Join</strong></p><p>Ada beberapa jenis SQL Join yang umum digunakan, tetapi dalam artikel ini, kita akan fokus pada tiga yang paling populer:</p><ol><li>INNER JOIN: Ini adalah jenis join paling umum. INNER JOIN menggabungkan baris dari dua tabel berdasarkan nilai yang cocok dalam kolom yang ditentukan. Hasilnya adalah tabel yang hanya berisi baris dengan nilai yang cocok di kedua tabel.</li><li>LEFT JOIN: LEFT JOIN menggabungkan semua baris dari tabel kiri (tabel pertama yang Anda tentukan) dan baris yang cocok dari tabel kanan (tabel kedua). Jika tidak ada nilai cocok di tabel kanan, kolom tabel kanan akan diisi dengan NULL.</li><li>RIGHT JOIN: RIGHT JOIN mirip dengan LEFT JOIN, tetapi sebaliknya. Ini menggabungkan semua baris dari tabel kanan dan baris yang cocok dari tabel kiri. Jika tidak ada nilai cocok di tabel kiri, kolom tabel kiri akan diisi dengan NULL.</li></ol><p><strong>Contoh Inner Join :</strong></p><p>Gunakan = <a href="https://www.db-book.com/university-lab-dir/sqljs.html">https://www.db-book.com/university-lab-dir/sqljs.html</a></p><p>Kita ingin menggabungkan informasi mata kuliah dan instruktur yang mengajarkannya. Kita dapat menggunakan inner join dengan kondisi bahwa nilai kolom course_id pada tabel teaches sama dengan nilai kolom course_id pada tabel course, dan nilai kolom ID pada tabel teaches sama dengan nilai kolom ID pada tabel instructor.</p><p>#step</p><p>lakukan inner join antara tabel course dan teaches berdasarkan nilai kolom course_id di kedua tabel.</p><blockquote># INNER JOIN teaches ON course.course_id = teaches.course_id;</blockquote><blockquote>— Kemudian, dilakukan inner join lagi antara tabel teaches dan instructor berdasarkan nilai kolom ID yang sama di kedua tabel.</blockquote><blockquote># INNER JOIN instructor ON teaches.ID = instructor.ID;</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/632/1*qMiMRxVlmpVd2KPImjNJVg.png" /></figure><p><strong>Contoh Left Join :</strong></p><blockquote>SELECT instructor.name, department.dept_name FROM department LEFT JOIN instructor ON instructor.dept_name = department.dept_name;</blockquote><p>LEFT JOIN pada query tersebut digunakan karena kita ingin mempertahankan semua baris yang ada di tabel parent yaitu department, bahkan jika tidak ada nilai yang cocok di tabel instructor. Artinya, jika ada department yang tidak memiliki instruktur yang terkait, record tersebut tetap akan ditampilkan dalam hasil query dengan nilai NULL untuk kolom-kolom instruktur… tapi rupanya table department (parent) terhadap instructor tidak ada NULL value, artinya table department tidak ada yang tidak memiliki instructor</p><p>tapi rupanya table department (parent) terhadap instructor tidak ada NULL value, artinya table department tidak ada yang tidak memiliki instructor</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/630/1*CnCSA6F0Pt14Ao-4d7EgZg.png" /></figure><p><strong>Contoh RIGHT JOIN :</strong></p><p>kebalikan dari Left Join, kalo table parent adalah department (kiri) maka table instructor (kanan) yang akan di pertahankan, in case ada data instructor yang tidak memiliki department makan tetep akan muncul bersama department bernilai NULL, namun saya tidak bisa memunculkan nya, ada error merah ini, sepertinya tidak support di sqljs.html :</p><p><strong>Full Join :</strong><br>Ketika menggunakan FULL JOIN, semua row atau record dari kedua tabel (instructor dan department) akan ditampilkan dalam hasil query, bahkan jika tidak ada nilai yang cocok di tabel lainnya. jika ada departemen yang tidak memiliki instruktur terdaftar dan instruktur yang tidak terdaftar ke dalam departemen tertentu, kedua record tersebut tetap akan ditampilkan dalam hasil query dengan nilai NULL untuk kolom yang kosong. dan rupanya sqljs.html tidak support juga hehe.</p><p><strong><em>Teruslah berlatih, eksperimen dengan data Anda sendiri, dan jadilah ahli dalam seni menggabungkan data</em></strong></p><p>[PART 1] <a href="https://medium.com/@rifamartin/system-basis-data-persiapan-awal-89239616ee78">https://medium.com/@rifamartin/system-basis-data-persiapan-awal-89239616ee78</a><br>[PART 2] <a href="https://medium.com/@nabilaisha622/mengenal-lebih-jauh-mengenai-query-select-pada-basis-data-acabac63c404">https://medium.com/@nabilaisha622/mengenal-lebih-jauh-mengenai-query-select-pada-basis-data-acabac63c404</a><br>[PART 3] <a href="https://medium.com/@rifamartin/cara-menggunakan-order-by-pada-sql-mengurutkan-data-siapapun-bisa-lakukan-60e09ae76a84">https://medium.com/@rifamartin/cara-menggunakan-order-by-pada-sql-mengurutkan-data-siapapun-bisa-lakukan-60e09ae76a84</a><br>[PART 4] <a href="https://medium.com/@nabilaisha622/melakukan-seleksi-baris-pada-database-dengan-menggunakan-query-where-fa26d2855194">https://medium.com/@nabilaisha622/melakukan-seleksi-baris-pada-database-dengan-menggunakan-query-where-fa26d2855194</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=211b8d576003" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cara Menggunakan ORDER BY pada SQL: Mengurutkan Data Siapapun Bisa Lakukan]]></title>
            <link>https://medium.com/@rifamartin/cara-menggunakan-order-by-pada-sql-mengurutkan-data-siapapun-bisa-lakukan-60e09ae76a84?source=rss-4050401565a4------2</link>
            <guid isPermaLink="false">https://medium.com/p/60e09ae76a84</guid>
            <category><![CDATA[orderby]]></category>
            <category><![CDATA[sql]]></category>
            <dc:creator><![CDATA[Rifai Martin]]></dc:creator>
            <pubDate>Fri, 15 Sep 2023 14:11:22 GMT</pubDate>
            <atom:updated>2023-09-19T11:54:42.005Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/374/1*O8i7abXEKCkoob-WDIeSDQ.png" /><figcaption><a href="https://www.w3resource.com/w3r_images/sql-order-by-ascending-descending.png">https://www.w3resource.com/w3r_images/sql-order-by-ascending-descending.png</a></figcaption></figure><p>Mau urut-urutan data jadi rapi?Tenang saja, karena dengan ORDER BY pada SQL, semua jadi akan lebih mudah! Siapa saja yang menggunakan database pasti pernah mengalami kebingungan saat ingin mengurutkan data. Tetapi, jangan khawatir! Dalam artikel ini, kamu bisa belajar cara menggunakan ORDER BY pada SQL.</p><p>Jangan lupa temen-temen pastikan xampp kamu running ya di bagian <strong>apache</strong> dan <strong>Mysql, </strong>aku tahu laptop kamu udah berdebu jarang di pake, panasin yuk! buka senjatamu xampp dan dbeaver . semakin sering di buka semakin banyak data semakin jago nantinya hehe.</p><p><strong>ORDER BY</strong> adalah sebuah perintah dalam bahasa SQL yang digunakan untuk mengurutkan hasil output data dari sebuah tabel secara ascending (naik) atau descending (turun) berdasarkan satu atau lebih kolom tertentu.</p><pre>ORDER BY ASC:<br>ORDER BY ASC:</pre><p>Kolom-kolom yang bisa diurutkan menggunakan ORDER BY dalam SQL tidak hanya terbatas pada kolom numerik atau alfanumerik saja, tetapi juga kolom-kolom lain seperti tanggal, waktu, atau objek lainnya di dalam basis data.</p><p>berikut sample query nya :</p><pre>SELECT nim FROM &lt;nama_table&gt; ORDER BY &lt;target_column&gt; ASC; --terkecil ke terbesar<br>SELECT nim FROM &lt;nama_table&gt; ORDER BY &lt;target_column&gt; DSC; --terbesar ke terkecil</pre><p>Sebelum kita bermain dengan query order by, tentunya kita perlu punya data yang perlu di order, disini saya memiliki table <strong>mahasiswa </strong>terdiri dari 47 record data.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EtAWlsCNPOdqxhRSZGPJvw.png" /><figcaption>47 record data di table mahasiwsa</figcaption></figure><p>saya akan melakukan order based on column <strong>nim</strong></p><pre>SELECT nim FROM uph.mahasiswa ORDER BY nim ASC;</pre><p>hasilnya, data terurut dari nim terkecil sampai ke paling besar dan sebaliknya jika menggunakan <strong>DSC (descending)</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sBRR59_M-X_B-FfalOvkcQ.png" /></figure><p>mari kita coba urutkan berdasarkan alphabet menggunakan column jurusan:</p><pre>select jurusan from mahasiswa order by jurusan asc;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xvbRGy0k5A5oV_7T6W8Lvw.png" /></figure><p>maka data akan terurut berdasarkan alphabet, karena database mahasiswa hanya memilikin 3 jurusan secara <strong>ASC(ascending)</strong> akan terutus menjadi Sistem informasi, teknik elektro, teknik informatika begitupun sebaliknya bila menggunakan <strong>DSC (descending)</strong></p><p>kita bisa menggunakan lebih dari satu column untuk untuk melakukan ordering data, seperti ini :</p><pre>select nama,jurusan from mahasiswa order by jurusan,nama asc;</pre><p>Dengan contoh query di atas, data akan diurutkan terlebih dahulu berdasarkan jurusan (secara ascending), kemudian baru diurutkan lagi setiap jurusan yang sama berdasarkan nama (secara ascending).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sBvvUr4zVQJ9t1n0aHn-Lw.png" /></figure><p>Order by itu penting banget buat kita urutkan data berdasarkan kolom tertentu. Dengan nge-order data, kita bisa lebih mudah melihat dan analisis data yang udah di-query. Jadi, jangan lupa buat ngerti cara pakai order by ya. Semoga artikel ini bisa membantu lebih paham tentang order by.</p><p>Addition Materi Part 3 :<br> 1. String Operations adalah operasi SQL untuk memanipulasi nilai string dalam tabel, seperti menggabungkan, mengganti, memotong, atau mengubah huruf besar/kecil.</p><p>- CONCAT() — Untuk menggabungkan dua atau lebih nilai string menjadi satu nilai string. <br>— REPLACE() — Untuk mengganti setiap kemunculan nilai string tertentu dalam string dengan nilai string lain. <br>— SUBSTRING() — Untuk memotong atau mengekstrak nilai string tertentu dari sebuah string. <br>— UPPER() dan LOWER() — Untuk mengubah nilai string menjadi huruf besar atau kecil.</p><pre>SELECT CONCAT(nama, &#39; - &#39;, nim) AS nama_lengkap FROM mahasiswa;<br> 2. Set Operations adalah operasi SQL untuk membandingkan dan menggabungkan data dari dua tabel atau lebih. Contohnya menggabungkan data dengan UNION, mencari nilai yang sama dengan INTERSECT, dan mengambil nilai unik dengan EXCEPT. 3. Null Values adalah nilai-nilai yang tidak diketahui dalam tabel. Untuk menangani nilai null, dapat menggunakan operasi IS NULL untuk memeriksa apakah nilai null atau IS NOT NULL untuk memeriksa nilai bukan null. Juga dapat menggunakan COALESCE() untuk menentukan nilai default ketika null.</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/872/1*jP3Ed43RPpVCC89tfhV7zA.png" /></figure><p>2. Set Operations adalah operasi SQL untuk membandingkan dan menggabungkan data dari dua tabel atau lebih. Contohnya menggabungkan data dengan UNION, mencari nilai yang sama dengan INTERSECT, dan mengambil nilai unik dengan EXCEPT.</p><pre>SELECT nama, fakultas FROM mahasiswa<br>UNION<br>SELECT nama, fakultas FROM dosen;</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/877/1*0v-RaWxgyGlxnKzLFpbc2g.png" /></figure><p>3. Null Values adalah nilai-nilai yang tidak diketahui dalam tabel. Untuk menangani nilai null, dapat menggunakan operasi IS NULL untuk memeriksa apakah nilai null atau IS NOT NULL untuk memeriksa nilai bukan null. Juga dapat menggunakan COALESCE() untuk menentukan nilai default ketika null.</p><p>sekian teman-teman, jangan lupa tunggu artikel berikutnya ya…</p><p>[PART 1] <a href="https://medium.com/@rifamartin/system-basis-data-persiapan-awal-89239616ee78">https://medium.com/@rifamartin/system-basis-data-persiapan-awal-89239616ee78</a> <br>[PART 2] <a href="https://medium.com/@nabilaisha622/mengenal-lebih-jauh-mengenai-query-select-pada-basis-data-acabac63c404">https://medium.com/@nabilaisha622/mengenal-lebih-jauh-mengenai-query-select-pada-basis-data-acabac63c404</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=60e09ae76a84" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[System Basis Data- Persiapan Awal]]></title>
            <link>https://medium.com/@rifamartin/system-basis-data-persiapan-awal-89239616ee78?source=rss-4050401565a4------2</link>
            <guid isPermaLink="false">https://medium.com/p/89239616ee78</guid>
            <category><![CDATA[dbeaver]]></category>
            <category><![CDATA[windows]]></category>
            <category><![CDATA[xampp]]></category>
            <category><![CDATA[installation-tools]]></category>
            <dc:creator><![CDATA[Rifai Martin]]></dc:creator>
            <pubDate>Sat, 02 Sep 2023 00:22:24 GMT</pubDate>
            <atom:updated>2023-09-09T23:18:02.648Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/541/1*UGiW1f9lMbHIpMtzHhsZ-w.png" /><figcaption><a href="https://www.bhinneka.com/blog/wp-content/uploads/2022/07/database-adalah.jpg">https://www.bhinneka.com/blog/wp-content/uploads/2022/07/database-adalah.jpg</a></figcaption></figure><p>Hey Nakama!, Kali ini kita akan ngobrolin soal System Basis Data nih. Apa sih System Basis Data itu? Gampang banget, System Basis Data itu sebenernya gabungan dari alat, teknik, dan software yang membantu kita untuk memanage data yang kita punya secara efisien. Mulai dari mengumpulkan data, mengolah data, sampe menyimpan data dengan baik, semua bisa dilakukan dengan System Basis Data. Jadi, jangan takut untuk explore dunia System Basis Data ya! oh iya please di notes ya only untuk windows user.</p><p>Berikut tools yang kita perlukan :<br><strong>- XAMMP (Cross-platform, Apache, MySQL, PHP, dan Perl)<br>- Beekeper Studio Community Edition/ Dbeaver (DBMS tools/ database management Software)</strong></p><ol><li>installation <strong>XAMPP</strong>:</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/501/1*8QFpkXZS-lnr499Z7xdT8A.png" /><figcaption>Select Compent, kita pilih default aja gan!</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/498/1*9ZbGmAvYL4MBLDQJ1K_J3w.png" /><figcaption>location folder, kita pilih default juga dan next sampe ke step installation terakhir lalu tunggu!</figcaption></figure><p>setelah itu langsung cuss ke folder installed nya, lalu cari <strong>xampp-control.application</strong> -&gt; <strong>send to dekstop</strong>, untuk memudahkan kita start/stop config application dari shorcout control xampp yang nantinya kita gunakan</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1008/1*BjF9cxdva3ILCS0_9WD13A.png" /></figure><p>Klik start pada <strong>Apache</strong> dan <strong>Mysql :</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/937/1*hPoeUsBhz9l1axWA_cWUbg.png" /></figure><p>Setelah Success Start :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/666/1*hX4RWCMByIs9kYPS4ZYE2A.png" /></figure><p>Setelah Apache dan Mysql Success Started, maka bisa kita pastikan dengan cara akses DBMS web tools phpMyAdmin di browser “<a href="http://localhost/phpmyadmin/">http://localhost/phpmyadmin/</a>”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bUZjVb5ZcXJANQe7-t291w.png" /></figure><p>Cheers! udah beres untuk step awal install XAMPP (<strong>Apache, MySQL</strong>)</p><p>2. installation <strong>DBMS Tools</strong>:</p><p>Btw di sini aku pake dbms tools nya <strong>Dbeaver</strong> ya gengs! kalian bebas mau pake yang mana saja asalkan itu open source, tapi jika dompet kalian tebal boleh beli yang berbayar ya, mari sejahterakan developer dengan dompetmu!.</p><p>untuk download application nya, kalian bisa akses di <a href="https://dbeaver.io/download/">https://dbeaver.io/download/</a><br>lalu pilih sesuai os kalian, disini saya pake windows dan jangan lupa pilih yang community ya <em>(The community is sometimes synonymous with open source)</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wnmVxkbUJoTn-Vl6xJ1eaQ.png" /><figcaption>Size untuk installer dbeaver windows kira-kira 113Mb</figcaption></figure><p>Cuss, kita lanjut ke proses installation <strong>Dbeaver</strong> tersayang kita hehe</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/496/1*Jww7WQyHIgsiumheGMxTzg.png" /></figure><p>Disini kalian next next aja gengs ikuti default set up dan tunggu proses installation selesai bisa sambil ngopi santai.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/492/1*gDbmJNxT07u586D9gMzwiA.png" /></figure><p>Berikut tampilan awal dari Dbeaver kita gengs, kalian langsung pilih new connection ya, untuk new connection nya sudah aku kasih tanda, nantinya akan muncul popup pilihan database type, kita pilih <strong>MariaDB</strong> gengs</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dVxpFh3FkD0qJoyhlaUAyw.png" /></figure><p><em>Sekedar Informasi tambahan dari popup tersebut menandakan ada banyak loh type database MariaDb,Oracle,Postgredd dll pasti mereka memiliki sejarah nya sendiri, yuk ekplore nanti!</em></p><p><strong>Di Field Password</strong> kalian isi kosong aja ya, karena by default ketika kita melakukan initiating dari step awal kita tidak melakukan proses configuring user password</p><p>Setelah itu biasanya Dbeaver akan menginfokan Driver tambahan apa yang perlu di install</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ou1WKdEGZu2fTYy1eiB90Q.png" /></figure><p>Setelah itu, kalian pilih open Script SQL untuk menjadi tempat kalian berkomunikasi dengan Database menggunal bahasa SQL dan coba ketikan <strong><em>show</em></strong><em> </em><strong><em>databases</em></strong><em>;</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_P6cE3SBb1dFdRnkBSuomA.png" /></figure><p>Untuk membuat database baru kalian cukup klik kanan <strong>Databases </strong>-&gt; <strong>Create New Database</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/975/1*_s29nQNGIuomFwgWnZX6YQ.png" /></figure><p>Aku mebuat database <strong>uphdb </strong>dan melakukan open SQL editor di database uphdb dan malakukan pembuatan table menggunakan SQL</p><pre>CREATE TABLE mahasiswa (<br>  id INT(11) NOT NULL AUTO_INCREMENT,<br>  nama VARCHAR(50) NOT NULL,<br>  nim VARCHAR(20) NOT NULL,<br>  jurusan VARCHAR(50) NOT NULL,<br>  fakultas VARCHAR(50) NOT NULL,<br>  alamat VARCHAR(100) NOT NULL,<br>  PRIMA</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QKWyejU7VzAWVLZRAXxO1g.png" /></figure><p>Dan setelah itu kita bisa melakukan <strong>show table</strong> untuk melihat table apa saja di dalem database <strong>uphdb</strong></p><pre>show tables</pre><p>Dan akhirnya proses set up kita selesai, setelah step installation selesai nantinya di next chapter tulisan ini, kita akan mempelajari bagaimana komunikasi dengan database menggunakan bahasa SQL</p><p>next chapter :<br>https://medium.com/@nabilaisha622/mengenal-lebih-jauh-mengenai-query-select-pada-basis-data-acabac63c404</p><blockquote>stay hungry and foolish for the new knowledge</blockquote><p>Thanks all!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=89239616ee78" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Apa itu CQRS Design Pattern?]]></title>
            <link>https://medium.com/@rifamartin/apa-itu-cqrs-design-pattern-d8df05a13cc?source=rss-4050401565a4------2</link>
            <guid isPermaLink="false">https://medium.com/p/d8df05a13cc</guid>
            <category><![CDATA[cqrs-design-pattern]]></category>
            <dc:creator><![CDATA[Rifai Martin]]></dc:creator>
            <pubDate>Fri, 24 Jan 2020 17:08:01 GMT</pubDate>
            <atom:updated>2020-01-24T17:08:01.002Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*FvUtxdL8V45TT8YRlVucLw.png" /></figure><p>CQRS, kepanjangan dari Segregasi Command Query Responsibility, berasal dari CQS (Command Query Separation) yang diperkenalkan oleh <strong>Bertrand Meyer</strong> dalam Konstruksi Perangkat Lunak Berorientasi Objek. <strong>Meyer</strong> menyatakan bahwa setiap metode harus berupa <strong>kueri atau perintah(Command)</strong>.</p><p>Perbedaan antara CQS dan CQRS adalah setiap object CQRS dibagi dalam dua objek: satu untuk QUERY satu untuk PERINTAH (command)</p><p>Perintah didefinisikan sebagai metode yang mengubah <strong>STATUS</strong>. Sebaliknya, kueri hanya mengembalikan <strong>NILAI</strong>.</p><p>Skema berikut menunjukkan implementasi dasar dari pola CQRS di dalam aplikasi. Semua pesan dikirim melalui perintah dan event. Mari kita lihat lebih dekat</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*w5edAZ__kiA-6ZfS0FQCFw.png" /></figure><p>contoh penerapa pola CQRS(Command Query Responsibility)</p><p>Kita dapat dengan jelas melihat pemisahan antara bagian <strong>penulisan</strong> dan yang <strong>membaca</strong>: pengguna melakukan modifikasi pada halamannya, menghasilkan perintah yang <strong>dieksekusi</strong>. Setelah perintah ini ditangani sepenuhnya, sebuah <strong>event</strong> dikirim untuk memberi sinyal ada suatu <strong>modifikasi</strong>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d8df05a13cc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Cara mudah dokumentasi API menggunakan Swagger]]></title>
            <link>https://medium.com/@rifamartin/cara-mudah-dokumentasi-api-menggunakan-swagger-da26bfe2ed21?source=rss-4050401565a4------2</link>
            <guid isPermaLink="false">https://medium.com/p/da26bfe2ed21</guid>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[api-development]]></category>
            <category><![CDATA[swagger-ui]]></category>
            <dc:creator><![CDATA[Rifai Martin]]></dc:creator>
            <pubDate>Fri, 15 Nov 2019 12:20:43 GMT</pubDate>
            <atom:updated>2019-11-16T04:24:12.085Z</atom:updated>
            <content:encoded><![CDATA[<p>Hallo guys, disini saya akan mempraktikan secara langsung cara menggunakan swagger untuk dokumentasi API di SPRING BOOT JAVA, saya tidak menjelaskan tentang apa itu swagger, karena disini saya hanya akan mempraktikan cara menggunakan swagger. jika ingin mencari definisi tentang apa itu swagger silahkan mengunjungi dokumentasi resminya disini : <a href="https://swagger.io/">https://swagger.io/</a>.</p><p>baiklah, dibawah ini adalah penampakan project yang ingin saya dokumentasikan API nya menggunakan swagger,</p><p><strong>Yang perlu kita lakukan adalah, kita cukup menambahkan 2 despendencies di dalam file pom.xml setelah itu lakukan mvn clean install/enable auto import untuk melakukan download despendencies</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*msYDzDdqk9jFlnnKy_QMVw.png" /></figure><pre>&lt;dependency&gt;<br>    &lt;groupId&gt;io.springfox&lt;/groupId&gt;<br>    &lt;artifactId&gt;springfox-swagger-ui&lt;/artifactId&gt;<br>    &lt;version&gt;2.6.0&lt;/version&gt;<br>    &lt;scope&gt;compile&lt;/scope&gt;<br>&lt;/dependency&gt;<br>&lt;dependency&gt;<br>    &lt;groupId&gt;io.springfox&lt;/groupId&gt;<br>    &lt;artifactId&gt;springfox-swagger2&lt;/artifactId&gt;<br>    &lt;version&gt;2.6.1&lt;/version&gt;<br>&lt;/dependency&gt;</pre><p>Setelah itu kita menambahkan anotation <strong>@EnableSwagger2</strong>, kedalam file spring boot aplication kita, disitu saya memberikan nama WmbBackendApplication.java</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*C7xRJfKPEQTaf8ZQMgyhPA.png" /></figure><p>Jalankan project backend kita lalu akses kedalam browser dengan link :</p><p><a href="http://localhost:9090/swagger-ui.html#/menu-category-controller">http://localhost:{Sesuaikan dengan port kalian}/swagger-ui.html</a></p><p>seperti inilah penampakan swagger documentasion API kita guys :D</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*H9w2lMs4WDci14vUfWFWkQ.png" /></figure><p>selamat mencoba …</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=da26bfe2ed21" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>