{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "# Bab 04 — Vector Playground\n",
        "\n",
        "Notebook ini mendampingi Bab 04. Jalankan dari atas ke bawah. Semua kode memakai Python standard library.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 1. Fungsi dasar vektor\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "import math\n",
        "\n",
        "def dot(a, b):\n",
        "    return sum(x*y for x, y in zip(a, b))\n",
        "\n",
        "def length(v):\n",
        "    return math.sqrt(sum(x*x for x in v))\n",
        "\n",
        "def distance(a, b):\n",
        "    return math.sqrt(sum((x-y)**2 for x, y in zip(a, b)))\n",
        "\n",
        "def cosine(a, b):\n",
        "    return dot(a, b) / (length(a) * length(b))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 2. Panjang, jarak, dot product, cosine\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "a = [3, 2]\n",
        "b = [1, 4]\n",
        "print(\"A:\", a, \"panjang\", length(a))\n",
        "print(\"B:\", b, \"panjang\", length(b))\n",
        "print(\"jarak A-B:\", distance(a, b))\n",
        "print(\"dot A·B:\", dot(a, b))\n",
        "print(\"cosine A,B:\", cosine(a, b))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 3. Profil pelanggan sebagai vektor\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "pelanggan = {\n",
        "    \"A\": [5, 2, 1],  # kopi, es_teh, roti\n",
        "    \"B\": [1, 5, 2],\n",
        "    \"C\": [10, 4, 2],\n",
        "}\n",
        "for nama, v in pelanggan.items():\n",
        "    print(nama, v, \"panjang\", round(length(v), 3))\n",
        "print(\"A vs B:\", round(cosine(pelanggan[\"A\"], pelanggan[\"B\"]), 3))\n",
        "print(\"A vs C:\", round(cosine(pelanggan[\"A\"], pelanggan[\"C\"]), 3))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 4. Matrix sebagai list of list\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "X = [\n",
        "    [25000, 4.8, 120],\n",
        "    [27000, 4.7, 100],\n",
        "    [90000, 3.5, 12],\n",
        "]\n",
        "print(\"baris:\", len(X))\n",
        "print(\"kolom:\", len(X[0]))\n",
        "print(\"rating produk kedua:\", X[1][1])\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 5. Model linear mini: skor = w·x + b\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "def linear_score(x, w, bias):\n",
        "    return dot(x, w) + bias\n",
        "\n",
        "fitur_produk = [0.2, 0.9, 0.7]\n",
        "bobot = [-0.3, 0.8, 0.5]\n",
        "bias = 0.1\n",
        "print(linear_score(fitur_produk, bobot, bias))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 6. Decision boundary sederhana\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "def predict_boundary(x1, x2):\n",
        "    score = 1.2*x1 + 0.8*x2 - 1.0\n",
        "    return \"layak\" if score >= 0 else \"tidak layak\"\n",
        "\n",
        "for point in [(0.9, 0.8), (0.2, 0.3), (0.6, 0.6)]:\n",
        "    print(point, predict_boundary(*point))\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "## 7. Challenge\n",
        "\n",
        "1. Tambahkan pelanggan D.\n",
        "2. Hitung cosine A-D.\n",
        "3. Ubah bobot model linear dan amati skor.\n",
        "4. Jelaskan hasilnya dengan bahasa manusia.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "pelanggan[\"D\"] = [4, 2, 1]\n",
        "print(\"A vs D:\", round(cosine(pelanggan[\"A\"], pelanggan[\"D\"]), 3))\n",
        "\n",
        "bobot_baru = [-0.1, 1.0, 0.2]\n",
        "print(\"skor lama:\", round(linear_score(fitur_produk, bobot, bias), 3))\n",
        "print(\"skor baru:\", round(linear_score(fitur_produk, bobot_baru, bias), 3))\n"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "name": "python",
      "pygments_lexer": "ipython3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}