{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":31254,"databundleVersionId":3103714,"sourceType":"competition"}],"dockerImageVersionId":31234,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# H&M Fashion Recommender","metadata":{}},{"cell_type":"markdown","source":"## Cấu hình chung","metadata":{}},{"cell_type":"code","source":"import os, gc, csv, math, time\nfrom pathlib import Path\n\nimport numpy as np\nimport pandas as pd\n\nimport matplotlib.pyplot as plt\nfrom PIL import Image\nfrom tqdm.auto import tqdm\n\nfrom sklearn.feature_extraction.text import TfidfVectorizer\nfrom sklearn.neighbors import NearestNeighbors\nfrom sklearn.preprocessing import OneHotEncoder, StandardScaler, normalize\nfrom sklearn.decomposition import TruncatedSVD\nfrom sklearn.model_selection import train_test_split\n\nimport torch\nimport torch.nn as nn\nfrom torch.utils.data import Dataset, DataLoader\n\n# Reproducibility\nRANDOM_STATE = 42\nnp.random.seed(RANDOM_STATE)\ntorch.manual_seed(RANDOM_STATE)\n\n# Kaggle paths\nDATA_DIR = Path(\"/kaggle/input/h-and-m-personalized-fashion-recommendations\")\nARTIFACT_DIR = Path(\"/kaggle/working/artifacts\")\nARTIFACT_DIR.mkdir(parents=True, exist_ok=True)\n\nprint(\"DATA_DIR:\", DATA_DIR, \"| Exists:\", DATA_DIR.exists())\nprint(\"ARTIFACT_DIR:\", ARTIFACT_DIR)\n\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\nprint(\"device:\", device)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-09T16:40:25.144247Z","iopub.execute_input":"2026-01-09T16:40:25.144557Z","iopub.status.idle":"2026-01-09T16:40:27.960319Z","shell.execute_reply.started":"2026-01-09T16:40:25.144503Z","shell.execute_reply":"2026-01-09T16:40:27.959417Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"SAMPLE_PATH = DATA_DIR / \"sample_submission.csv\"\nsample_sub = pd.read_csv(SAMPLE_PATH)\n\nsample_customer_ids = sample_sub[\"customer_id\"].astype(str).tolist()\nprint(\"sample_submission rows:\", len(sample_customer_ids))\nprint(\"example customer:\", sample_customer_ids[0])\n\n# map prediction \nsample_pred_map = dict(zip(\n    sample_sub[\"customer_id\"].astype(str).values,\n    sample_sub[\"prediction\"].astype(str).values\n))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-09T16:40:27.962051Z","iopub.execute_input":"2026-01-09T16:40:27.962947Z","iopub.status.idle":"2026-01-09T16:40:32.571051Z","shell.execute_reply.started":"2026-01-09T16:40:27.962908Z","shell.execute_reply":"2026-01-09T16:40:32.570370Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Hàm phụ trợ ","metadata":{}},{"cell_type":"code","source":"IMG_DIR = DATA_DIR / \"images\"\n\ndef pad_article_id(aid) -> str:\n    \"\"\"Kaggle submission dùng 10-digit article_id.\"\"\"\n    try:\n        return str(int(aid)).zfill(10)\n    except Exception:\n        s = str(aid)\n        return s.zfill(10) if s.isdigit() else s\n\ndef uniq_keep_order(xs):\n    seen = set()\n    out = []\n    for x in xs:\n        if x not in seen:\n            out.append(x)\n            seen.add(x)\n    return out\n\ndef ensure_12(recs, fallback_12):\n    recs = [pad_article_id(x) for x in recs]\n    recs = uniq_keep_order(recs)\n    if len(recs) < 12:\n        recs = recs + [pad_article_id(x) for x in fallback_12]\n        recs = uniq_keep_order(recs)\n    return recs[:12]\n\ndef write_submission_stream(customer_ids, rec_fn, fallback_12, out_csv, max_customers=None):\n    \"\"\"\n    Ghi submission dạng stream (không giữ DataFrame lớn).\n    rec_fn(cid) -> list article_id\n    \"\"\"\n    out_csv = str(out_csv)\n    n = len(customer_ids) if max_customers is None else min(len(customer_ids), max_customers)\n\n    with open(out_csv, \"w\", newline=\"\") as f:\n        w = csv.writer(f)\n        w.writerow([\"customer_id\", \"prediction\"])\n        for cid in tqdm(customer_ids[:n], total=n, desc=f\"Write {Path(out_csv).name}\"):\n            recs = rec_fn(cid)\n            recs12 = ensure_12(recs, fallback_12)\n            w.writerow([cid, \" \".join(recs12)])\n\n    print(\"Saved:\", out_csv, \"| rows:\", n)\n\ndef get_image_path(article_id):\n    aid_str = pad_article_id(article_id)\n    subdir = aid_str[:3]\n    return IMG_DIR / subdir / f\"{aid_str}.jpg\"\n\ndef _plot_article_row(article_ids, axes_row, fontsize=8):\n    n_cols = len(axes_row)\n    for col_idx, ax in enumerate(axes_row):\n        if col_idx < len(article_ids):\n            aid = article_ids[col_idx]\n            try:\n                img = Image.open(get_image_path(aid))\n                ax.imshow(img)\n            except Exception:\n                ax.text(0.5, 0.5, str(aid), ha=\"center\", va=\"center\")\n            ax.set_title(str(aid), fontsize=fontsize)\n        else:\n            ax.set_title(\"\")\n        ax.axis(\"off\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-09T16:40:32.571979Z","iopub.execute_input":"2026-01-09T16:40:32.572326Z","iopub.status.idle":"2026-01-09T16:40:32.608126Z","shell.execute_reply.started":"2026-01-09T16:40:32.572301Z","shell.execute_reply":"2026-01-09T16:40:32.607478Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def _to_int_list_from_pred_str(pred_str: str):\n    # sample_submission prediction là chuỗi 12 ids cách nhau bởi space\n    toks = str(pred_str).strip().split()\n    out = []\n    for t in toks:\n        t = t.strip()\n        if not t:\n            continue\n        # \"0706016001\" -> int\n        try:\n            out.append(int(t))\n        except Exception:\n            pass\n    return out\n\ndef ap_at_12(true_items, pred_items):\n    \"\"\"\n    AP@12 theo công thức:\n    AP@12 = 1/min(m,12) * sum_{k=1..min(n,12)} P(k)*rel(k)\n    \"\"\"\n    if true_items is None or len(true_items) == 0:\n        return None  # không đánh giá được\n\n    true_set = set(map(int, true_items))\n    pred = [int(x) for x in pred_items[:12]]\n\n    hit = 0\n    s = 0.0\n    for k, aid in enumerate(pred, start=1):\n        if aid in true_set:\n            hit += 1\n            s += hit / k\n    denom = min(len(true_set), 12)\n    return s / denom if denom > 0 else None\n\ndef map_at_12_on_customers(customer_ids, true_dict, rec_fn, max_users=None):\n    \"\"\"\n    Đánh giá MAP@12 trên đúng list customer_ids (ví dụ từ sample_submission).\n    - Chỉ tính trên users có ground truth (có mua trong test week nội bộ).\n    \"\"\"\n    cids = list(map(str, customer_ids))\n    if max_users is not None:\n        cids = cids[:max_users]\n\n    total = 0.0\n    cnt = 0\n    skipped_no_gt = 0\n\n    for cid in tqdm(cids, desc=\"Eval MAP@12\"):\n        gt = true_dict.get(cid, [])\n        if not gt:\n            skipped_no_gt += 1\n            continue\n\n        pred = rec_fn(cid)\n        # pred có thể là list int (từ recommend_*) hoặc list str -> ép int\n        pred_int = []\n        for x in pred[:12]:\n            try:\n                pred_int.append(int(x))\n            except Exception:\n                pass\n\n        ap = ap_at_12(gt, pred_int)\n        if ap is None:\n            skipped_no_gt += 1\n            continue\n        total += ap\n        cnt += 1\n\n    return {\n        \"MAP@12\": total / max(1, cnt),\n        \"eval_users\": cnt,\n        \"skipped_no_gt\": skipped_no_gt\n    }\n\ndef map_at_12_from_sample_submission(customer_ids, true_dict, sample_pred_map, max_users=None):\n    \"\"\"MAP@12 nếu dùng prediction có sẵn trong sample_submission.csv (để so sánh baseline).\"\"\"\n    cids = list(map(str, customer_ids))\n    if max_users is not None:\n        cids = cids[:max_users]\n\n    total = 0.0\n    cnt = 0\n    skipped_no_gt = 0\n\n    for cid in tqdm(cids, desc=\"Eval MAP@12 (sample_submission pred)\"):\n        gt = true_dict.get(cid, [])\n        if not gt:\n            skipped_no_gt += 1\n            continue\n        pred_str = sample_pred_map.get(cid, \"\")\n        pred = _to_int_list_from_pred_str(pred_str)\n        ap = ap_at_12(gt, pred)\n        if ap is None:\n            skipped_no_gt += 1\n            continue\n        total += ap\n        cnt += 1\n\n    return {\n        \"MAP@12\": total / max(1, cnt),\n        \"eval_users\": cnt,\n        \"skipped_no_gt\": skipped_no_gt\n    }","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-09T16:40:32.608973Z","iopub.execute_input":"2026-01-09T16:40:32.609194Z","iopub.status.idle":"2026-01-09T16:40:32.626048Z","shell.execute_reply.started":"2026-01-09T16:40:32.609157Z","shell.execute_reply":"2026-01-09T16:40:32.625261Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Chuẩn bị dữ liệu ","metadata":{}},{"cell_type":"code","source":"articles = pd.read_csv(DATA_DIR / \"articles.csv\")\ncustomers = pd.read_csv(DATA_DIR / \"customers.csv\")\ntransactions = pd.read_csv(DATA_DIR / \"transactions_train.csv\", parse_dates=[\"t_dat\"])\n\nprint(\"articles:\", articles.shape)\nprint(\"customers:\", customers.shape)\nprint(\"transactions:\", transactions.shape)\n\nmax_date = transactions[\"t_dat\"].max()\ntest_start = max_date - pd.Timedelta(weeks=1)\ntrain_start = test_start - pd.Timedelta(weeks=6)\n\ntrain_df = transactions[(transactions[\"t_dat\"] >= train_start) & (transactions[\"t_dat\"] < test_start)].copy()\ntest_df  = transactions[transactions[\"t_dat\"] >= test_start].copy()\n\nprint(\"Max date      :\", max_date)\nprint(\"Train from    :\", train_start, \"->\", test_start)\nprint(\"Test from     :\", test_start, \"->\", max_date)\nprint(\"Train shape   :\", train_df.shape)\nprint(\"Test shape    :\", test_df.shape)\n\n# Ground truth trong tuần test nội bộ\ntrue_items_dict = test_df.groupby(\"customer_id\")[\"article_id\"].apply(list).to_dict()\nprint(\"test users:\", len(true_items_dict))\n\nall_customer_ids = customers[\"customer_id\"].astype(str).values","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-09T16:40:32.627966Z","iopub.execute_input":"2026-01-09T16:40:32.628190Z","execution_failed":"2026-01-09T16:40:41.609Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## EDA","metadata":{}},{"cell_type":"code","source":"# Age buckets\ncust_basic = customers[[\"customer_id\", \"age\"]].copy()\ncust_basic[\"age_bucket\"] = pd.cut(\n    cust_basic[\"age\"],\n    bins=[0, 18, 25, 35, 50, 100],\n    labels=[\"<18\", \"18-25\", \"25-35\", \"35-50\", \"50+\"]\n)\n\nplt.figure(figsize=(6,4))\ncust_basic[\"age_bucket\"].value_counts().sort_index().plot(kind=\"bar\")\nplt.title(\"Phân bố nhóm tuổi khách hàng\")\nplt.xlabel(\"Nhóm tuổi\"); plt.ylabel(\"Số khách hàng\")\nplt.tight_layout(); plt.show()\n\n# Top product type\nplt.figure(figsize=(10,4))\narticles[\"product_type_name\"].value_counts().head(15).plot(kind=\"bar\")\nplt.title(\"Top 15 Product Type phổ biến\")\nplt.xticks(rotation=60, ha=\"right\")\nplt.tight_layout(); plt.show()\n\n# Transactions per day\ntmp = train_df.copy()\ntmp[\"date\"] = tmp[\"t_dat\"].dt.date\ntx_per_day = tmp.groupby(\"date\")[\"t_dat\"].count()\n\nplt.figure(figsize=(10,4))\ntx_per_day.plot()\nplt.title(\"Số giao dịch mỗi ngày (6 tuần train)\")\nplt.xticks(rotation=45)\nplt.tight_layout(); plt.show()\n","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.609Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Popularity Recommender","metadata":{}},{"cell_type":"code","source":"from pathlib import Path\nfrom tqdm.auto import tqdm\nimport numpy as np\n\n# =========================\n# Popularity — build\n# =========================\ndef get_global_popular_items(train_df, topk=5000):\n    item_pop = train_df.groupby(\"article_id\")[\"t_dat\"].count().sort_values(ascending=False)\n    popular_items = item_pop.head(topk).index.astype(int).tolist()\n    return popular_items, item_pop\n\npopular_items, item_pop_series = get_global_popular_items(train_df, topk=5000)\npopular_12 = popular_items[:12]\nprint(\"Top 12 popular:\", popular_12)\n\ndef rec_popularity(cid):\n    return popular_12  # list int\n\n# =========================\n# Submission \n# =========================\nOUT_POP = Path(\"/kaggle/working/submission_popularity_SAMPLE.csv\")\nwrite_submission_stream(\n    sample_customer_ids,\n    rec_popularity,\n    fallback_12=popular_12,\n    out_csv=OUT_POP,\n    max_customers=None\n)\nprint(\"Saved:\", OUT_POP)\n\n# =========================\n# Metrics @12: MAP, Precision, Recall, F1, Accuracy (subset), Hit@12\n# =========================\ndef ap_at_12(true_items, pred_items):\n    if not true_items:\n        return None\n    true_set = set(map(int, true_items))\n    pred = [int(x) for x in pred_items[:12]]\n\n    hit = 0\n    s = 0.0\n    for k, aid in enumerate(pred, start=1):\n        if aid in true_set:\n            hit += 1\n            s += hit / k\n    denom = min(len(true_set), 12)\n    return s / denom if denom > 0 else None\n\ndef eval_metrics_at_12(customer_ids, true_dict, rec_fn, max_users=20000):\n    cids = list(map(str, customer_ids))\n    if max_users is not None:\n        cids = cids[:max_users]\n\n    # MAP\n    map_sum = 0.0\n    map_cnt = 0\n\n    # Micro totals for P/R/F1\n    TP = 0\n    FP = 0\n    FN = 0\n\n    # Accuracy (subset) + Hit@12\n    subset_acc_sum = 0\n    hit_sum = 0\n\n    skipped_no_gt = 0\n\n    for cid in tqdm(cids, desc=\"Eval @12 (MAP/P/R/F1/Acc)\"):\n        gt = true_dict.get(cid, [])\n        if not gt:\n            skipped_no_gt += 1\n            continue\n\n        gt_set = set(map(int, gt))\n        pred = rec_fn(cid)[:12]\n\n        pred_int = []\n        for x in pred:\n            try:\n                pred_int.append(int(x))\n            except Exception:\n                pass\n        pred_int = pred_int[:12]\n        pred_set = set(pred_int)\n\n        # AP / MAP\n        ap = ap_at_12(gt, pred_int)\n        if ap is not None:\n            map_sum += ap\n            map_cnt += 1\n\n        # Confusion counts (treat set-based @12)\n        tp = len(gt_set & pred_set)\n        fp = len(pred_set - gt_set)\n        fn = len(gt_set - pred_set)\n\n        TP += tp\n        FP += fp\n        FN += fn\n\n        # Hit@12 (any correct)\n        if tp > 0:\n            hit_sum += 1\n\n        # Subset accuracy: tất cả GT (giới hạn 12) nằm trong dự đoán\n        gt_cap = set(list(gt_set)[:12])  # cap cho đúng tinh thần @12\n        subset_acc_sum += 1 if gt_cap.issubset(pred_set) else 0\n\n    precision = TP / (TP + FP) if (TP + FP) > 0 else 0.0\n    recall    = TP / (TP + FN) if (TP + FN) > 0 else 0.0\n    f1        = (2 * precision * recall / (precision + recall)) if (precision + recall) > 0 else 0.0\n\n    eval_users = (len(cids) - skipped_no_gt)\n    map12 = map_sum / max(1, map_cnt)\n\n    return {\n        \"MAP@12\": map12,\n        \"Precision@12_micro\": precision,\n        \"Recall@12_micro\": recall,\n        \"F1@12_micro\": f1,\n        \"Accuracy_subset@12\": subset_acc_sum / max(1, eval_users),\n        \"Hit@12_any\": hit_sum / max(1, eval_users),\n        \"eval_users\": eval_users,\n        \"skipped_no_gt\": skipped_no_gt\n    }\n\n# =========================\n# RUN EVAL\n# =========================\nMAX_EVAL_USERS = 20000  \nmetrics_pop = eval_metrics_at_12(sample_customer_ids, true_items_dict, rec_popularity, max_users=MAX_EVAL_USERS)\nprint(\"Popularity metrics (internal, sample customers):\")\nfor k, v in metrics_pop.items():\n    print(f\"  {k}: {v}\")\n","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.609Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Lấy tập mẫu ","metadata":{}},{"cell_type":"markdown","source":"### Phân tầng người dùng ","metadata":{}},{"cell_type":"code","source":"user_tx_counts = (\n    transactions.groupby(\"customer_id\")[\"article_id\"]\n    .count()\n    .reset_index(name=\"n_transactions\")\n)\n\ndef assign_segment(n_tx: int) -> str:\n    if n_tx <= 20:  return \"new_users\"\n    if n_tx <= 100: return \"medium_users\"\n    if n_tx <= 200: return \"frequent_users\"\n    if n_tx <= 500: return \"heavy_users\"\n    return \"super_users\"\n\nsegment_order = [\"new_users\",\"medium_users\",\"frequent_users\",\"heavy_users\",\"super_users\"]\nuser_tx_counts[\"user_segment\"] = user_tx_counts[\"n_transactions\"].apply(assign_segment)\n\nseg_counts = user_tx_counts[\"user_segment\"].value_counts().reindex(segment_order).fillna(0).astype(int)\nplt.figure(figsize=(8,5))\nseg_counts.plot(kind=\"bar\")\nplt.title(\"Phân bố phân tầng người dùng (toàn bộ dữ liệu)\")\nplt.xlabel(\"Phân tầng\"); plt.ylabel(\"Số khách hàng\")\nplt.xticks(rotation=45, ha=\"right\")\nplt.tight_layout(); plt.show()","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.609Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Lấy tập mẫu dựa trên phân tầng ","metadata":{}},{"cell_type":"code","source":"# Sample users per segment\nN_PER_SEGMENT = 1000\nsampled_user_ids = []\nfor seg in segment_order:\n    seg_users = user_tx_counts.loc[user_tx_counts[\"user_segment\"] == seg, \"customer_id\"]\n    if len(seg_users) == 0:\n        continue\n    n_pick = min(N_PER_SEGMENT, len(seg_users))\n    sampled_user_ids.append(seg_users.sample(n_pick, random_state=RANDOM_STATE))\nsampled_user_ids = pd.concat(sampled_user_ids).astype(str).values\nprint(\"Sampled users:\", len(sampled_user_ids))\n\n# Lấy giao dịch (TRONG 6 tuần train) của user sampled\ntrain_seg = train_df.merge(user_tx_counts[[\"customer_id\",\"user_segment\"]], on=\"customer_id\", how=\"left\")\nsampled_tx = train_seg[train_seg[\"customer_id\"].astype(str).isin(sampled_user_ids)].copy()\n\nprint(\"sampled_tx:\", sampled_tx.shape, \"| unique users:\", sampled_tx[\"customer_id\"].nunique(), \"| unique items:\", sampled_tx[\"article_id\"].nunique())","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.609Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Collaborative Filtering dùng SVD","metadata":{}},{"cell_type":"code","source":"from scipy.sparse import coo_matrix\n\nui_df = sampled_tx[[\"customer_id\",\"article_id\"]].drop_duplicates()\nuser_ids = ui_df[\"customer_id\"].astype(str).unique()\nitem_ids = ui_df[\"article_id\"].astype(int).unique()\n\nuser_id_to_idx = {u:i for i,u in enumerate(user_ids)}\nitem_id_to_idx = {a:j for j,a in enumerate(item_ids)}\nidx_to_item_id = {j:a for a,j in item_id_to_idx.items()}\n\nrows = ui_df[\"customer_id\"].astype(str).map(user_id_to_idx).values\ncols = ui_df[\"article_id\"].astype(int).map(item_id_to_idx).values\ndata = np.ones(len(ui_df), dtype=np.float32)\n\nUI = coo_matrix((data, (rows, cols)), shape=(len(user_ids), len(item_ids))).tocsr()\nprint(\"UI shape:\", UI.shape)\n\nK_FACTORS = 64\nsvd = TruncatedSVD(n_components=K_FACTORS, random_state=RANDOM_STATE)\nU = svd.fit_transform(UI)        # (n_users, K) ~ UI * V^T  (đã \"ăn\" Sigma)\nVt = svd.components_             # (K, n_items)\n\n# map user -> bought items set (trong sampled_tx)\nuser_to_items_sample = ui_df.groupby(\"customer_id\")[\"article_id\"].apply(set).to_dict()\n\ndef recommend_cf_svd(customer_id, topk=10):\n    customer_id = str(customer_id)\n    if customer_id not in user_id_to_idx:\n        return []\n\n    u_idx = user_id_to_idx[customer_id]\n    # scores = U[u] @ Vt  (không tạo R_hat)\n    scores = U[u_idx].dot(Vt)  # (n_items,)\n    bought = user_to_items_sample.get(customer_id, set())\n\n    # lấy top (topk + buffer) để lọc item đã mua\n    buf = max(200, topk * 50)\n    top_idx = np.argpartition(-scores, kth=min(buf, len(scores)-1))[:buf]\n    top_idx = top_idx[np.argsort(-scores[top_idx])]\n\n    recs = []\n    for j in top_idx:\n        aid = int(idx_to_item_id[int(j)])\n        if aid not in bought:\n            recs.append(aid)\n        if len(recs) >= topk:\n            break\n    return recs","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.610Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def show_cf_svd_visual(customer_id, topk=8):\n    true_items = true_items_dict.get(customer_id, [])[:topk]\n    if len(true_items) == 0:\n        print(f\"[CF–SVD] User {customer_id} không có giao dịch trong tuần test.\")\n        return\n\n    pred_items = recommend_cf_svd(customer_id, topk=topk)\n\n    print(f\"User: {customer_id}\")\n    print(\"  True (test week):\", true_items)\n    print(\"  CF–SVD recs     :\", pred_items)\n\n    n_cols = max(len(true_items), len(pred_items))\n    if n_cols == 0:\n        return\n\n    fig, axes = plt.subplots(2, n_cols, figsize=(2.2*n_cols, 6))\n    axes = np.array(axes)\n    if axes.ndim == 1:\n        axes = axes.reshape(2, n_cols)\n\n    _plot_article_row(true_items, axes[0, :], fontsize=9)\n    _plot_article_row(pred_items, axes[1, :], fontsize=9)\n\n    fig.text(0.5, 0.94, \"CF–SVD — MA TRẬN TƯƠNG TÁC USER–ITEM + TRUNCATED SVD\",\n             ha=\"center\", va=\"center\", fontsize=14, fontweight=\"bold\")\n    fig.text(0.02, 0.70, \"Thực tế\", rotation=90, ha=\"center\", va=\"center\", fontsize=11, fontweight=\"bold\")\n    fig.text(0.02, 0.25, \"Gợi ý\",   rotation=90, ha=\"center\", va=\"center\", fontsize=11, fontweight=\"bold\")\n    plt.tight_layout(rect=[0.05, 0.02, 1.0, 0.92])\n    plt.show()\n\n# demo\ncandidate_users = [cid for cid in ui_df[\"customer_id\"].astype(str).unique() if cid in true_items_dict]\ndemo_users = pd.Series(candidate_users).sample(min(3, len(candidate_users)), random_state=RANDOM_STATE).tolist()\nfor cid in demo_users:\n    print(\"=\"*80)\n    show_cf_svd_visual(cid, topk=12)","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.610Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import csv\nfrom pathlib import Path\nfrom tqdm.auto import tqdm\n\n# =========================\n# CF-SVD — rec function\n# =========================\ndef rec_cf_svd(cid):\n    return recommend_cf_svd(str(cid), topk=12)  # list int\n\n# =========================\n# SUBMISSION (SAMPLE ONLY)\n# =========================\nOUT_CF = Path(\"/kaggle/working/submission_cf_svd_SAMPLE.csv\")\nwrite_submission_stream(\n    sample_customer_ids,\n    rec_cf_svd,\n    fallback_12=popular_12,\n    out_csv=OUT_CF,\n    max_customers=None\n)\nprint(\"Saved:\", OUT_CF)\n\n# =========================\n# EVAL: MAP@12 + Precision/Recall/F1/Accuracy/Hit@12\n# =========================\nMAX_EVAL_USERS = 20000  # None nếu muốn full sample\n\nmetrics_cf = eval_metrics_at_12(\n    sample_customer_ids,\n    true_items_dict,\n    rec_cf_svd,\n    max_users=MAX_EVAL_USERS\n)\n\nprint(\"CF-SVD metrics (internal, sample customers):\")\nfor k, v in metrics_cf.items():\n    print(f\"  {k}: {v}\")\n","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.610Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Content-based (User & Item Feature Matrix)","metadata":{}},{"cell_type":"code","source":"import os\nimport numpy as np\nimport pandas as pd\nfrom pathlib import Path\nfrom tqdm.auto import tqdm\n\nfrom sklearn.preprocessing import StandardScaler, normalize\nfrom sklearn.neighbors import NearestNeighbors\n\nfrom scipy.sparse import csr_matrix, hstack, coo_matrix, diags\n\ntry:\n    from gensim.models import Word2Vec\n    from gensim.utils import simple_preprocess\nexcept Exception:\n    import sys, subprocess\n    subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"-q\", \"gensim\"])\n    from gensim.models import Word2Vec\n    from gensim.utils import simple_preprocess\n\ntry:\n    from sklearn.preprocessing import OneHotEncoder\n    _ = OneHotEncoder(sparse_output=True)\n    def make_ohe():\n        return OneHotEncoder(handle_unknown=\"ignore\", sparse_output=True)\nexcept TypeError:\n    from sklearn.preprocessing import OneHotEncoder\n    def make_ohe():\n        return OneHotEncoder(handle_unknown=\"ignore\", sparse=True)","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.610Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# -------------------------\n# 0) Chuẩn hoá article_id\n# -------------------------\ntransactions = transactions.copy()\narticles = articles.copy()\ntrain_df = train_df.copy()\n\ntransactions[\"article_id\"] = transactions[\"article_id\"].astype(int)\narticles[\"article_id\"] = articles[\"article_id\"].astype(int)\ntrain_df[\"article_id\"] = train_df[\"article_id\"].astype(int)\ntrain_df[\"customer_id\"] = train_df[\"customer_id\"].astype(str)\n","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.610Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# -------------------------\n# 1) Giá trung bình mỗi article\n# -------------------------\narticle_price = (\n    transactions.groupby(\"article_id\")[\"price\"]\n    .mean()\n    .reset_index(name=\"price\")\n)\n","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.610Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# -------------------------\n# 2) Item meta (TOÀN BỘ articles)\n# -------------------------\ncat_cols = [\"product_type_name\",\"product_group_name\",\"graphical_appearance_name\",\"colour_group_name\"]\n\nitem_meta = articles[[\n    \"article_id\",\n    \"product_type_name\",\n    \"product_group_name\",\n    \"graphical_appearance_name\",\n    \"colour_group_name\",\n    \"detail_desc\",\n]].copy()\n\nitem_meta = item_meta.merge(article_price, on=\"article_id\", how=\"left\")\n\n# fill missing\nitem_meta[\"price\"] = item_meta[\"price\"].fillna(item_meta[\"price\"].median())\n\nfor c in cat_cols:\n    item_meta[c] = item_meta[c].fillna(\"UNK\").astype(str)\n\nitem_meta[\"detail_desc\"] = item_meta[\"detail_desc\"].fillna(\"\").astype(str).str.lower()\n\n# sort để mapping ổn định\nitem_meta = item_meta.sort_values(\"article_id\").reset_index(drop=True)","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.610Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# -------------------------\n# 3) Train/Load Word2Vec (cache)\n# -------------------------\nW2V_DIM = 100\nw2v_path = Path(ARTIFACT_DIR) / f\"w2v_dim{W2V_DIM}.model\"\n\n# tokenize tốt hơn split() (lọc punctuation, số, ký tự lạ)\ntokenized = [simple_preprocess(s) for s in item_meta[\"detail_desc\"].values]\nsentences = [toks for toks in tokenized if len(toks) > 0]\nprint(\"Word2Vec sentences:\", len(sentences))\n\nif len(sentences) == 0:\n    print(\"[WARN] Không có mô tả detail_desc để train W2V -> sẽ dùng vector 0.\")\n    w2v_model = None\nelse:\n    if w2v_path.exists():\n        w2v_model = Word2Vec.load(str(w2v_path))\n        print(\"Loaded:\", w2v_path)\n    else:\n        w2v_model = Word2Vec(\n            sentences=sentences,\n            vector_size=W2V_DIM,\n            window=5,\n            min_count=2,\n            workers=4,\n            sg=1,                 # skip-gram\n            seed=RANDOM_STATE,\n        )\n        w2v_model.save(str(w2v_path))\n        print(\"Saved:\", w2v_path)\n\ndef get_w2v_vector_from_tokens(toks) -> np.ndarray:\n    if w2v_model is None or toks is None or len(toks) == 0:\n        return np.zeros(W2V_DIM, dtype=np.float32)\n    vecs = [w2v_model.wv[w] for w in toks if w in w2v_model.wv]\n    if not vecs:\n        return np.zeros(W2V_DIM, dtype=np.float32)\n    return np.mean(vecs, axis=0).astype(np.float32)","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.611Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# -------------------------\n# 4) Build item feature matrix (sparse)\n# -------------------------\nohe = make_ohe()\nX_cat = ohe.fit_transform(item_meta[cat_cols])  # sparse\n\n# num price -> scale (dense n×1) rồi đưa về sparse\nscaler = StandardScaler()\nX_num = scaler.fit_transform(item_meta[[\"price\"]].values).astype(np.float32)  # dense (n,1)\n\n# W2V matrix (dense n×W2V_DIM)\nw2v_mat = np.vstack([\n    get_w2v_vector_from_tokens(toks)\n    for toks in tqdm(tokenized, desc=\"W2V vec\")\n]).astype(np.float32)\n\nX_item = hstack([X_cat, csr_matrix(X_num), csr_matrix(w2v_mat)], format=\"csr\")\n\n# normalize để cosine similarity = dot product\nX_item_norm = normalize(X_item, norm=\"l2\", axis=1)\n\nitem_ids_all = item_meta[\"article_id\"].astype(int).values\naid2row_cb = {int(a): i for i, a in enumerate(item_ids_all)}\nrow2aid_cb = {i: int(a) for i, a in enumerate(item_ids_all)}\n\nprint(\"X_item shape:\", X_item.shape, \"| nnz:\", X_item.nnz)","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.611Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# -------------------------\n# 5) item-item KNN (similar items)\n# -------------------------\nknn_item_cb = NearestNeighbors(n_neighbors=200, metric=\"cosine\", algorithm=\"brute\")\nknn_item_cb.fit(X_item_norm)\nprint(\"KNN item (CB) fitted.\")\n\ndef get_similar_items(article_id, topk=10):\n    a = int(article_id)\n    r = aid2row_cb.get(a, None)\n    if r is None:\n        return []\n    # kneighbors trả về distance cosine (0 tốt nhất)\n    dist, neigh = knn_item_cb.kneighbors(X_item_norm[r], n_neighbors=min(topk+1, len(item_ids_all)))\n    neigh = neigh.ravel().tolist()\n\n    out = []\n    for rr in neigh:\n        aa = row2aid_cb[int(rr)]\n        if aa != a:\n            out.append(aa)\n        if len(out) >= topk:\n            break\n    return out\n","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.611Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# -------------------------\n# 6) User profile = mean(item features đã mua) (sparse UI)\n# -------------------------\nui_train = train_df[[\"customer_id\",\"article_id\"]].drop_duplicates().copy()\nui_train[\"customer_id\"] = ui_train[\"customer_id\"].astype(str)\nui_train[\"article_id\"] = ui_train[\"article_id\"].astype(int)\n\n# chỉ giữ items có trong item_meta\nui_train = ui_train[ui_train[\"article_id\"].isin(aid2row_cb)].reset_index(drop=True)\n\nu_ids = ui_train[\"customer_id\"].unique()\nu2idx = {u:i for i,u in enumerate(u_ids)}\ncid2urow_cb = {u:i for i,u in enumerate(u_ids)}\n\nrows = ui_train[\"customer_id\"].map(u2idx).values\ncols = ui_train[\"article_id\"].map(aid2row_cb).values\ndata = np.ones(len(ui_train), dtype=np.float32)\n\nUI_train_cb = coo_matrix((data, (rows, cols)), shape=(len(u_ids), len(item_ids_all))).tocsr()\n\ncnt = np.asarray(UI_train_cb.sum(axis=1)).ravel().astype(np.float32)\ncnt[cnt == 0] = 1.0\nDinv = diags(1.0 / cnt)\n\n# mean of purchased item vectors\nuser_profile_cb = Dinv.dot(UI_train_cb).dot(X_item_norm)  # (n_users, d) sparse\n\n# normalize user profile để cosine ổn định\nuser_profile_cb = normalize(user_profile_cb, norm=\"l2\", axis=1)\n\n# map user -> bought set (train)\nuser_to_items_train = ui_train.groupby(\"customer_id\")[\"article_id\"].apply(set).to_dict()\n\ndef recommend_content_based(customer_id, topk=10, buf_mul=80):\n    customer_id = str(customer_id)\n    urow = cid2urow_cb.get(customer_id, None)\n    if urow is None:\n        return []\n\n    uvec = user_profile_cb[urow]  # (1,d) sparse\n    # cosine similarity = dot(uvec, X_item_norm.T)\n    sims = uvec.dot(X_item_norm.T).toarray().ravel()  # (n_items,)\n\n    bought = user_to_items_train.get(customer_id, set())\n\n    n = len(sims)\n    if n == 0:\n        return []\n\n    buf = min(n, max(500, topk * buf_mul))\n    kth = min(n - 1, buf - 1)\n\n    top_idx = np.argpartition(-sims, kth=kth)[:buf]\n    top_idx = top_idx[np.argsort(-sims[top_idx])]\n\n    recs = []\n    for r in top_idx:\n        aid = row2aid_cb[int(r)]\n        if aid not in bought:\n            recs.append(aid)\n        if len(recs) >= topk:\n            break\n    return recs\n","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.611Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# -------------------------\n# 7) Visual demo \n# -------------------------\ndef show_cb_visual(customer_id, topk=8):\n    customer_id = str(customer_id)\n    true_items = true_items_dict.get(customer_id, [])[:topk]\n    if len(true_items) == 0:\n        print(f\"[Content-based] User {customer_id} không có giao dịch trong tuần test.\")\n        return\n\n    pred_items = recommend_content_based(customer_id, topk=topk)\n\n    print(f\"User: {customer_id}\")\n    print(\"  True (test week):\", true_items)\n    print(\"  CB recs         :\", pred_items)\n\n    if \"_plot_article_row\" not in globals():\n        print(\"[WARN] Chưa có hàm _plot_article_row -> bỏ qua phần vẽ ảnh.\")\n        return\n\n    import matplotlib.pyplot as plt\n\n    n_cols = max(len(true_items), len(pred_items))\n    if n_cols == 0:\n        return\n\n    fig, axes = plt.subplots(2, n_cols, figsize=(2.2*n_cols, 6))\n    axes = np.array(axes)\n    if axes.ndim == 1:\n        axes = axes.reshape(2, n_cols)\n\n    _plot_article_row(true_items, axes[0, :], fontsize=9)\n    _plot_article_row(pred_items, axes[1, :], fontsize=9)\n\n    fig.text(0.5, 0.94, \"CONTENT-BASED — USER PROFILE (MEAN ITEM FEATURES) + COSINE\",\n             ha=\"center\", va=\"center\", fontsize=14, fontweight=\"bold\")\n    fig.text(0.02, 0.70, \"Thực tế\", rotation=90, ha=\"center\", va=\"center\", fontsize=11, fontweight=\"bold\")\n    fig.text(0.02, 0.25, \"Gợi ý\",   rotation=90, ha=\"center\", va=\"center\", fontsize=11, fontweight=\"bold\")\n    plt.tight_layout(rect=[0.05, 0.02, 1.0, 0.92])\n    plt.show()\n\n# demo vài users có test ground-truth\ncandidate_users = [cid for cid in train_df[\"customer_id\"].unique() if cid in true_items_dict]\nif len(candidate_users) > 0:\n    demo_users = pd.Series(candidate_users).sample(min(3, len(candidate_users)), random_state=RANDOM_STATE).tolist()\n    for cid in demo_users:\n        print(\"=\"*80)\n        show_cb_visual(cid, topk=12)\nelse:\n    print(\"[INFO] Không tìm thấy user nào có true_items_dict để demo.\")","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.611Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pathlib import Path\n\n# =========================\n# Content-based — rec function\n# =========================\ndef rec_cb(cid):\n    return recommend_content_based(str(cid), topk=12)  # list int (có thể <12)\n\n# =========================\n# SUBMISSION (SAMPLE ONLY)\n# =========================\nOUT_CB = Path(\"/kaggle/working/submission_cb_SAMPLE.csv\")\nwrite_submission_stream(\n    sample_customer_ids,\n    rec_cb,\n    fallback_12=popular_12,\n    out_csv=OUT_CB,\n    max_customers=10000 \n)\nprint(\"Saved:\", OUT_CB)\n\n# =========================\n# EVAL: MAP@12 + Precision/Recall/F1/Accuracy/Hit@12\n# =========================\nMAX_EVAL_USERS = 20000  # None nếu muốn eval full sample\n\nmetrics_cb = eval_metrics_at_12(\n    sample_customer_ids,\n    true_items_dict,\n    rec_cb,\n    max_users=MAX_EVAL_USERS\n)\n\nprint(\"CB metrics (internal, sample customers):\")\nfor k, v in metrics_cb.items():\n    print(f\"  {k}: {v}\")\n","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.611Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Image-based + KNN — ResNet50 / ViT Base / DINO Base (ITEM-BASED)","metadata":{}},{"cell_type":"code","source":"import torch\nimport numpy as np\nfrom PIL import Image\nfrom torchvision import transforms\nfrom sklearn.neighbors import NearestNeighbors\n\n# install timm if needed (for ViT / DINO)\ntry:\n    import timm\nexcept Exception:\n    import sys, subprocess\n    subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"-q\", \"timm\"])\n    import timm\n\nimg_tf = transforms.Compose([\n    transforms.Resize(256),\n    transforms.CenterCrop(224),\n    transforms.ToTensor(),\n    transforms.Normalize(mean=[0.485,0.456,0.406], std=[0.229,0.224,0.225]),\n])\n\ndef load_image_tensor(article_id):\n    p = get_image_path(article_id)\n    if not p.exists():\n        return None\n    try:\n        im = Image.open(p).convert(\"RGB\")\n        return img_tf(im)\n    except Exception:\n        return None\n\n@torch.no_grad()\ndef build_img_embeddings(article_ids, model, batch_size=128):\n    model.eval()\n    kept_ids, embs = [], []\n    batch_imgs, batch_ids = [], []\n\n    for aid in tqdm(article_ids, desc=\"IMG embed\"):\n        t = load_image_tensor(aid)\n        if t is None:\n            continue\n        batch_imgs.append(t)\n        batch_ids.append(int(aid))\n        if len(batch_imgs) >= batch_size:\n            x = torch.stack(batch_imgs).to(device)\n            z = model(x)\n            z = torch.nn.functional.normalize(z, dim=1)\n            embs.append(z.detach().cpu())\n            kept_ids.extend(batch_ids)\n            batch_imgs, batch_ids = [], []\n\n    if len(batch_imgs) > 0:\n        x = torch.stack(batch_imgs).to(device)\n        z = model(x)\n        z = torch.nn.functional.normalize(z, dim=1)\n        embs.append(z.detach().cpu())\n        kept_ids.extend(batch_ids)\n\n    embs = torch.cat(embs, dim=0).numpy().astype(np.float16)\n    kept_ids = np.array(kept_ids, dtype=np.int32)\n    return kept_ids, embs\n\n# ---- models\ndef get_resnet50_embedder():\n    from torchvision.models import resnet50, ResNet50_Weights\n    m = resnet50(weights=ResNet50_Weights.IMAGENET1K_V2)\n    m.fc = torch.nn.Identity()\n    return m.to(device)\n\ndef get_timm_embedder(name):\n    # num_classes=0 => returns pooled features for most timm models\n    m = timm.create_model(name, pretrained=True, num_classes=0)\n    return m.to(device)\n\n# ---- choose items with images (top popular)\nMAX_IMG_ITEMS = 30000\ncandidate_img_items = item_pop_series.index.astype(int).tolist()[:MAX_IMG_ITEMS] if \"item_pop_series\" in globals() else articles[\"article_id\"].astype(int).tolist()[:MAX_IMG_ITEMS]\n\n# light pre-filter by file existence (can be slow but ok for 30k)\nimg_items = [aid for aid in tqdm(candidate_img_items, desc=\"check images\") if get_image_path(aid).exists()]\nprint(\"Items with images:\", len(img_items))\n\ndef fit_image_knn(model_tag, model):\n    ids_path = ARTIFACT_DIR / f\"img_{model_tag}_ids.npy\"\n    emb_path = ARTIFACT_DIR / f\"img_{model_tag}_emb.npy\"\n\n    if ids_path.exists() and emb_path.exists():\n        ids = np.load(ids_path)\n        emb = np.load(emb_path)\n        print(\"Loaded cache:\", emb_path)\n    else:\n        ids, emb = build_img_embeddings(img_items, model, batch_size=128)\n        np.save(ids_path, ids)\n        np.save(emb_path, emb)\n        print(\"Saved cache:\", emb_path)\n\n    emb32 = emb.astype(np.float32)\n    knn = NearestNeighbors(n_neighbors=200, metric=\"cosine\", algorithm=\"brute\")\n    knn.fit(emb32)\n    aid2row = {int(a): i for i, a in enumerate(ids)}\n    row2aid = {i: int(a) for i, a in enumerate(ids)}\n    return ids, emb32, knn, aid2row, row2aid\n\n# ---- ResNet50\nresnet_model = get_resnet50_embedder()\nimg_ids_resnet, img_emb_resnet, knn_resnet, aid2row_resnet, row2aid_resnet = fit_image_knn(\"resnet50\", resnet_model)\n\n# ---- ViT base\nvit_model = get_timm_embedder(\"vit_base_patch16_224\")\nimg_ids_vit, img_emb_vit, knn_vit, aid2row_vit, row2aid_vit = fit_image_knn(\"vit_base\", vit_model)\n\n# ---- DINO base (try a couple names)\ndino_names = [\"vit_base_patch16_224.dino\", \"vit_base_patch16_224_dino\", \"vit_base_patch16_224\"]\ndino_model = None\nfor nm in dino_names:\n    try:\n        dino_model = get_timm_embedder(nm)\n        print(\"DINO model:\", nm)\n        break\n    except Exception as e:\n        print(\"Skip\", nm, \"->\", e)\n\nimg_ids_dino, img_emb_dino, knn_dino, aid2row_dino, row2aid_dino = fit_image_knn(\"dino_base\", dino_model)","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.611Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# =========================\n# Build train_hist + train_bought_set \n# =========================\ntrain_df[\"customer_id\"] = train_df[\"customer_id\"].astype(str)\ntrain_df[\"article_id\"] = train_df[\"article_id\"].astype(int)\n\n# đảm bảo hist[-1] là item mua gần nhất\ntrain_df_sorted = train_df.sort_values([\"customer_id\", \"t_dat\"])\n\n# lịch sử mua theo thời gian (list)\ntrain_hist = (\n    train_df_sorted.groupby(\"customer_id\")[\"article_id\"]\n    .apply(list)\n    .to_dict()\n)\n\n# set item đã mua (để lọc)\ntrain_bought_set = (\n    train_df_sorted.groupby(\"customer_id\")[\"article_id\"]\n    .apply(lambda s: set(map(int, s.values)))\n    .to_dict()\n)\n\nprint(\"train_hist users:\", len(train_hist))\nprint(\"train_bought_set users:\", len(train_bought_set))","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.611Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pathlib import Path\n\n# =========================\n# Image-based item-item KNN recommender \n# =========================\ndef recommend_img_item_based(customer_id, topk=12, backend=\"resnet50\"):\n    cid = str(customer_id)\n    hist = train_hist.get(cid, [])\n    if not hist:\n        return popular_12\n\n    last_aid = int(hist[-1])\n\n    if backend == \"resnet50\":\n        a2r, r2a, knn, emb = aid2row_resnet, row2aid_resnet, knn_resnet, img_emb_resnet\n    elif backend == \"vit\":\n        a2r, r2a, knn, emb = aid2row_vit, row2aid_vit, knn_vit, img_emb_vit\n    elif backend == \"dino\":\n        a2r, r2a, knn, emb = aid2row_dino, row2aid_dino, knn_dino, img_emb_dino\n    else:\n        raise ValueError(f\"Unknown backend={backend}. Use 'resnet50'/'vit'/'dino'.\")\n\n    r = a2r.get(last_aid, None)\n    if r is None:\n        return popular_12\n\n    bought = train_bought_set.get(cid, set())\n\n    # sklearn KNN (CPU) — lấy nhiều hơn topk để lọc bought\n    dists, neigh = knn.kneighbors(emb[r:r+1], n_neighbors=200, return_distance=True)\n    neigh = neigh.ravel()\n\n    recs = []\n    for rr in neigh:\n        aid = int(r2a[int(rr)])\n        if aid != last_aid and aid not in bought:\n            recs.append(aid)\n            if len(recs) >= topk:\n                break\n\n    return recs if recs else popular_12\n\n\n# =========================\n# 3 hàm rec riêng \n# =========================\ndef rec_img_resnet50(cid):\n    return recommend_img_item_based(cid, topk=12, backend=\"resnet50\")\n\ndef rec_img_vit(cid):\n    return recommend_img_item_based(cid, topk=12, backend=\"vit\")\n\ndef rec_img_dino(cid):\n    return recommend_img_item_based(cid, topk=12, backend=\"dino\")\n\n\n# =========================\n# helper: submission + MAP@12 eval \n# =========================\nMAX_EVAL_USERS = 20000  \n\ndef make_img_submission_and_eval(tag, rec_fn):\n    out = Path(f\"/kaggle/working/submission_img_{tag}_SAMPLE.csv\")\n\n    # submission: chỉ sample_customer_ids\n    write_submission_stream(\n        sample_customer_ids,\n        rec_fn,\n        fallback_12=popular_12,\n        out_csv=out,\n        max_customers=1000\n    )\n    print(\"Saved:\", out)\n\n    # eval MAP@12 đúng\n    res = map_at_12_on_customers(\n        sample_customer_ids,\n        true_items_dict,\n        rec_fn,\n        max_users=MAX_EVAL_USERS\n    )\n    print(f\"IMG-{tag} MAP@12 (internal, sample customers):\", res)\n    return out, res\n\n\n# =========================\n# RUN: 3 submissions + 3 eval\n# =========================\nout_r50, res_r50 = make_img_submission_and_eval(\"resnet50\", rec_img_resnet50)\nout_vit, res_vit = make_img_submission_and_eval(\"vit\",      rec_img_vit)\nout_dino, res_dn = make_img_submission_and_eval(\"dino\",     rec_img_dino)\n","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.611Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Image-based SIFT + KNN (BoVW)","metadata":{}},{"cell_type":"code","source":"try:\n    import cv2\nexcept Exception:\n    import sys, subprocess\n    subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"-q\", \"opencv-python\"])\n    import cv2\n\nfrom sklearn.cluster import MiniBatchKMeans\nfrom sklearn.preprocessing import normalize\nfrom sklearn.neighbors import NearestNeighbors\n\nSIFT_ITEMS = 5000\nBOVW_K = 256\nMAX_KP = 200\n\nsift = cv2.SIFT_create()\n\ndef sift_desc(article_id):\n    p = get_image_path(article_id)\n    if not p.exists():\n        return None\n    img = cv2.imread(str(p), cv2.IMREAD_GRAYSCALE)\n    if img is None:\n        return None\n    kps, des = sift.detectAndCompute(img, None)\n    if des is None:\n        return None\n    return des[:MAX_KP]\n\nsift_candidates = img_items[:SIFT_ITEMS]\nall_desc = []\nkept = []\n\nfor aid in tqdm(sift_candidates, desc=\"SIFT desc\"):\n    des = sift_desc(aid)\n    if des is None:\n        continue\n    all_desc.append(des)\n    kept.append(int(aid))\n\nprint(\"Kept SIFT imgs:\", len(kept))\n\n# stack descriptors for kmeans training\nstack_desc = np.vstack(all_desc)\nkmeans = MiniBatchKMeans(n_clusters=BOVW_K, batch_size=4096, random_state=RANDOM_STATE)\nkmeans.fit(stack_desc)\n\ndef bovw_hist(des):\n    idx = kmeans.predict(des)\n    h = np.bincount(idx, minlength=BOVW_K).astype(np.float32)\n    return h\n\nX = np.vstack([bovw_hist(des) for des in tqdm(all_desc, desc=\"BoVW hist\")])\nX = normalize(X, norm=\"l2\")\n\nknn_sift = NearestNeighbors(n_neighbors=200, metric=\"cosine\", algorithm=\"brute\")\nknn_sift.fit(X)\n\nsift_ids = np.array(kept, dtype=np.int32)\nsift_aid2row = {int(a): i for i, a in enumerate(sift_ids)}\nsift_row2aid = {i: int(a) for i, a in enumerate(sift_ids)}\n\ndef recommend_sift_item_based(customer_id, topk=12):\n    cid = str(customer_id)\n    hist = train_hist.get(cid, [])\n    if len(hist) == 0:\n        return popular_12\n    last_aid = int(hist[-1])\n    r = sift_aid2row.get(last_aid, None)\n    if r is None:\n        return popular_12\n\n    bought = train_bought_set.get(cid, set())\n    dists, neigh = knn_sift.kneighbors(X[r:r+1], n_neighbors=200, return_distance=True)\n    neigh = neigh.ravel().tolist()\n\n    recs = []\n    for rr in neigh:\n        aid = sift_row2aid[int(rr)]\n        if aid != last_aid and aid not in bought:\n            recs.append(aid)\n        if len(recs) >= topk:\n            break\n    return recs","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.611Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import numpy as np\nfrom tqdm.auto import tqdm\n\ndef ap_at_12(true_items, pred_items):\n    \"\"\"\n    Average Precision@12 (AP@12) cho 1 user.\n    true_items: list/int ground-truth\n    pred_items: list/int predictions (top-k)\n    \"\"\"\n    if true_items is None or len(true_items) == 0:\n        return None\n\n    true_set = set(map(int, true_items))\n    pred = [int(x) for x in pred_items[:12]]\n\n    hit = 0\n    s = 0.0\n    for k, aid in enumerate(pred, start=1):\n        if aid in true_set:\n            hit += 1\n            s += hit / k\n\n    denom = min(len(true_set), 12)\n    return s / denom if denom > 0 else None\n\n\ndef eval_metrics_at_12(customer_ids, true_dict, rec_fn, max_users=20000):\n    \"\"\"\n    Tính metrics @12 trên danh sách customer_ids.\n    - Chỉ tính trên users có ground-truth trong true_dict\n    - Metrics:\n      MAP@12\n      Precision@12_micro / Recall@12_micro / F1@12_micro (set-based)\n      Accuracy_subset@12 (GT ⊆ pred@12)\n      Hit@12_any (>=1 hit)\n      (bonus) Accuracy_macro@12 = mean(TP/12) trên users có gt (tuỳ chọn)\n    \"\"\"\n    cids = list(map(str, customer_ids))\n    if max_users is not None:\n        cids = cids[:max_users]\n\n    # MAP\n    map_sum, map_cnt = 0.0, 0\n\n    # Micro P/R/F1\n    TP = FP = FN = 0\n\n    # Hit/Subset acc\n    hit_sum = 0\n    subset_acc_sum = 0\n\n    # Macro accuracy kiểu TP/12\n    macro_acc_sum = 0.0\n\n    skipped_no_gt = 0\n\n    for cid in tqdm(cids, desc=\"Eval metrics@12\"):\n        gt = true_dict.get(cid, [])\n        if not gt:\n            skipped_no_gt += 1\n            continue\n\n        gt_set = set(map(int, gt))\n\n        pred = rec_fn(cid)[:12]\n        pred_int = []\n        for x in pred:\n            try:\n                pred_int.append(int(x))\n            except Exception:\n                pass\n        pred_int = pred_int[:12]\n        pred_set = set(pred_int)\n\n        # MAP@12\n        ap = ap_at_12(gt, pred_int)\n        if ap is not None:\n            map_sum += ap\n            map_cnt += 1\n\n        # Confusion (set-based)\n        tp = len(gt_set & pred_set)\n        fp = len(pred_set - gt_set)\n        fn = len(gt_set - pred_set)\n\n        TP += tp\n        FP += fp\n        FN += fn\n\n        # Hit@12_any\n        if tp > 0:\n            hit_sum += 1\n\n        # subset accuracy: tất cả GT (cap @12) nằm trong pred_set\n        gt_cap = set(list(gt_set)[:12])\n        subset_acc_sum += 1 if gt_cap.issubset(pred_set) else 0\n\n        # macro accuracy TP/12\n        macro_acc_sum += tp / 12.0\n\n    eval_users = max(0, len(cids) - skipped_no_gt)\n    precision = TP / (TP + FP) if (TP + FP) > 0 else 0.0\n    recall    = TP / (TP + FN) if (TP + FN) > 0 else 0.0\n    f1        = (2 * precision * recall / (precision + recall)) if (precision + recall) > 0 else 0.0\n    map12     = map_sum / max(1, map_cnt)\n\n    return {\n        \"MAP@12\": map12,\n        \"Precision@12_micro\": precision,\n        \"Recall@12_micro\": recall,\n        \"F1@12_micro\": f1,\n        \"Accuracy_subset@12\": subset_acc_sum / max(1, eval_users),\n        \"Hit@12_any\": hit_sum / max(1, eval_users),\n        \"Accuracy_macro@12_(TP/12)\": macro_acc_sum / max(1, eval_users),\n        \"eval_users\": eval_users,\n        \"skipped_no_gt\": skipped_no_gt\n    }","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.611Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pathlib import Path\n\ndef rec_sift_bovw(cid):\n    return recommend_sift_item_based(str(cid), topk=12)\n\n# ---- submission (ONLY sample customers)\nOUT_SIFT = Path(\"/kaggle/working/submission_sift_bovw_SAMPLE.csv\")\n\nWRITE_LIMIT = None  # None để submit thật; 1000 để test nhanh\n\nwrite_submission_stream(\n    sample_customer_ids,\n    rec_sift_bovw,\n    fallback_12=popular_12,\n    out_csv=OUT_SIFT,\n    max_customers=WRITE_LIMIT\n)\nprint(\"Saved:\", OUT_SIFT)\n\n# ---- eval\nMAX_EVAL_USERS = 20000  # None = full sample\n\nmetrics_sift = eval_metrics_at_12(\n    sample_customer_ids,\n    true_items_dict,\n    rec_sift_bovw,\n    max_users=MAX_EVAL_USERS\n)\n\nprint(\"\\nSIFT-BoVW metrics:\")\nfor k, v in metrics_sift.items():\n    print(f\"  {k}: {v}\")","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.611Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Mô hình kết hợp lọc cộng tác và lọc nội dung và mạng Nơron","metadata":{},"attachments":{"6838a8d4-e8b9-47d6-89fa-d4c4f6011f95.png":{"image/png":"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"},"822840d9-79c0-4fe2-874f-30ded8ec649b.png":{"image/png":"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"},"ac9228bb-0b86-4485-996f-be4398448e03.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAADs4AAAEHCAMAAACDJ6I4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABjUExURQAAAL8AAL8AAL8AAL8AAMAAAMEAAMAAAMAAAL8AAMAAAMAAAL8AAL8AAMAAAMEAAMAAAL8AAL8AAMAAAMAAAL8AAMAAAL8AAL8AAMAAAL8AAL8AAMEAAMAAAL8AAL8AAMAAAHUMHkwAAAAhdFJOUwB4gCBQ/4evnzCntwgY94/PEHDf52jvKDi/SGCXx0BY14riL6sAAAAJcEhZcwAAFxEAABcRAcom8z8AAFsrSURBVHhe7Z1pd9s4DEXTpJ5uadp0SZsuaf//r5wjW7al90CRkihHdu/9MmdqBCRAAFy0XV0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/zYtr40ZlAAAAAAAAANbFy43xn8oAAAAAAAAArIxXupndvFYRAAAAAAAAgJXxRjezm7cqAgAAAAAAALA27OLsu1sVAQAAAAAAAFgZ7+/YzQIAAAAAAMDZ8UF2sx/vVQIAAAAAAABgbdzLxVl2swAAAAAAAHAGfOrvZj+/VwEAAAAAAACA1XH7pb+bvVEBAAAAAAAAgPXxtbebffimvwMAAAAAAACskI+93ewb/RkAAAAAAABghbzs7mbvvuvPAAAAAAAAAGvksbub/aG/AgAAAAAAAKyRN53d7IbdLAAAAAAAAJwHrzq72Z/6IwAAAAAAAMAquensZr/qjwAAAAAAAADr5OfjgRf6GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBF8qvzvqCG37cq8WzcfJa+bTZ371UIknS/OtvwWgUA1s+KK9R6eSFO22w2v1TmbLl9p7ZtNi9VCJ4H0hViSFuAS+f2KY3KKm/0D46Ubfx+aH3ZXKvIVLRDT6PntZsv2rnNB5VZBO35+K6P4Zu29k0lJnGtvtv8UZGFUbuWdeN5oC7BJxkWrFCXy61Xzrcqc8bc6kndZvNRZeaieUqiFjE1XdXbS7vbJt0blYDanCJt4aRYGmW3LA03+kdlmxU4A7rfU1G+q3Cf2wf9gyNFHxp978ueXJvFqN7N+Anjjdl3msuz2uqEro/gtbZW5TLq9ztVu3k4ifOOaPvLuvE8UJfgk2GWrFCXyyd12ebdwtuD03L/Ue2rfp1H9ZOoJUxOV/2jpd1tk27ZrhvmcIK0hZNiabT5pCIBdqWlaLMC58DQdjZTY59UvkNRhAS3f2w+V1r4qN4pE5TvyU7yyRltdErXy7GSUGM7e/tXtW42m0eVKqDouC1Gm1/WjeeBugSfDLNkhTobRuegPabx8cJcdm8WTqltQ6h+ErWEyemqf7S0u23SzSy1oAbLpy2cFEujogtObGcvl6HtbCbZLSw6lETIV/2jLTV2U7UmqB+6n/1SMjfORdqc1vVirCTUGABTuqXk6KzH+7cb/adytPVl3XgeqEvwySCLVqgzYXwOvlSHfbxXkXPHX6zwRkXmoepJ1AKmp6v+zdLutvmR7ewpWDxt4aRYGhU91WL7lpLNCpwFQ9vZu+HNmz+LcKQgQr7pXrGlzg0gqnXaBPVTtYzekU1A25zW9VKsJJRM/xlsQbvjbtxjubfXd5uxS+kO2vqybjwP1CX4ZIhlK9RZMCUH9Z6+zxcYZPYgyiuVmIdoJ1ELmJGu+idLu9smXbazJ2HptIWTYmm02Wx+qJDBdvZyGdrObgZvM7tNzB5b8hFyq6uePV8K7hfIo1onTlB64PtXBRZAmpza9UKsJMzfzkaPMG0ZddPhy+1Rqv5rOdr4sm48D9Ql+GSAhSvUOTAlB/V1PA8XGWNvdPYbd1SXQ5STqHnmpKv+ydLutkmX7expWDht4aRYGjUr9Owak+3s5TK4nR18k68uW3rkI+Q//ZMD71R0Cqp06gSlsV9w1DsXaXFy18uwkjB/O5u+bP+fiiZ50yrRfy9H217WjeeBugSfDLBwhVo/03LwVd9XDxd6P58+iDI4V46mr5tELWBOuupfLO1um3TZzp6IZdMWToqlUUM2lXRJX7BZgTNhcDs7+CLzDyrdJRshQ++R+qrCE1CdkycoMXPQJXXoNzij60VYSZi9nfUXmx4ZvN5/5P7gdf2lnH7DS7vxPFCX4JM0S1eotTMxB9/0PXWXv/nrTJEnKkpeQlJOXzeJmmdWuuofLO1um3Sza3CoxKJpCyfF0qgh+0gb29nLZXA7uxl6h0fq3p4tuQi5792P+qW/A8oGZAE9hQ2TJyjJmaIX/8+i396crpdgJWHudrb/CNPv/nHA56GIOvDp+IiL/lROr92GRd14HqhL8EmSxSvUypmag3Jx9mJ3s/ZiharXefqqSdQs89K1J92wsLtt0mU7ezKWTFs4KZZGW3I3Y7CdvVyGt7N/VPzIvcr2yEVIf9HzJNdAf2fvf8/S09cweYK67b/+f/mXB/Saa5jc9RKsJMzczva/0XN3I7ceF2h/6h6U6I/ldJTsWNSN54G6BJ8kWbxCrZrJOfi+fzNfbh44a/rroqpvve9pbiBRh5mXrj3hhoXdbZMu29nTsWDawkmxNNoxsGtpYDt7uQxvZwc2H4m317ZkIqR/Qvbh6ur2d+9f5lf3nrqG6RPUbX9DtvizYL3WGqZ3vQArCQNjXkJ/HfHz6up9/+34mVpzddNfmOjP5fTUNCzqxvNAXYJPUixfoVbMjBzsp/9JvtP9fPQf16z51vue4gYSdZCZ6dqTbVjY3TbpZvoHNVkubeGkWBrtyJxQsJ29XIa3s59V/EgilFqGI+Smfz9qE303/bfhzr6lt6etYcYEdd+7r/qX/lybbmNbZnQ9j43jvO1s/wVh26+Afe+N9vB7JrcfBumiAuX09SztxvNAXYJPEpygQq2WOTnYvzhb/ua3M6VXPDOrqFF09W4hUYeYm6490YaF3W2TLtvZU7JY2sJJsTRqGb6BnO3s5TK8nR0o6/ZF6h6DEdI/Ob3btdF/lcPnuTWmp60hbUme+66xi788oNPWjjldz2IlYdZ2tv+NnvZJ2f6DTEOPNvSfgGpQiXJU07JuPA/UJfgk5hQVaq3MysHeUmFWJTkPepexBye9cXTVbiFRB5idrj3RhoXdbZMu29mTslTawkmxNNozeAcl29nLJbOdTY701L9r6MfTXrT/r3OXQj1lDbMmqJvufnb47Gc+naZ2zOp6DisJszzfv0txfyTeb2PgPZMeVSpRjmpa1o3ngboEn8ScokKtlTk5eNvdCi//loHnp/dihYpvve9o3UGiDjA7XXuSDQu72yZdtrMnZam0hZNiabTnt0p2YTt7ufjipUdySSLvh1OGIuR7T/I4zfS3QjM/8NrT1TBvgnpzfM/n5mHwoHc+3V5vmdf1DFYSBuf9DF97mg5zdP8L9wPvmfRoVIlyVNOybjwP1CX4JOQkFWqtzMnB7n0Y7xYuk+ug9yBKvYjoKN1BoqaZn649wYaF3W2TLtvZ07JQ2sJJsTQ6MHDJhO3sBeOLlx4PKr8nHUlbBiKkd+du9yag/g/Dz1hm6araMnOCetN5Omfhlwd0e71lZteHsYGcsZ3tf6Pn8fjDTec0YOg9kx6NKlGOalrWjeeBugSfRJymQq2VOTnYuTj7seiTXOfPfedN7oMXBUZx1NlCoiapkK5duS0Lu9smXbazJ2aZtIWTYml04GEg2dnOXi6+eOmTugu9tz9xBiKkF4N33Vc0dLeMw89Y5ulq2jJ3gvpx7NzCLw/odbthbtcHsZIwfTvbf4Tpodvt/nuwk5O3R6NKlKOalnXjeaAuwScRp6lQa2VGDnayvOwD05dA90GU1Gw5mqPKFhI1SYV0vVYWjl6bdJMzIizEImkLJ8XS6MjAKpbt7OXii5c+iSuRb1ROSEfI7VOXfiH51vtt1qZROzR/PdDp3LKTnfZ8fteHsJIwUAgy3HdH76l/S/Gb3m+9nzp4NKpEOappWTeeB+oSfBJwogq1VmbkYMc7A6fjl8b7o9XV0kmHgERNco7papMu29mTs0TawkmxNOqQXGOynb1gfPHSp3PHaJf+y2qdZ48Q7dAZrQe058t23UrC9O3sfDwaVaIc1bSsG88DdQk+AaVmDsJEdAhI1IvCJl22swBjsTTq8DF5eMV29nLxxUufuzgq+m9ZcJ49QrRDZ7Qe0J4v23UrCWxnLxd1CT4BpWYOwkR0CEjUi8ImXbazAGOxNOryQqX3sJ29XGzx0nsJbeqi/a08OmsfoX32CNEOndF6QHu+bNetJLCdvVzUJfgElJo5CBPRISBRLwqbdNnOAozF0qjLXep5F7azl4stXh5lPxsW2v4nyjcbi6tnjxDt0BmtB7Tny3bdho7t7OWiLsEnoNTMQZiIDgGJelHYpBuusgBgAEujHqmPjLKdvVxs8fL4of//4UemJSI+ry9CtENntB7Qni/bdSsJbGcvF3UJPgGlZg7CRHQISNSLwiZdtrMAY7E06pP4nvD6NitQC1u8PPa/qbLZRK/xfeyLvF5fhGiHzmg9oD1ftutWEtjOXi7qEnwCSs0chInoEJCoF4VNumxnAcZiadQn8UHN9W1WoBa2eHm8l38Izjhue99z22x+ToyQ+6cXr/f3Nn98fPzvuvvRuHlIf2Q98O3F691N1Z8fH68DAyvz/frD4+4E4PHx7c/ofKCL9nzZrltJqLSdfXP9qrX58+Pjh8KRtWicsZRWTbXd2ATv/kO7lYN3x/3P/x53z6j/fnz7qcp6tuuOLWVaK+bpmxe/Hh/3n7D//fjra/hs/nwqtVPR8g7j6oHy/uuvx8emAn95fHX9M56yZzA5B7+/vH51cPlms/n7+Pb60yR/VRq8halnr3PU2nKxidphXlo0VLS/AjefXu/suXt8/PCnm6g26T7jdnae1xcuRguwZNoO8OP61eP2FTO/H19f9z9i2OFmvyz5+Pjq+uu4wVjEsFVHh6WR8J/+wZaJm5WFF3x/3m0dtfn462fqod8Dy5S5eUO9Dmzx8nglD89+0D+5uvrRl9jcTImQb5/2sdHh4e3Xsok7hyrurAduXnRyvuHhdW+uMR4Vi7f3IvC289vNtb4o691XU9BFpGd1PY+VhGg7+0ns2zIwxj9+qc2bh7dDadqq9IjotBcE4hCqqaob37zQV6YNBO+bjhFbDuHxU37ouPSlvjz8Y3oSLEZUFq2S6+Xp+5+vv6iiZtr9NBAYU6jVznTLq9aDHjfap7vXnX3GC2n3R/dPc7R/4zZ3FKZy8P1XuWHnyO8Po+K21uC16Ej0xyLiWv/gnUpUtTdGlV5Goupg1EuLhhn2S7+CGX403z/YHHM8NbVJV7ezP7RDyajVKeTR3ui6nNeXK0ba5wEHtDx/2uo035nMv/0n+fQ72tvd/zR3lu5Tphumnj6H6NhjaSTc9b9C3TJls1JrwfdBfmg7eP+p5+hXQ9dXppe55YZ6NQTbWXl49rP+yZVLjI6Q209S7Dv8/aTSE1Clh/XA9yAYNpsHmwQ6qLCvLdSLR59phWr5MHD4obJzup7HSkKwnf2jMg3RdLHl9lree33gYzJNVTIi8QnkFPrn9dx4/0JT/0gUvPritGN4aN4cVjUvg+K52TwOTkwFqEKPZKFinn5PTribzbs/Kj2dSu3MsrxqPejw7Z3+YcPnQ3c0mXNluIf8bUicgy8HXN7w92uweAupNHgd3N/hGueA3nm02fxSkYr2plCNl5GoS6XFbPv1L7LuzvEj7M2XfT5qntp29qcKBKuwHTqF+Py9lNcXLUbes9WnrU7zhzH9EU3md7+ksfevzYTSPs0x7Cyjo0V1GOF0ZRmTbbregk8Hare//26Hh6mV8qwyt9RQrwg1cfN4pQ/PemmX9Hw9NkLeJzc8Oz4P/3kJqrK14l524kf+pm+mUlH3iHpxHyjvw5xueHiRrDAqOqfreawk2HR49RTV2Xep/n+13OywP45SVC4irE1p9M9rufH9h7HBm65umjftDHivV2b33P2X8noZqs8juUfFPH2TMqnlY5nzs1RqZ6blVevBgXTo/m7POTSZh3spyN+GRDn4FM+FPT4XbYMqDV4P2xhEtxt1cHktWfXsTaP6LiNRl0mLCvarfMbdOW6SPny3S1TN02fZzs7z+sLFyByw/rTVaX4/masf9vztHU7/SEXw79yeYp5hZxkdLarDibRaxkRCHWou+MLt7I9ofR1duZhZ5pYZ6lWhJm4er/ThWfORC4yLkBfR8PVJnU4Uowp3E9SPoa3W69TQqaBPdurFNlB+DkXfX9PSooJzup7HSoJNh98iKz4mWgxPIru8DW9hUKmIaCk9gP55JTdOCN50ddO82c2Aflh35MuUm3IOqDaP5C4TTE1w81b/0Hk12JcyarUz1/Kq9WDPz4GweNgVXE3mwTKsyN+GeA7eF7i84VVuVVZt8ProJ9KTbwhp0QWHvtq/nr1DqLbLSNRF0qKG/So97O4Mt/8NdOduu0DUPH2O7ew8ry9djM4wbXWa343pwILj4RiTyT1vM166Me8x17CzjI4W1eF8Cay2jBluekJx0UgY3s6Gu9m/fY1bJvSkxyJDvS7UxGbBYhdfBb98OyZC3hQcJpUcSg2j6poJ6jZ5aLojdcFR5XyyUy9uAyV96LHjc3QAk2huatfzWEnQ4b6JbrT4mBid5KHckbsoNlQowpfSg+ifV3Hjt8Lg7e3Z09VN82Y7A76QfxR05TMG1eWRfKRinv7J1+Fmnptx3WdHpXbmW161HrT8Uvk+2+WKJnOUaknkb0MsB29yx1cHhldl1QbP8JI0dCKkI7fZfO3/Xs3eQVTZZSSqOrdGWlSxX2WH3J3jNmNPM8donlpRX3w7O9PrixejM0xbneabMb1VJ/TZP+D0NLD96217jdmGqefOIzp2qI4Av+XcM2ao6coLvmA7+z2suf7o2/wyt8RQrww1sVmwSCX5on8jUfR5VIRkFutHEulXiGrb3GTnmeTjoCrmk516sQmUcBvY4yG2UMXmdD2PlQSZDu+jevk5vMR6dVt2UtifabaoSIQtpYfRP6/hxoLzsR294E1XN82b6/xqKPW+viJUlUfygYp5qlamuBuYtkuo1E4Fy6vWgy25g5jN5newTE6X4QD52xDNwTeD67A+Q+ZVGzznm2rYDL1Vxrpx1zvhqmfvMKrrMhK1flpUsl9FB9ydI5wve3y8tzw9+XZ2ntdPUIzOMG11mi+ZzHc+Ca/PdUneKjzfsPOMjh2qI8JfpmWxMtB07QWfb2fvY19bAapQ5uoP9epQE5sFi159VXvEA69HREjmtKrH0KFUFlW2ucmWlvgsJ9SlEurFzyVxEt8KETU3vet5bED602HY9GdzwJZ7TdYUOnkHNgfoUjqD/nkFN2ZOHbvcdWagdHXTvLm+uio4EbAFSzGqySO5pWKeFp5xbEmVjRIqtVPF8qr1oKEktd55Mg/Y6cjfhkgO3gzdp2Q8xIdgDZUGL8Rcd5d0s81tUhCq2ZtDVV1GolZPi1r2q2TS3Vlu0q9qOfDRby3VGXHh7ew8r5+iGJ1h2uo0fx0vnnrcNde+srvZzZdElyoYdqbRsUV1RMhN51HGpJuuvuBT3zxdxXt/XetWKXPVh3p9qImNI/XZWHljlv7Jz/IIuc/md4/cq7oGUFWb+E1rSnhDiwr5ZKcu+VxwSNsQvt5AheZ0PY/lSX86tJ+bfInvPyi/78WnXBWI0BTPoH8+2435U8cexxVKurpp3lyXHcKZ+0pRRR7JOyrm6X3ZPTItqUqcp1I7dSyvWg+KLvk0vLZsTZThGPnbkH4O3hZ160jy3odKgxfj72UPbg9psVTtneVWszeLarqMRK2dFtXsV7mUu7O8L1geNt8613857XZ2ntfL/npmMTrDtNVOXOd3s5vN39uC3WwwqFtqGHam0bFFdWz8DvUg5y1jUk0vsODTxH+yRN8hoV6nzNUe6hWiJm4XLGLkq/6f6AjcFEfI2PQbvlY2iGralDXtZzmRLpvs1Iufy+Ik/jCWCs3peh4rCb3KaQObvvvgtuBc+oAOrP4eMXc7O9ONJZNTj4Mj09VN3XutN0Yk8CcrylA9HslbauapFvBhHuIOFVCnnUqWV60HV0WX7BuuNZnjMpxA/jakn4PaXJbUJqjO4CW4tRvyfqvIATuO75WDavZmUUWXkai106Ka/SqWcHeecU48ctLt7Eyvn6QYnWHa6jT/X9GC4XXJbnb/RRehhmFnGh1bVMcmuqJyp9ekLWMSTS+x4NP68Ce+vC43IlQqc7WHeoWoidsFixxy9J9D0CBqKkdhhIw77WhInDPkUUWlRA2qjE926sUvpZkgJwVbVKaUqOt5rCR0p0ObVZtoCCtroGgQeRpEf46Yu50tJOVGmzKzHF70oD8kt7Oviqa2zebOnwgpQvV4JG+pmKdqYY7msZopVGqnkuVV60GchiE6OcZlOIH8bUgvBwvPXjokFqSVBi+Fn9nHt5dE71PtHpNXszePKrqMRK2cFvXsV6mEu7N8Uj2lnHI7O9Pr1rUUmkujitEZpq1O84VzeRl/g3SrYti5RkeDLTlvvuu/BM9cW8Ykml5iwafbWTuy2SG+rVTmKg/1GlETtwsWzZP+BkYCsbkUXRYh/6lUntTeKYsqKsXeexXpssnOvFiMHh1FzRUSdT2PlYTOdBgdHN4l7sb1e4MGkadB9OeIE21nE24sugtYaA9D09XN8qaUaHYrQNV4JDdUzFMzPcu0O1sqtVPL8qr14OpbkIZlhGU4hf5xRC8Hy852e4TnvJUGL4m/VSb1NjUrYr1j8lr2FqB6LiNR66ZFRftVKnZ3lumJesrtbDmR16fbOKoYnWHajk+hMQR3Wlcx7Fyjo8HWrjfhHlRWrJYxcdOLLPh0O5ugf7GnVpmrO9SrxExsFiz68Gyv2L6RH5shLIoQKzolTLqpKZqgSgniQEV8sjMvFhMco6hIMUHX81hJOE6Hb/QErSHxkr1xLyWwMzP9NeJE29nYjT9UqoT2Lo10dbO8KcYWLUWoFo/kunn6PnH6OMCkO1sqtVPN8qr14HbUQ409ojKcRP84opuDU7yly/aGSoM3gC0iUpsDO67uplkte0tQPZeRqFXToqb9KhS6O8voewKPaJysYzsbeP1UxajhzNLWpvmq+OqnjmFnGx3R2vXm6j4oZJ/7Z/+WMWHTyyz4LKRDHnodnjLOYZmrOtTrxEzcpo3U5V4q6Q01zUFYSYREgVZAretQBz5ev3y6v3rz9ClOveC2cxXxyc68eOTz9aen91ffn/6LXxIR3P6hIkfGdz2PlYTDVBC+9SwY2Ia4jj1+erq5unp6+Tra6/b2xfpjhBf0QfTPj0xwoz/IU8Tug0bp6mZ50+Hh8df19X+PqYYTF8mHUSUeyXXzNFG9H6+vr68/PEbxNe3Oljrt1LO8aj3Qgtvy8dPTm6ur70/XA8+sJ7I1Rv84opODYUq8+/S0PQ1683Qd3iHlTq81eEPo3UaJI6ur9yrW/cxDNXtLUD2XkahV06Km/SoTuTtPIlE/f3j63kTIp4Hdrm4zTrSdHe/1hI3Vi1HDmaWtTfMHPl//aD4w+vQhWgcdefjw8+n26unP2/ASp75ftpJhZxsd0dr1Jt789bPLMiZqOvRuntyCL1FnhV4K1ytzVYd6nZiJ2wWLPjzbTSVJk+1D9yUREt0G0Hjq065Gff+aGGq99b0M1bLnbacifrdTvXjeUBGf7MyLe/52HPEzjEu/jq8Se6Z0PY+VhH0uhc+Jp95BFNWxd0c33b7wQt673Vh/jKi0nZ3kRn+OZ8u7r7uJ883PcPJop490dbO8OfDrsF39YSO0JfnKqiFUiUdy1Tz19Uhj/NfDwL8P3xsx/qpPpXbqWV6zHsQTaye5rtKv7A7KcBr944hODgbrhte9h9vug6R56ArsqDR4Q7gLbc2/xe4v6yZZLXuLUD2Xkag106Kq/SoSuTuLR1nD3865401iltAF94m2sxO8Htu4QDFq8MbMti0rSVub5ls+Hg/u/QtNRx6uD6vsb9E5u55fVzLsbKMjWrs2LQUtbD+HdMAyJmo68F3D3AVfoiQJvVObemWu5lCvFDNxu2DR6a3zRjR97H77CE1BhOg9yjvedv303sJzy+hZs0GV7NCX8kZB6+8bUAmf7MyLO+QLUOE36fxlcyqxY1rX85jP2ykjfK+bzroH3LK7vmHB18gCZe5HlShHNe2Y5sY4eD90T3nu4yccmubS1c3ypuWx14Xv0ew2KS1Uh0dywtRpeepjvnl40f++fSDiJ8g5AiUT2qloucfxlkn1QGtxg35a7kc4B0VlOI/3XSV2+HxurdmiPAq4YGQmDN4wlpvydsMWG4/uTVa17C1C1QR6KobrScYgDK0tk9Kiqv0qEbg7T5Sod30vJhNV50KLpPrb2Ulej2xcrhidV9raNL+jP7RxRDYbpd7V12DxpVcSKhl2vtEROLOxLnp8t/eFIsuYoOm4uMxf8AVVdMff19c//lzv7oPpvb0l7smkMldzqFeKmbjdzurDs53XPuhQbQ0tiJDoWt9fvXnke+TK0bNmgyrZ8tmSOQhJHzmVKK0JunW6ug/M0yoVNNcwset5LBXa6dD+PZop93gde9ChvbUD/mCGdj+qRDmqactEN0bB+1tH902062xu09CUyW5ndXETDsaUtFAdHsmhqRPzNKjElhJRgfdODVOpnYqWexw3WKeK6kHQcVMUPxgQleE83neV2HJvqwaL2qjv6s9agzeM2xR5xl6L2b0rqZa9ZaiawNyK4XqSMQiHocGaKkqLmvaXuDtP4CB/b2IiUTWWbCMSTJY7bAqxSbqm1wMbTVHKxijlhvGeRzrWkrY2zW+Rxw7jC5ibzbv+Rj24w1SuttUyzH3cYIO6wugIlkXbtLWMkCfb7Peg6ai41FjwBR5q+Hzo38uP8pK9qCcTy1zNoV4pZuLudjJxYufuDQ2GbenQf/QICWbMzUd9HCC8iBccMxSgOhr++iXzoLr4yKmET3bmxYbPfpXPt33Bk5oq0TC163msJOymQxvRaKI84KOmCRcJuYz7USXKUU0NE90YBa/MPw3hBe2XQ9Ut8nI4L9koBd9TK0B1eCRHpk7NUz8/ttJ5dXXvs1tg/yB12qlpucfx5HoQdCuwLrFIsDJcgPddJbZ8VSnteMONrbnsTXJ1Bi+HZWb05ILd1tUteLXsLUPVXEaiemhNTouq9he4O0/QId/NphJVPbn4dnaa1wMbg0hJ2DihGJ1V2to032BGR49lBasJFxPTaxl2xtHhq6Jt2t4G27EvHf9axnjTgSU+RFMWfFE12mxed1W//Nj9CmPUk6llruJQrxUzcZc1eg/msbyL33Yb3XyE+Iwpt1e0RBFixwwFqI6G6GOdXjZ85FTCJzvzYjOXmZQfE4TGqUTD1K7nsZKwnQxsOo3zucVzTqfnBnt7pk28gR9VohzV1DDRjVHwRs6Igvfv7dVN80KVhv19+oeZyfKmIfwCRtCF1GcLBlAVHslBO1Pz1D+0YM//NHy3KfevigxTqZ2KlgdxPLke2GItKK4Nb8y8lGQG77tKbHm6lreUReb5elTfkVhp8HL4DO2HQX6w1S0XlewtRNV4axXD9URjEIXW5LSoaX+Ju/MEiWrnog221m3Q+dLm38rb2YleD2wMS0ytYnRWaRsNrDrQH9bb4kfT/norSbZahp1xdPjaddfvaCA6iyrLGG86Ki5VFnzRrlOvu/eIejK1zFUc6rViJu48rxFxGPFbCcVdmGQjJJgxg1dvNURvu9djhgJURWpI1J5ITCW8cpgXU7sSr89+3qgSYZ8Ku57HSkIzHUYfnA3zeYflXDy2unHsvWFsi/tRJcpRTSn/5N3ou3V99/ue2+Dg8Xgeerv/p0MDljdJ3733WTDxgdwhVIVFcs081SOxYKW1xWfB6NQhTZ12aloexPHkeuDj3nsQ6EgUS1qGS/C+q8SB+6dPv/YTtCbNDhsbPYMxgUmDl8XXvL7VsLGw3VoFewtRNReRqEFoTU6LmvYXuLsAT9TE+0Btxn2G7exEr7uNyxajs0pbXTM3aKBFO8x4OOwSYzDd1zDsjKPDM6lNW/v33khY69b0cgu+aDv7xZbBR6qWuYpDvVbMxF3HdY1/qJFq6e45w2yE+BOKd6mpMHiUe+j4IoGqSH4nzwLMXxmrEj7ZmRejA7cG9WtQfL25GV3PY6n/Ov7gbHCHwwETtzPALXYwaZ8Gdz+qRDmqabobfRkX3Ce9I5jSjsF7qJKHy7+WN+kloi1wgjDMohpMRc08tQnZjy+2qM8+v0s1GVOnnZqWB3E8tR64plhRPJ9pGS7BW1QJ4dvL63efdeps0RMsW2zXGbw8Nrxed+1QLq5i8+wtRNVcRKIGoZWI5mxaVLW/wN15Atv8Nr4t770/p97OTvS6a4oV1StGNswaBytKW02PxB7TTIq9aK8aSZbheYb5mIbdWWV02Nq1Tdvg7L+zqLOMsaaXW/DZWjMdr1s8WGaUOR+gxAhlh3q1mIntPlz8fqimetyzm/iyEeKHGH7MtseeCki80G4QVREk8g5LCZ84VMInO/Ni4tjj6sqeHi9obkbX85iS11c3diY6vJu1w6zukwpdtEzY8bX7USXKUU3T3ejusDPOA0H9OTjjcBR0KGCWN/EMuMWnAHsOJotqsEiumKf6Ojmrrns6pxyPvz49JWInSaV2KloexfHUeuCfY0gGiPfKynAJ3neVGIF9jF5ysNLg5fGb93RZYLuMeKofJmdvKarmEhI1Cq2paVHT/hJ35/FETVya8mnw9NvZiV53G5cuRueUtsHOJtoEBZ6JhsPGdVIZzht2ztFhK7d92gb6j9dOzLPW9HILvmA7m1osb6la5uoN9WoxE9vtrI75/qRRFtXtmYdKa4TYy+cGB9GjKSoLw6iG5OLfuu4jpxI+2ZkXk122DLxTCW9uRtfzWIdeR2828zcCd7AjwFQZ00v7Zrv7USXKUU2T3ejBm7h60eAvHDw2e2jo8GSaNR29VrnFvJyqRQOoBo1kN3V6nupgxw/kNTQh+Pnd9cvE1YwMddqpaXkUx1PrgR4fDgRIEHo2URfgfVeJEdgST5ZTdQavBLuIo0/IW34lNnWD5OwtRdVcQqJGoTU1LWraX+DuAjxRE9NNECQn385O9LrbuHQxOqe0NSW6ndhhO8x4OCwC2itH47A+mWHnHB3Wo0Pa2n5ss3nYH3NYxmjTXlyqLfiC7Wx6pxz1ZE6ZqzfUq8VMbLezmgft+YKe5LYr6lyE2O+DS3GrUIPSMaohWQ2sbPjEoRI+2ZkX40oWekIlvLkZXc9jkfs2SLnB3axPOanbJzR67HYs96MIjEA1TXajn7/plNrFi/phfj0ctR3Ojz0a0uXKjqHtpug8qkEj2fszlHnDeWqOeEiZ9n3KlZ4DddqpaXkUx1Prgc3L6QAJ7k/TiboE77tKjECnEV1O1Rm8EmzTpi3Z3Q+JqX6QnL2lqJpLSNQotKamhf8+3f4CdxcwJlH9mstpt7NTvT7GxjrF6JzS1pTETxy6WDgcvusdH5NBY2bYOUeHrV0PLoreNrU33ezQphdc8AVra73doIt1VQtXj1yZqzfUq8VMbFNQb59uL7jpDQXt+YuZLxFiNWcwN33hPv7WbdWQnA/UomDkVMA7b170+2hbbJ4qaG5G1/NYSQiIXrfewZ5USIprHOgBtvtRBEagmia70S9WJ+2L7rw+1IzDzHzsiOXNUOG0d0ikilEa1aCRrONjAj2G89Rmt+TNd/Oo005Ny6M4nlgPtAyn73wIA1kn6hK87ypRzMu31n1ZTtUZvCLs7Lp/7cDydvycU2BvKapGo7FmuJ5uDDy0JqZFVfsL3J1nVKL6Cvi029mJXh9lY51idE5pa1vHeO9hPY6Ppf3C3OiYLDLsnKPD1q5HF/mW9HDQYRmjTS+44PPt7MNRk1O3zFUb6vViJu5PlMTxrdc1gNoLXpkIObzh60B4bnXALvcNjmKIKkjO0V6EVMJ1WW/Mi8lbXjyPVcKbm9H1PDqiEQPHbGE+m3/26MDqjRbuRxEYgWqa6ka7pJwsAjtsdbgvhofadJzlLG+stHZ4obKDB3shqkBGqmae+uwWTu6zqdNOTcvDOJ5YDzy3dOHbwV+DOBBNSbzvKlHEt0+vbGRsOVVn8MqwXOuvtmyLkbrFJEGRvcWomgtI1DC0JqZFTfsb9Nf0DJbCEzX9kFtgnWa1rSerbmcnet1t1G53qFOMAvtWm7a+jgj7UjgcLjYuJksN83bC7qwyOmzt2qlqfgfE5uNuGWsRJU0vueDz7WxqVdpQucxVG+r1YibuHaaDvls6S5Dsz5VUWCLET5qGZ0xfuNs7cHOogmSLXoRUwnVZYTEv2kZtz5TmZnQ9j5WEiIHCFN3joBIH9CUYen7nfhSBEaimqW4cG7w2wbbnyccn9Y+3WFveDJ0D+u1Ho6cAVSCRPNbUoTx1XaNzuIg67biW6ZaHcTyxHviYJ59Him6TGB0gYd9VIsvTi1fWlZb+csrdPmXwyrC3yvTeGWOfBBnzRplie4tRNReQqGFoTUwL7/N0+xv0V5/hc3iiph5ALlr5L7udneh1t3HxYnROaeveC0OgcDhcrDwmxxjm7YTdCe3r/fwM0WFr146L7C71wwmTZYw0Pba4jFnw+XZ2SPfYnmTKXLWhXi9m4n47qxZtC65K772biRDf8Ohdpn08M7TcZ1EFycNSPydSCddlhUX9otPlEXVrSXMzup7HSkLE4CRhg5/uhorqt9TcjyIwAtU01Y0evMOV1+votuHjP3f28OqPwVtPbGJPBlkSVSCR7KZOz1MP9NHXkouo005Ny8M4Tg2Vd7/3sy1rvfZ0sMlyOFJjvO8qMcT3r7/8tLpDfznl1k8ZvELs7Lp78cQGNHVwLYyztxhVcwGJGobWxLSoaX+D/jqYZSGeqIk3NTT4VRdd35i6qtvZiV63Tg26qUoxOqe0de+FZ9M+HKFjXGzI2QdGG+btnE902Nq126LFzWZzt/3dMkaa9uIy3LcxCz4ze7BweU+GpINsWGhVsl7MxP12Vu9B2v67huz+/CUTIXpRzt8B1Mcv91sW5lAFyZA0B/jIqYDnqStJxV1m79SgAnO6nsdKQsjQLOGnU48p7A4QmfOrWNSimqa60YM3nKUOuLrmedgfx3Tq/LnlzeBtLXaiqYugLKpAItlNnZ6nWiq0rVrUaaem5WEMTKwHPqH1fhYsl1MhP4T3XSUSvPn5YXAltaVfyOsMXiG27Og+s2bvJsm/UWaCvcWomgtI1DC0JqZFTfsb9NfxLvCvZKhEF3s6Tyu5DUrV7exErz9DMTqntPU9QBhFPhyhY1ws1NZhmmHezvlEhynpusifJG03lpYx0rQXl3oLPt/ODgWs92RWmfOOThzq9WImHu7OFs9vn2/W6rHfjWQixA9Kej87egvJ4HYqRBXEN35EDvC+qYAXFleSilKXVAlvbkbX81hJiBk4sS/UECJqq1jUopqmunF+8D5eve8Upu4N1pY3g89G2GFA6l6RJKpAInm+qcc89dnNsqYKddqpaXkYUhPrgQXIYL/s/RdT1giZHsXc/Hxrhy0h/eVUncErxcbsuM6wzy0ktw87JtpbjKq5gEQNQ2tiWtS0v0F/He8CS9TBALJV7Wm3sxO9bk0Ner1KMWqwsVtp2vp2NrxA704Oh8PFhmJyumHeTtidULL38zNEh608ey7ywra7/mYdlabnF5f0gs8Sf3BU5/dkmVXJerGOHxbUOurNbkBS5nBOprISITaImarjC/fBZX6EKpgzcirgIehKUts/l1QJb25G1/NYSYgJ3763w5OuHDGtikUtqknbOpBp1IJX75BWLHi/XHdm3c/dOc7yRh8m7mE9sbkphyqQSLYGZuSpmbYZfJ/YZOq0U9PyMKQm1gO782GwX+aLKWuETI8Cvl37GxhT9EPWOjxp8EqxR4uOx0F2cS31ZELDdHuLUTUXkKhhaE1Mi5r2N+ivPsPnGJeo1v/Tbmcnen2cjdaxKcWo4VzS1rezKrHFnRwOh4slY3KWYd5O2J1QsvfzM0SHrV37Lgq80rzUNNe0JWfFBZ/pjo88Wkx60KVRT5ZZlawX6/jBAZqdH/wVBocHkzMRYvdA5IbFxnH069dVwZyRUwEvLK7ERFpcUiW8uRldz2MlIUG63NhgjUC0VrGoRTVNdeP84O3y0LtdxPLGZpsupnhw8xuhCiRM55t6zFO/Uab3l9Wo005Ny8OQmlgPLDsH+2ULv3TSpsn0SLn9Gawa0vQDvM7glWK3nx3XKTr+6ZcFzLK3GFVzAYkahtbEtKhpf4P+muxXEkvUwcdG7AT4tNvZlHUu2fvZbEx2qqFKMWo4l7TVBXMikdzJ4XAUis02rLSdSLL38zNEhzXZ77puVxr+CzJGmtagGjYkKi5d+gs+E73r/qrM78kyq5L1Yh0/bGf14dmPfvn+8OqyTIQMHxoE2Cc2cwckhiqYM3Iq4LpciYm0uKRKFDTXUqArj5WEBOmP9diDQCM45XZ2ohvnB2+X/h3PljcDn531W/2zPTFUgfhkvqnHPPW46v1lNeq0U9PyMKQmBp+tewfP9WwRPGWNkOmR8MPubxqmv5yqM3jFmDf32WjPCiUPiubZW4yquYBEDUNrYlrUtL9Bf032K4mF1mCPzOdnsZ01G5cvRlus3XWm7bNsZ2cbVthOKNn72UZp+eiwNJKu+0nd5u6NZ4w0Pb+4dOkv+Gy/mczrhvk9WWZVsl6s40ePqevvLWIPF8ozETJ6WCxOR7tT/37OyKmA63IlJtLikipR0FxLga487uoEyXeE2+iO4BK3swMefZDndy1vbLbpYopzPTFUwdxVsvXo6DqtHnOGcog67dS0PAypicFn1g1Of1XWCJke9bh3N2ToB7iZN9BWBezNj/tHi+xJrsRz9nPtLUbVXECihqE1MS1q2t+gPyb7lcS8ONgj685ZbGfNxmSnGsyEKcVoy5mk7TNsZysYVtTOFpfs/fwM0WHWS9fvg73+o2fM3O2sdeOILvjMSYN7/go96f7qAzhxqNeLdfzoMR32P8H12oSoRIhdNM8Ni+6buTobUaArj2dAgt1bzgMs6UYg03gVi1pU01Q3zg/eA7/1XijLG5ttuix+dXa+qcc8tYPCGUM5RJ12aloehtTE4BtuRrFwmrJGyPSoy9hLAxbgdQavHC1V2/cbBv+eWInNtrcYVXMBiRqG1sS0qGl/g/6a7FcSayARQjts0j2L7azZuHwx2qHpuc60te1sfCOpOzkcjhKxGoaVtLPDJXs/P0N0WBpp1/+oQNNQrun5xeWALfhsOzuoe35PllmVrBfr+NFjmp6v9R+O1+syEWKDOPBioS32B4OHGBGqYM7IqYDrciUm0uKSKlHQXEuBrjxWEpKk7uTRSWUMZ7CdtVgcHbx7/EXEljfvVKKLKZ7/vu++T6yB0aYe89TjSkt7Heq0Y4bMsDwMqYnB59b1fhYsnKasETI96vBdH2oT7l79tPVEfznl5k0ZvHLsia3dlwrsc/XxG2Xm21uMqrmARA1Da2JamDkz7G/QX5P9SmJeTGytdpj09O2sqbKIc1+mrHPJ3s/WVLIyNFQpRjvOI211eZwYM3dyOBwFYlUMK2inxSV7Pz9DdFiT1nU/q9t8sVuQpWmrFaOLyx5f8Jno4AbVpEf3ZJlVyXqxjh/9qxdjP2sIHh6dzQWnBVWc6EfscczBUY9QBXNGTgVclytJLQlcUiUKmmsp0JXHSkKaxK08o15FIJzBdnZ+8O74HLxZ2fJmMM6tWNnclEMViE/mm3rsv90IlvT/POq0U9PyMKQm1gN7XeRgQuQm6iIyPTpyM3Rt4Mu76ybebYnXD9k6g1eOvVVmdyCk3YjfKFPB3mJUzQUkahhaoaNDyd7PNe1v0F/Hu8C8ONgj6/9pt7MTvf4MxWjHeaStKYnHzJ0cBlterI5h3k7oxVCy9/MzRIfFvrro6kYjpwkT/Qdp2pIzHscjVlx2RAu+cUu4+T1ZZlWyXqzjHQeo79VZx3dM27K8HyEWdg+9nx274Dc46hGqwCO9xRzgI6cCrqtASUuBpAp4cy0FuvLY2LTcfbK0T5wNaZiMQV59VMWiFtU01Y3moPgeoiMWvA0fwy9WW94Mvg9T8y84/cugCsQnZuqMPDXTkv6fR512alqeD6kOGUm3LjUDNdjd6FPWCJkeHbhNHmP9/fVz/zrHzHLKzZsyeCPQu7Eetrct6mCG96HUsLcYVXMBiToitLKSNe1v0F/Hu8C8ODhL2JSZ3c4m1WlEe8RlfNkhI2k2Ll+MWtTIVaatKYk3H+7kMNiyYpUM83ZUYk9G8hmiw8qAe9Iu7AdI06Y1mXstGodb4gWfJb6NRxfrybwylxnADuWSK8M63tnOeoD2GJLsR4gf3Ax9bcmvCw+8hyiFKggifYc5wEdOBVxXgZKWAkkV8OZaCnTlsZTZcfcjGLVP+sdbdK7ZfHksRm4PqmJRi2qa6kZ3QyZ4VXyzeXgdHNQ1WN4M1isrVroIyqIKxCejTR3IU1uQpS7uz6ROOzUtz4dUh4ykvku+e0uMY+cdU9YImR4diAvHl9d/uqsYW071T2DqDN4IrD9Ne3bTYtiJGvYWo2ouIFFHhFZWsqb9Dfprcq5IYl9AHVzM20NxWsl9UETgQH6BnPFlh4zkMxSjFkurNaatKVl2O1vJMG9HJfZkJJ8hOswF7slba8iRpkcXFxUfWPBZtg5ubEb3ZLjMZQawQ7nkyrCOdzaplgt9OiXYluX9CPFanxjtFv9glJb7LKogiPQd5gAfORVwXQVKWgokVcCbaynQlcdKwpa7H1dX7x/0X7+EU7RpCE9Ji6hiUYtqmupGD95w2jzgWfM2+Y0jy5tN7ytlfbxsflWRHKpAfOKmTs9Te2oncRgylzrt1LQ8H1IdMpK+rI2fD9tyr7I6UReR6dEe98Bm8+XDG5GyZOgX8jqDNwZd3TSLf71pMXyHSRV7i1E1F5Co5aGVl6xpf4P+mpwrkniipj5z3mDLTg0TVycCB2yBvNx21ju1eDHacw5pa0oW3c7WMszbUYk9GclniA5beQaeNA840rQXl3oLPstWG48u3pNZZS4zgB3KJVeGdbyznfXNfo+Oa21Z3o8QO0fLzJg+jOGV+yFUQRTpW8wBPnIq4LoKlLQUSKqAN9dSoCuPlYQt24M1P28Lz5LsMYjBO2YHqWJRi2qa6kYP3oEyHd7ekq7UljdDJ5rekbTiBKpAfOItTM9TL/Jh8MymTjs1Lc+HVIeMpE9QA6//sg9ajA+QfI/2+MnxQ9CajU5/+rafJw3eGLSmNWtgveshXGJUsbcYVXMBiVoeWnnJmvY36K/JuSKJ597AksWzWsPE9wap6zIavAtuZ73bixejPeeQtqZk0e1sLcO8HZXYk5F8huiwtWvkSRMypGkvLvUWfOO2s96TWWUuM4AdyiVXhnW8+/CwOb/L/m3pDbYs7w+on8UMRHq0QQrjdBBVkNRgDvCRUwHXVaCkpUBSBby5lgJdecJs3w3frU4YzUeoHZt64zJeQhWLWlTTVDd68A5ffbZ7rweuuFre+M1AR7xYRaMxiCoQn7ip0/PUvZp+a/PP6z9D1zIGqdNOTcvDTnV/7ZKR9BPFgeTSyxVahsvI9Kgl6FgUjZnllLc1ZfDGYG+Vebr6Jv8S3iZax95iVM0FJGrYlErsyUjWtL9Bf03OFUl8MT8w8jZjmrBLpHpkcbncdjbIgd7vPeoUoz3nkLamJPaOOzkc2oxYNcO8HZXYk5EMetT7vUed6LC1a+TJ90NvzNoiTXtxqbfgsx2VjUcX78msMpcZwA7lkivDOt7dzvpqu8OgoESIRdSX5OX4Br21ZCgxEqiGMNIbzAE+cirgugqUtBRIqoA311KgK4+VhM7ovdQfwpWOzeTdg45xVLGoRTVNduO44PWqPvA8rOXN0KuN7Tx2vJ9Vg/pknKnDeWq60n7YFvm/r65fRjNyjjrtmJYZludD6khO0t/3kbzf6NZs0DJcRK5HO/RySXzSlV1OWZcnDd4Y9B0kHywJw8VLJXtLUTWXkKilodWQk7Q+z7C/wN0F2JM5Yyq5hYnPvIke+Yp3ue3sMxSjA2eQtqYkXrW6k8OhzYhVM8zbUYk9OcnTR4etXUNP+tGQoE1b5waLy6gF37jt7Mie5MpcbgCPlEuuDOt4twpbMnTpDoSWFo0Qe+P00E2VwZ0I8gLcAlRDHOmRA3zkVMB1FShpKZBUAW+upUBXHisJ3UcyvUJF42b5nCxjOapY1KKaJrvRg3fomVW/hhodAbRY3qR7GRSrgQVTAtWgrbmp0XjvGc5TP7RMhkVnKfjx7fWP9OFmRJ12alqeD6kjOUk/cE3WQn8IUstwEbke7bCX2cS3FdiyXKbvOoM3Bp3TPltehQNfyd5SVM0lJGppaDXkJGvaX+DuArxHqduDg1WqhYlGaXJM7BrlktvZ0xejA+qQFaatdnHR7Ww1w7wdldiTkzx9dNjaNfSk+0rQpj2Vqy34Rm5nvSdhlLfkylxuAI+US64M63h3jewHDx269dWW5RIhPuRDS3GfX4cGMUY1JCI9cICPnAq4rgIlLQWSKuDNtRToymMloZthduF18zk4HhqZowO4RUFzhaimyW60g9DUF4u2+AnAgDcsbwak/UGK8c+4qQb1Sc08dbelZje3LLF2C6nTTk3L8yF1JCfp/dp9pCLAI0/LcBHeo6hBXZHH33z07kt41xm8UegyWA/vwzfK1LK3FFVzCYkahZZK7MlJ1rS/wN0FeClPPjzry04LE9sapV5Ho9G76HbWvb50MTqy/rS1MVtyO1vNMG9HJfbkJK2txaPD1q6hJ6/eDG1jgqa9IFZb8I1cKrtL55S53AAeKZdcGdbxnr/M+0d6dzpaLZcIsVaGnvtz4bv0QWcKVZGI9Kg1lSjQVaCkpUBSBby5lgJdeawk9G7a8QwJHka3e6dSOfc99+SVW5SyPY9qSqryRvu/+wH4wCrO5rR0u1HepObA8HGT+oc87orpeepHIfGKI4ifUflepx03ZrrlkUDv5w45ySD44nP4YBK2MlyE9ygIYLvHMTHhW9DK9F1n8EahftK7RMMFRi17S1E1OgY+SNPD9XRj4B1RiT05Sf99uv0F7i7A96ipWdBunA3CxKeRRCr7JbEFt7OnL0ZHVOP60tbGLJ7K3clhsA2L1TPM21GJPTnJ00eHrV1DTwZe6KNNB4bUWvDZhsrGo4e7fE6Zc4Hezx3KJVeGdbxXhIPl9p5hOY0QPVvbbH6nTm58yNMTQxpVkYwxc4CPnAq4rgIlLQWSKuDNtRToymMloTcd2isYomNAu6MllXPNQdbfdwNPXrlFKdvzqKakKm9UBOyNWJu/qeANPnM2cOuJ5018XtAQPG7iI5FDNZhPvPvT81QXHF4VWsyycflep52aludD6kBW0vsVPyX1zTI17YhBvEcaJNEWKDFk5imdvusM3hjuI0d1CLOqmr2FqBobAw+L6eF6sjHw0FKJPVnJmvYXuDuPbTCSs+BNEIAaJn4dPN4ZBLPCgtvZwOsLF6Mj609b29gsuJ2tZ5i3oxJ7spInjw5bu4aejN5p2sOadvFaC778ePRx7TPKXHYAD5RLrgzreM8FlqFHeuNgy3KNkOB8JK7Pga4pl6HKJyhzgI+cCriuAiUtBZIq4M21FOjKYyWhPx3agbxPl1e3th4KX8vQrcEf49eJ+JogZXse1ZRUlXWjuSh9O54flg8GbxDr0XlBgw9EPFsOoirMJzXz1Mvrl/Bijt42ltzRJ6jTTk3L8yF1ICsZNPYxmNHufeILynAJRTloJ1h/VWKLrbps+q4zeKMI0rlDvBipZm8hqsbGoGa4nmwMssF+ICtZ0/4CdxfgNx2WbjGCMHmvAom49I+E+Pyc9eWBrGTgymWLUYfVp60tluMJ2p0cBtuwWD3DvB2V2JOVPHl0WEiEngxvnehiTZveags+y30bjz5Vy1x2AA+US64M63ivBg88PNu7/G6u1Ajx8px6GuSHN5m4kWIQ1ZGMdHOAj5wKuK4CJS0FkirgzbUU6MpjqdufDu/9+Ne3oZ7T4c0ZJvbRlkMqETRWimqa7kafFJLBq2KZd9FZ3jSEM3PQh1RdG0BVmE9q5mnwvofoad/gAoP2apg67dS0PB9SB7KSLrDZvLOYuvHFdIOW4SJUSZSDvrMJN0D+rIJO33UGbxR+5atLvBipZm8hqsasrRmuJxsDj2WV2JOVrGl/gbsLCHaW4eB7KEWSdkIcnnL6zVM6f5f48kBW0gWWLkZHVp+2p9zO1jPM21GJPVlJF1g4OmztGnqyIbi//4g1HSy2UsVFxTILvrHb2aplzsdHBA6US64M63j/SNHcv6f/kRBblluEeGJt7kwoHpVEqRpGdSQj3RzgI6cCrqtASUuBpAp4cy0FuvJYSZDp0J9z+N0XiAr55ksw+QZzry2UVSCRuyWophlujII36lgUvIP1yvJmiy1Irq5u/P6X+PaqYVSF+yQydWKeBsvfyBt2yJE4aU5SqZ2KlheE1J68ZPRexncy9m+C8GiI+p9FlUQ56Dug6AArWBZobFcavFHE66kdicVINXsLUTUXkagFwb4nL1nR/hJ35wmmtyhIov4E7vYYjU4YolW6RVzel3vykicvRh3cJUfWkLa2ClpwO1vPMG9HJfbkJU8dHbZ2DT3ZECXnAW86Ki7BLBgms6VyF9tPDUoneuL9jXuiZS4/gHvKJVeGdby/nY3X23kx83h4tubvv/ZXefkhQxGqJBnp5gAfORVwXQVKWgokVcCbaynQlcdKghS8W59F/JWNXqIebX65tVQORlYlNi9UohjVNMONdmtPU1S0WFxdvQxKSmKebbG82eFzjjs4cUP3MKrDfVIzT/0kJCjfgQvsmn2GOu3UtDwfUnvykpF1m4dugb33G9FbrAyXoEqiHLSlWxSOUdRaaEfmjR+8UURN7knc8lDP3jJUzWUkaj7Y9+Qla9pf4O4Cgr3lg736MFp2Rt72Zeyd9enWv+MRRVzel3vyklGkLFqMOoRtt6whba2xBbez1tZkw7wdldiTlwxHaMHosLVr6MktYddavOnFFny2BrbEF2qWufwA7imXXBnW8f4+1dOmpT8MNtV5hPiuqGms/+W6b2F99jAqQJUkI90c4COnAq6rQElLgaQKeHMtBbryWEnQguep7Rlr47/ZfNS7X/xwP4gSqw+dp7hGXo1UTXPcGAbvq36H3vsKJNz6dwn8tkWONL8H89KktFAdgU9CU6flaXTVZ/Ou12SkycMrQ6V2KlpeEFItecngZRMNHz+1Br58bTcmHvAEK6AkB73b3la0mrLqUmvwxjD0VhlPiC317C1D1QT9qhiupxoD96JK7CmQrGh/ibvzRCvPO9nx/0yEnq1qg1uXP0un7kMPeMQV+LIlL3nyYtRh7Wlra+UFt7P+61TDXJNK7MlLnjo6bO0aenJHnCxbgqZD6QoLvtHb2bgn08pcfgD3lEuuDOt4fzubfHi2f2+DLcs9QqJi3zxifbyG//QrbMwOGYpQLclINwf4yKmA6ypQ0lIgqQLeXEuBrjxWEqzgWQp6Dr4P1kOf+yESPNQeLIe8An/c3ZD8/cPnkbe2qaI5boyD9+7D8fD9zYewUifeBrLH8mbP3YvjFuI+cF1qrsygSgKfxKZOy9PwKPbuw+EW8/isNrgYmCFUM7qdipYXhFRLgaSfJ7XcPT4+BonXwctwASU5GCwtHySW4rvK/MHwcGxGD94orOYd8O7tqGhvEarmMhK1INhbCiRr2q8igbsLCFeerzoXaG/CZWeDzajBQ3mbz91F7O2nROrb/F3gy5YCyVMXoy4rT9tTbmfrGebtqMSeAskTR4cFROjJHcGN13uCpuPiMn/BZ2tpS3wl7smkMlcwgC3lkivDOi7jYf7f0X901pflQYSEM2KTho/XDe8S0a5ZWoiqSUa6OcBHTgVcV4GSlgJJFfDmWgp05bGSYNOhFwJ/LUV0s8Pm1XH6/RPVVr9nIlwR/H583P7zgwoPo2pmuTG4tLzly7tt8L6KzGscZQ8H97G8OXL39uXT/dX7p5/hGeD4G/22qJLIJxXzNPXEyudX19fXHxLzmwdXlkrt1LO8JKR2lEgmF8FZgjKcpygHg3nhS/fpoptE2PqD95UGbwyJJUJ0or2nnr1FqJrLSNSSYN9RIlnRfpWJ3J3H38+z5e/Xp29XV7dPX6NHC1tsVevvF294ve9XcjMbzN8lvtxRInniYtRl5Wl7yu1sPcO8HZXYUyJ52uiwtWvoyZZUuYibXmjBZ8NmiW+k+j2+zJUM4I5yyZVhHZftbGLBnZMKIiTz8acU0RPYBaiaZKSbA3zkVMB1FShpKZBUAW+upUBXHisJNh26SPCgRrQG3mw+f/j69PTj+nV4E4pV1vCRoQ5+MXcI/etZbgxe8FxCsGHvYXlTTPrzY0OolsgnNfM0scAbJPEY1CB12qlneUlI7SiR9POkUoIynKcoB4ObITv3yN+k5uBoiVdn8EYRV6vwfpGWivaWoGouI1FLgn1HiWRF+1UmcncBtlgtxle1ib3v4+P19X+PQ5bb/F3iyx0lkicuRj3WnbYn3c5WM8zbUYk9JZKnjQ5bmIaebAmfqNgSNb3Qgs8qhCe+Uq/MlQzgjnLJlWEdl42q5egOGQVblkcR8pQ4Ah5k0kWoMROUOcBHTgVcV4GSlgJJFfDmWgp05bGSYNNhdHZvr7gYX8fCg6xkGW7oPzCQQ/96nhsnBW/0Msoeljel+HtBilA1oU8mmZrIU4uuLNGX6vLUaaea5UUhtaVIsjRMrPtRGc5SlIPf9IcdXx7/u75+PTAB30ljDXUGbwzhzSSDO7Sa9hagai4jUYuCfUuRZD37VSh0d5734f2HJfiqNhWiWWz+LvLlliLJ0xajHimfrCNtbalsW8ct7uQw2DJi1QzzdlRiT5HkSaPDilboyT3+NuiWsOlJxSW74JuwnZ3Wk6jMFQ3glnLJlWEdl+1s4uFZeS24BXEYIROOgN+qjlJUUTLSzQE+cirgugqUtBRIqoA311KgK4+VBJsOg+ENbswfXARHhHNQ8uGLhuhd9Gn0r2e6cULw2nMqhju2kDC/8qia2CcTTE3laeLlEGnuxp1Z7KnUTi3Ly0KqoUzSkjTkl02Wk8KkLAetrUICv1cavBEkZrU4HXZUtLcA1RL3rFa4nmoMyoK9oUyymv0qFbs7z2DqdNH481VtcIYco3sXm7/LfNlQJnnSYtRj3Wl70u1sNcO8HRE4UCZ5yuiwtkJPHkjdCR03PaG45Bd8ZrYnvjOhJ2GZKxvAhnLJlWEd12eZbQAa5NFZX5bHEWJiOSacALeopmSkmwN85FTAdRUoaSmQVAFvrqVAVx4rCTYdhvdp+F0VpmiYOPXjR4Za4qBKoX89143h7T1DFATv6IRo8Zu9y1A9CZ+M7lba1G+JFUiK6FSxhErtVLK8MKSKJeNPcghvvVaPy5iWshwcfzvGjugxt0qDN4L40Sid+7rUtDeParmMRC0L9oZCyVr2q1jC3XkKJ8FHfbtfsKotnG9+60ujbP4u9GWx5EmLUZ9Vp+1pt7O1DPN2ROBAmeQpo8OyLfTkgZtEiUs0XZiARxLFpYuZHSS+U6nMlQ1gQ7nkyrCOa20IXZkVSkSIxd8wj/qxl3JUVTLSzQE+cirgugqUtBRIqoA311KgK48NiU2H4V0+nY937CmpYwfsOz4tqcdjGopS/4D+9Ww3WpAPUxK8pvLjkP0HPheoDlFFKZ9YUAwzZGryFp+QKPjKqNROHctLQ6pYMvFRji7vbn2yTJThDENtHXMw+MxmCaHnKw1eOfFicPAjCzXtzaJaLiNRC4N9hGQl+1Uu5e4sZRe5P95r4Y+mtsTTs30+3+suykam1JfFkictRj1WnbY6EMtuZ2sZ5u2IwIFCyRNGh2V/6MkjiQ1qqmlN0gyp4tLFzI4S3zFDh0n0pHAAR0muDOu47lQtSRt0EGzgUxEy9DVj43V4xlCG6kpGujnAR04FXFeBkpYCSRXw5loKdOWxTNF6t8VLlD8mUHQu16Lf0DswFCC/VHgQ/ev5bkx9NDCkKHgtbx4LJoPNx5QlWVRT0idDw2AMm/pjxANlYewVUqmdKpYXh1SxZPgRwS7N+ZBNlqkyPMyQC445GH2cy3mtL5aK13iVBq+cKM3Sb5RpqGpvDlFyIYlaGuwjJOvYr4JJd2cpqd+fb6zw64KqoeR6+cONLdBsaIp9WSx5ymLUJ/LuWtJWByKhw50cBltWrJJh3o4IHCiVPF102No19OSR2yh8Bpquv+Azs6PED6hS5koHcIzkyrCO63Y2fF5Bn2LU6pyOkKfyOXPK7UwHVFky0s0BPnIq4LoKlLQUSKqAN9dSoCuPlQSbDhv0jqbw2any/Wx6Qxbc13xg3C22+tcV3Pi9dvBa3jxe3VvFU1IXtgtQVUmf1MzT+AN4EWHoFVOpnRqWl4dUseT74bh41wSFiSTL8CCFOfgmmhmET/7gT/QGuGqDV4zfbxKd0PWoam8GVXIZiVoc7CMkq9ivkml3Z8nX74dvXvjDVW3iYlKHu+++i7KxKfdlseQJi1GfNaetDoTtHHe4k8Ngy4vVMczb6f9+pFjyZNFha1d1kRJ/6inddPUFn5kdJn5AjTJXPIAjJFeGdVy3sz4C/uisVeeBCEl/SrzPg97kPw5Vl4x0c4CPnAq4rgIlLQWSKuDNtRToymMlwabDLXrIF24ubwtvgHk1sCEbOIfy908NoX9dw43vKwev5c1j/lAgcSdJEaor6ZOqeXoTH4oa466+O5XaqWB5eUiVS169SC9f7l5sJaxUp8vwIIU56GdcwsOP4EncXVeNSoNXSnRK6wd0faraO4wquYxELQ/2cskq9qvsgLuz5Or3l2Y/oYU/XtXmptO/zQcGdBdl83e5L8slT1iMeqw5bXUglt7O1jHM2+n/fqRc8lTRYWtXc5Fif9Ew0HTtBZ+ZHSd+QIUyVz6A5ZIrwzpu21mtvEUyAxFy9aPkEPhVrkhlUH3JSDcH+MipgOsqUNJSIKkC3lxLga48luA2HW4JnlqJ8uap5Nmh8J3GewZWA19UdhD96zpurBu8ljdNZg0fCrzVo6QxqLKkTxrqmXo/aFHLdm02j1rtzLa8PKTKJa+uvqeS62974m6T5VAZHqA0B18OHxn/3XpIO5U6lKo1eIX4m9htVjOq2juI6LiQRC0P9nLJKvar8KC7c9zalNrl9fY0Ugt/YlX7Kb0taObR7VSguyibv8t9WS55wmLUZ8VpqwOx+Ha2imHeTv/3I+WSp4oOSzR3kRDeoT3Y9Pzi0sXMTiR+xOyelA9gueTKsI5bdbAsDcZAq/NwhNxeR0HV5XHyjLlHNSYj3RzgI6cCrqtASUuBpAp4cy0FuvJYSbDpcIfPI+Hr024HDuZ2vBtIuIaBtbSKDqJ/XMmNVYPX8maXfT+STXwOvo49AlWX9MmWiqa+SQ/qjrvrKJpGU6mduZaXh1S55LZb0Yz25WCSTZaDZXiA0hy8GXhdzUN705PdMpkM4UqDV4afzw2+UWZHXXsHUB2XkajlwV4u2TDbfhUfdneW9KHulzYYtPDbiqrle9qw/amCrs9s/i73ZbnkKYtRjxWnrQ7E8tvZGoZ5O72fO5RLnio6bO0auEiwe6+zTc8uLl3M7FTiR8ztSfkAlkuuDOu4bWeD+zv00VmrzpkIubr9OXRb08fRlcRRnclINwf4yKmA6ypQ0lIgqQLeXEuBrjxWEmw63BF8By++SX/4/oy/+bG9vfamdqQcEaJ/nPzrsW68/ZlcrYwNXsubNvvu/fCg4W53Hj8dVZj0SUvFPH0amHk3D78yHSmnUjvzLC8PqXLJHU+vJTnedZZzNlkWLPViSnPw9r+E3N1/+3vizcLgKYU9lQavCG1q+I0yLZXtTaI6LiNRzTXJYC+X3DHTfv2DnLtzpA51d5dmg8KfXNXe+1M+Wx4OU4Huomz+LvdlueSOExWjHhqd60lbHYgTbGcrGGY/J8e8XHLH8tFha9fIRYI1nN2s1FzwWevJxA+ZV+bKB7BccmVYx20760Ngj85adc5GyNXV9w/R8c1m8/eDbZanoGqTkW4O8JFTAddVoKSlQFIFvLmWAl15rCTYdNjiD9Q9vFeZHe9/voqL7MOvwdOjA++je94+/8pkq6B/X9ON33/F52Rjg9fy5pB9330Z8+VX5rp2HlWZ9MmRenn68nXstM3vn1ZQ5lCrnRmWl4dUueSe25/Xbx+38+vvx18vegNolTrb0TSlOXj/IvD2l1+d0qAL0E2ibGypNXh59Jw+80aZPZXtTaAqLiNRy4O9XPLAHPv1bwrcneGbzxBf/jtq1cI/sKq9+c80bd51BkJ3UTZ/l/uyXHLPiYpRh/WmrQ7EKbaz8w3zdrq/dimX3LN0dNjaNXZRj+B94fnNSrUFn5k9kPgxM8pc+QCWS8KBb9eP/SC5e/W1ICDhDHip+f/weB09bJvg5lP/Gu/HF+PfNLgs3z889gvjlODVVU33MOn+a3ce+vIrW60Wo16efpNh3Wx+f/g5e5Pu1GqnnuUnwSbLstOjBKU5ePvnV+/0+u+HWK6UWoO3FLXtrUe9cF37GMTUs78GT70p8K0dBJXzpzcYn6+fz6YR1C1G81lv2s7kLA1bW3TkqbLgq8K6yhx0uH/6dL3lz9PTvKNfWBv3T09/doP79Wl8ut0+vdz+7c+np7HnpKfi/dPOvMnBO7SdbTYUT7sGnia4rzL18vTb09PXgyr9sSK12qln+eLYGmFu2BTn4PvWSS+enqpsemoN3lLUtrce9cJ17WMQU8/+Ctw8/Wi68vJpxtvod9zvpoI/mTxcEdWLUQXWm7YzOTvD1hgdeWYv+KqxqjIHAJDZzgKMwW4rm72KBgCYAMUI0hAdAAAXBNtZqIg9VaMCAACngGIEaYgOAIALgu0sZHi6Lr+bSN9y8VcFAACmQjGCNEQHAMA/CttZyLALkd+PH65f5p6be6/RNPpbEwAAKShGkIboAAD4R2E7Cxn6IfL38fX1z9QRuH7DYvOfSgAATIViBGmIDgCAM+Rn+5K7AxNej38m29kapp4nz2/5Cw2R9Df67BPrUz5ND2fM84fr8/Kv2780FKP1cqOx/0klloboAAA4Q+xV8wVf41bOZDtbw9Tz5Pkt/6M9SB5lv1Sx8/j4AdTj+cP1efnX7V8aitF6eVKHf1aJpSE6AADOkBpLJ7azK+f5LbdVSuq9Gff9T6s/x3oGnpnnD9fn5V+3f2koRuvFxubkHrceEB0AAOunxtKJ7ezKeX7L7aUZDcGZ9zf79MHml8rAhfP84fq8/Ov2Lw3FaL3YZvLkW0SiAwDgDKmxdGI7u3JWYPlf7ULDC3nFxu2nBxXZbHhw8F9jBeH6rPzr9i8OxWi1PP92lugAADhDaiyd2M6unBVYbjGy5eG/46cQvv15bXdvbTabdz018A+wgnB9Vv51+xeHYrRaVrCdJToAAM6PGksnq/9sZ9fFCiz/pl048tgQHok3vFRNcOmsIFyflX/d/sWhGK2WFWxniQ4AgPOjxtKJ7ezKWYPl9lGDMsKXcMBFs4ZwfU7+dfuXh2K0VlawnSU6AADOjxpLJ7azK2cNlr/RPpRx8s8OwrOzhnB9Tv51+5eHYrRW1rCdJToAAM6OGksntrMrZxWW/6edKOGVaoHLZxXh+oz86/afAIrRSlnDdpboAAA4O2osndjOrpxVWH6bfOYozd971QKXzyrC9Rn51+0/ARSjlbKK7SzRAQBwbtRYOrGdXTnrsPzGP9SX4eGb6oB/gHWE6/Pxr9t/CihG62QV21miAwDg3KixdGI7u3JWYvnYRcLdD9UA/wIrCddn41+3/yRQjFbJOrazRAcAwJlRY+nEdnblrMXycYuEjxx4/5usJVyfi3/d/tNAMVojK9nOEh0AAOdFjaUT29mVsxrLb/+7064k+XWrfw3/BqsJ12fiX7f/RFCMVshatrNEBwDAWVFj6cR2duWsyPJv77QvMX+5e+ufZUXh+iz86/afDIrR6ljNdpboAAA4J2osndjOrpxVWf7jdfbY++71d/0r+HdYVbg+A/+6/SeEYrQyVrSdJToAAM6Hn9fCG5XI8/NR+KASq6CGqefJyiy//fN2aJnw+OK9/gX8S6wsXE/Ov27/SaEYrYobjf1PKnFSiA4AAABI8fTn+tVvXR1sPr7+ytIdAE4JxQjSEB0AAAAwwLenp6enr9cvmv9w0A0AzwbFCNIQHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBh/A9GRW8PDzKObAAAAABJRU5ErkJggg=="},"a2ce080e-7b39-44c7-92af-20fbc13e0e5f.png":{"image/png":"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"}}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nfrom pathlib import Path\nfrom tqdm.auto import tqdm\n\nimport torch\nimport torch.nn as nn\nfrom torch.utils.data import Dataset, DataLoader\n\n# ---- sanity checks\nneed_vars = [\"item_meta\", \"transactions\", \"sampled_tx\", \"popular_items\", \"popular_12\", \"ARTIFACT_DIR\", \"RANDOM_STATE\", \"device\"]\nfor v in need_vars:\n    if v not in globals():\n        raise NameError(f\"Missing required variable: {v}\")\n\n# =========================\n# 1) Train/Load FastText\n# =========================\nfrom gensim.models import FastText\n\nFT_DIM = 64\nFT_EPOCHS = 10\nft_path = Path(ARTIFACT_DIR) / f\"fasttext_dim{FT_DIM}.model\"\n\nft_df = item_meta[[\"article_id\",\"detail_desc\"]].copy()\nft_df[\"detail_desc\"] = ft_df[\"detail_desc\"].fillna(\"\").astype(str).str.lower()\n\nsentences = [s.split() for s in ft_df[\"detail_desc\"].values if s.strip()]\nprint(\"FastText sentences:\", len(sentences))\n\nif ft_path.exists():\n    ft_model = FastText.load(str(ft_path))\n    print(\"Loaded:\", ft_path)\nelse:\n    ft_model = FastText(\n        vector_size=FT_DIM,\n        window=5,\n        min_count=2,\n        workers=4,\n        sg=1,\n        seed=RANDOM_STATE\n    )\n    ft_model.build_vocab(corpus_iterable=sentences)\n    ft_model.train(corpus_iterable=sentences, total_examples=len(sentences), epochs=FT_EPOCHS)\n    ft_model.save(str(ft_path))\n    print(\"Saved:\", ft_path)\n\ndef ft_vec(text: str) -> np.ndarray:\n    toks = str(text).lower().split()\n    vecs = [ft_model.wv[w] for w in toks if w in ft_model.wv]\n    if not vecs:\n        return np.zeros(FT_DIM, dtype=np.float32)\n    return np.mean(vecs, axis=0).astype(np.float32)\n\n# =========================\n# 2) Item universe + (text vec, price)\n# =========================\nprice_df = transactions.groupby(\"article_id\")[\"price\"].mean()\nitem_price_map = price_df.to_dict()\n\nNN_MAX_ITEMS = 60000\nif \"item_pop_series\" in globals():\n    nn_item_ids = item_pop_series.index.astype(int).tolist()[:NN_MAX_ITEMS]\nelse:\n    nn_item_ids = item_meta[\"article_id\"].astype(int).tolist()[:NN_MAX_ITEMS]\n\nnn_item_ids = np.array(sorted(set(map(int, nn_item_ids))), dtype=np.int32)\naid2i = {int(a): i for i, a in enumerate(nn_item_ids)}\ni2aid = {i: int(a) for i, a in enumerate(nn_item_ids)}\n\ntmp_meta = item_meta[item_meta[\"article_id\"].astype(int).isin(nn_item_ids)][[\"article_id\",\"detail_desc\"]].copy()\ntmp_meta[\"detail_desc\"] = tmp_meta[\"detail_desc\"].fillna(\"\").astype(str)\n\nitem_text_mat = np.zeros((len(nn_item_ids), FT_DIM), dtype=np.float32)\nitem_price_vec = np.zeros((len(nn_item_ids), 1), dtype=np.float32)\n\n# (nhanh hơn iterrows: dùng values)\naids = tmp_meta[\"article_id\"].astype(int).values\ndescs = tmp_meta[\"detail_desc\"].values\n\nfor a, desc in tqdm(zip(aids, descs), total=len(aids), desc=\"item ft vec\"):\n    idx = aid2i.get(int(a))\n    if idx is None:\n        continue\n    item_text_mat[idx] = ft_vec(desc)\n    item_price_vec[idx, 0] = float(item_price_map.get(int(a), 0.0))\n\n# normalize text vectors\nnorm = np.linalg.norm(item_text_mat, axis=1, keepdims=True) + 1e-9\nitem_text_mat = item_text_mat / norm\n\n# =========================\n# 3) Build training pairs (pos + neg)\n# =========================\npos_df = sampled_tx[[\"customer_id\",\"article_id\"]].drop_duplicates().copy()\npos_df[\"customer_id\"] = pos_df[\"customer_id\"].astype(str)\npos_df[\"article_id\"]  = pos_df[\"article_id\"].astype(int)\npos_df = pos_df[pos_df[\"article_id\"].isin(aid2i)]\nprint(\"NN positives:\", len(pos_df))\n\nnn_user_ids = pos_df[\"customer_id\"].unique()\nuid2u = {u:i for i, u in enumerate(nn_user_ids)}\n\nuser_bought = pos_df.groupby(\"customer_id\")[\"article_id\"].apply(set).to_dict()\npopular_pool = [int(a) for a in popular_items[:5000] if int(a) in aid2i]\nif len(popular_pool) == 0:\n    raise RuntimeError(\"popular_pool is empty (no overlap with aid2i). Reduce filters or increase NN_MAX_ITEMS.\")\n\nNEG_PER_POS = 2\nrng = np.random.default_rng(RANDOM_STATE)\n\npairs_u, pairs_i, labels = [], [], []\n\nfor cid, grp in tqdm(pos_df.groupby(\"customer_id\"), desc=\"build pairs\"):\n    u = uid2u[cid]\n    bought = user_bought.get(cid, set())\n    pos_items = grp[\"article_id\"].tolist()\n\n    for a in pos_items:\n        a = int(a)\n        pairs_u.append(u)\n        pairs_i.append(aid2i[a])\n        labels.append(1.0)\n\n        # negatives\n        for _ in range(NEG_PER_POS):\n            for _try in range(20):\n                neg_a = int(rng.choice(popular_pool))\n                if neg_a not in bought:\n                    pairs_u.append(u)\n                    pairs_i.append(aid2i[neg_a])\n                    labels.append(0.0)\n                    break\n\npairs_u = np.array(pairs_u, dtype=np.int64)\npairs_i = np.array(pairs_i, dtype=np.int64)\nlabels  = np.array(labels, dtype=np.float32)\n\nprint(\"Train pairs:\", len(labels), \"pos:\", int(labels.sum()), \"neg:\", int((labels==0).sum()))\n\n# =========================\n# 4) Dataset / Model\n# =========================\nclass PairDS(Dataset):\n    def __init__(self, u_idx, i_idx, y, text_mat, price_vec):\n        self.u = torch.from_numpy(u_idx).long()\n        self.i = torch.from_numpy(i_idx).long()\n        self.y = torch.from_numpy(y).float()\n        self.text_mat = torch.from_numpy(text_mat).float()   # [n_items, FT_DIM]\n        self.price_vec = torch.from_numpy(price_vec).float() # [n_items, 1]\n\n    def __len__(self): \n        return len(self.y)\n\n    def __getitem__(self, k):\n        i = int(self.i[k])\n        return (\n            self.u[k],\n            self.i[k],\n            self.text_mat[i],\n            self.price_vec[i],\n            self.y[k],\n        )\n\nclass FastTextNN(nn.Module):\n    def __init__(self, n_users, n_items, ft_dim, emb_dim=64, hidden=256, drop=0.2):\n        super().__init__()\n        self.user_emb = nn.Embedding(n_users, emb_dim)\n        self.item_emb = nn.Embedding(n_items, emb_dim)\n        self.mlp = nn.Sequential(\n            nn.Linear(emb_dim + emb_dim + ft_dim + 1, hidden),\n            nn.ReLU(),\n            nn.Dropout(drop),\n            nn.Linear(hidden, 1)\n        )\n\n    def forward(self, u, i, ft_vec, price):\n        ue = self.user_emb(u)\n        ie = self.item_emb(i)\n        x = torch.cat([ue, ie, ft_vec, price], dim=1)\n        return self.mlp(x).squeeze(1)\n\nds = PairDS(pairs_u, pairs_i, labels, item_text_mat, item_price_vec)\ndl = DataLoader(\n    ds,\n    batch_size=4096,\n    shuffle=True,\n    num_workers=2,\n    pin_memory=(device.type == \"cuda\")\n)\n\nmodel_ftnn = FastTextNN(n_users=len(nn_user_ids), n_items=len(nn_item_ids), ft_dim=FT_DIM).to(device)\nopt = torch.optim.Adam(model_ftnn.parameters(), lr=1e-3)\ncrit = nn.BCEWithLogitsLoss()\n\nuse_amp = (device.type == \"cuda\")\nscaler = torch.cuda.amp.GradScaler(enabled=use_amp)\n\nEPOCHS_NN = 10\nmodel_ftnn.train()\nfor ep in range(EPOCHS_NN):\n    tot = 0.0\n    for u, i, ftv, p, y in tqdm(dl, desc=f\"FTNN epoch {ep+1}/{EPOCHS_NN}\"):\n        # ---- FIX: gán biến đúng (không dùng u=i_u=...)\n        u = u.to(device, non_blocking=True)\n        i = i.to(device, non_blocking=True)\n        ftv = ftv.to(device, non_blocking=True)\n        p = p.to(device, non_blocking=True)\n        y = y.to(device, non_blocking=True)\n\n        opt.zero_grad(set_to_none=True)\n        with torch.cuda.amp.autocast(enabled=use_amp):\n            logit = model_ftnn(u, i, ftv, p)\n            loss = crit(logit, y)\n\n        scaler.scale(loss).backward()\n        scaler.step(opt)\n        scaler.update()\n\n        tot += float(loss.item()) * len(y)\n\n    print(\"epoch\", ep+1, \"loss\", tot / len(ds))\n","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.612Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pathlib import Path\nimport numpy as np\nimport torch\n\n# ---- require\nneed_vars = [\"sample_customer_ids\", \"true_items_dict\", \"popular_12\", \"popular_items\", \"aid2i\", \"item_text_mat\", \"item_price_vec\", \"model_ftnn\", \"uid2u\"]\nfor v in need_vars:\n    if v not in globals():\n        raise NameError(f\"Missing required variable: {v}\")\n\n# ---- nếu thiếu train_hist/train_bought_set thì build nhanh từ train_df (nếu có)\nif \"train_hist\" not in globals() or \"train_bought_set\" not in globals():\n    if \"train_df\" not in globals():\n        raise NameError(\"Missing train_hist/train_bought_set and train_df not found to rebuild.\")\n    _td = train_df.copy()\n    _td[\"customer_id\"] = _td[\"customer_id\"].astype(str)\n    _td[\"article_id\"] = _td[\"article_id\"].astype(int)\n    _td = _td.sort_values([\"customer_id\", \"t_dat\"])\n    train_hist = _td.groupby(\"customer_id\")[\"article_id\"].apply(list).to_dict()\n    train_bought_set = _td.groupby(\"customer_id\")[\"article_id\"].apply(lambda s: set(map(int, s.values))).to_dict()\n    print(\"[INFO] rebuilt train_hist/train_bought_set from train_df\")\n\n@torch.no_grad()\ndef ftnn_score_user_on_candidates(cid, cand_aids, batch=4096):\n    cid = str(cid)\n    if cid not in uid2u:\n        return None, None\n\n    u = uid2u[cid]\n    # map aids -> indices\n    ii = [aid2i[int(a)] for a in cand_aids if int(a) in aid2i]\n    if len(ii) == 0:\n        return None, None\n\n    model_ftnn.eval()\n    scores = []\n\n    # batch scoring (nhanh + đỡ OOM)\n    for s in range(0, len(ii), batch):\n        jj = ii[s:s+batch]\n        u_t = torch.full((len(jj),), u, dtype=torch.long, device=device)\n        i_t = torch.tensor(jj, dtype=torch.long, device=device)\n        ftv = torch.from_numpy(item_text_mat[jj]).float().to(device)\n        pv  = torch.from_numpy(item_price_vec[jj]).float().to(device)\n\n        logit = model_ftnn(u_t, i_t, ftv, pv)\n        sc = torch.sigmoid(logit).detach().cpu().numpy()\n        scores.append(sc)\n\n    scores = np.concatenate(scores, axis=0)\n    return scores, ii\n\ndef build_candidates(cid, n_pop=200, n_cf=100, n_cb=100):\n    cid = str(cid)\n    cands = []\n    cands += popular_items[:n_pop]\n    if \"recommend_cf_svd\" in globals():\n        cands += recommend_cf_svd(cid)[:n_cf]\n    if \"recommend_content_based\" in globals():\n        cands += recommend_content_based(cid)[:n_cb]\n    return uniq_keep_order([int(x) for x in cands if int(x) in aid2i])\n\ndef recommend_ftnn(cid, topk=12):\n    cid = str(cid)\n    bought = train_bought_set.get(cid, set())\n\n    cands = [a for a in build_candidates(cid) if a not in bought]\n    if len(cands) == 0:\n        return popular_12\n\n    score, _ = ftnn_score_user_on_candidates(cid, cands)\n    if score is None:\n        return popular_12\n\n    order = np.argsort(-score)\n    recs = [int(cands[i]) for i in order[:topk]]\n    return recs if recs else popular_12\n\ndef rec_ftnn(cid):\n    return recommend_ftnn(str(cid), topk=12)\n\n# -------------------------\n# Submission (SAMPLE ONLY)\n# -------------------------\nOUT_FTNN = Path(\"/kaggle/working/submission_fasttext_nn_SAMPLE.csv\")\nWRITE_LIMIT = None  # None để submit thật; 1000 để test nhanh\n\nwrite_submission_stream(\n    sample_customer_ids,\n    rec_ftnn,\n    fallback_12=popular_12,\n    out_csv=OUT_FTNN,\n    max_customers=WRITE_LIMIT\n)\nprint(\"Saved:\", OUT_FTNN)\n\n# -------------------------\n# Full metrics @12\n# (cần có eval_metrics_at_12 từ phần trước bạn dùng cho Popularity)\n# -------------------------\nif \"eval_metrics_at_12\" not in globals():\n    raise NameError(\"eval_metrics_at_12 is not defined. Paste the metrics cell (MAP/Precision/Recall/F1/Acc/Hit) first.\")\n\nMAX_EVAL_USERS = 20000  # None = full sample\nmetrics_ftnn = eval_metrics_at_12(sample_customer_ids, true_items_dict, rec_ftnn, max_users=MAX_EVAL_USERS)\n\nprint(\"\\nFastTextNN metrics (internal, sample customers):\")\nfor k, v in metrics_ftnn.items():\n    print(f\"  {k}: {v}\")","metadata":{"trusted":true,"execution":{"execution_failed":"2026-01-09T16:40:41.612Z"}},"outputs":[],"execution_count":null}]}