{
"cells": [
{
"cell_type": "markdown",
"id": "59575691",
"metadata": {
"papermill": {
"duration": 0.005265,
"end_time": "2026-02-23T16:19:24.375547",
"exception": false,
"start_time": "2026-02-23T16:19:24.370282",
"status": "completed"
},
"tags": []
},
"source": [
"*Copyright (c) Recommenders contributors.*\n",
"\n",
"*Licensed under the MIT License.*"
]
},
{
"cell_type": "markdown",
"id": "d5080332",
"metadata": {
"papermill": {
"duration": 0.004365,
"end_time": "2026-02-23T16:19:24.390789",
"exception": false,
"start_time": "2026-02-23T16:19:24.386424",
"status": "completed"
},
"tags": []
},
"source": [
"# Wide and Deep Model for Movie Recommendation (PyTorch)\n",
"\n",
"
\n",
"\n",
"A linear model with a wide set of crossed-column (co-occurrence) features can memorize the feature interactions, while deep neural networks (DNN) can generalize the feature patterns through low-dimensional dense embeddings learned for the sparse features. [**Wide and Deep**](https://arxiv.org/abs/1606.07792) learning jointly trains wide linear model and deep neural networks to combine the benefits of memorization and generalization for recommender systems.\n",
"\n",
"
\n",
"\n",
"\n",
"This notebook shows how to build and test the wide-and-deep model using PyTorch. With the [movie recommendation dataset](https://grouplens.org/datasets/movielens/), we quickly demonstrate following topics:\n",
"1. How to prepare data\n",
"2. Build the model\n",
"3. Train with periodic evaluation\n",
"4. Test the model and export"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "fcd4566f",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:19:24.404430Z",
"iopub.status.busy": "2026-02-23T16:19:24.403470Z",
"iopub.status.idle": "2026-02-23T16:19:25.280144Z",
"shell.execute_reply": "2026-02-23T16:19:25.275812Z"
},
"papermill": {
"duration": 0.887069,
"end_time": "2026-02-23T16:19:25.282881",
"exception": false,
"start_time": "2026-02-23T16:19:24.395812",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"%reload_ext autoreload\n",
"%autoreload 2\n",
"%matplotlib inline\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "1a461361",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:19:25.301457Z",
"iopub.status.busy": "2026-02-23T16:19:25.300841Z",
"iopub.status.idle": "2026-02-23T16:19:33.307973Z",
"shell.execute_reply": "2026-02-23T16:19:33.304729Z"
},
"papermill": {
"duration": 8.021474,
"end_time": "2026-02-23T16:19:33.310204",
"exception": false,
"start_time": "2026-02-23T16:19:25.288730",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"System version: 3.11.14 (main, Jan 14 2026, 19:35:32) [Clang 21.1.4 ]\n",
"PyTorch version: 2.10.0+cu128\n",
"CUDA available: True\n",
"GPU: NVIDIA GeForce RTX 5090 Laptop GPU\n"
]
}
],
"source": [
"import os\n",
"import sys\n",
"import math\n",
"import logging\n",
"import sklearn\n",
"import pandas as pd\n",
"import torch\n",
"\n",
"from recommenders.utils.constants import (\n",
" DEFAULT_USER_COL as USER_COL,\n",
" DEFAULT_ITEM_COL as ITEM_COL,\n",
" DEFAULT_RATING_COL as RATING_COL,\n",
" DEFAULT_PREDICTION_COL as PREDICT_COL,\n",
" DEFAULT_GENRE_COL as ITEM_FEAT_COL,\n",
" SEED\n",
")\n",
"from recommenders.utils import plot\n",
"from recommenders.datasets import movielens\n",
"from recommenders.datasets.pandas_df_utils import user_item_pairs\n",
"from recommenders.datasets.python_splitters import python_random_split\n",
"from recommenders.evaluation.python_evaluation import (\n",
" rmse,\n",
" mae,\n",
" ndcg_at_k,\n",
" precision_at_k,\n",
")\n",
"from recommenders.models.wide_deep.wide_deep_utils import WideDeepModel\n",
"from recommenders.utils.notebook_utils import store_metadata\n",
"\n",
"logging.basicConfig(level=logging.INFO)\n",
"logger = logging.getLogger()\n",
"\n",
"print(f\"System version: {sys.version}\")\n",
"print(f\"PyTorch version: {torch.__version__}\")\n",
"print(f\"CUDA available: {torch.cuda.is_available()}\")\n",
"if torch.cuda.is_available():\n",
" print(f\"GPU: {torch.cuda.get_device_name(0)}\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "ca273c8d",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:19:33.329192Z",
"iopub.status.busy": "2026-02-23T16:19:33.328515Z",
"iopub.status.idle": "2026-02-23T16:19:33.397816Z",
"shell.execute_reply": "2026-02-23T16:19:33.394088Z"
},
"papermill": {
"duration": 0.084792,
"end_time": "2026-02-23T16:19:33.399688",
"exception": false,
"start_time": "2026-02-23T16:19:33.314896",
"status": "completed"
},
"tags": [
"parameters"
]
},
"outputs": [],
"source": [
"# Parameters\n",
"\n",
"# Recommend top k items\n",
"TOP_K = 10\n",
"# Select MovieLens data size: 100k, 1m, 10m, or 20m\n",
"MOVIELENS_DATA_SIZE = \"100k\"\n",
"# Use periodic evaluation during training\n",
"EVALUATE_WHILE_TRAINING = True\n",
"\n",
"# Train and test set pickle file paths. If provided, use them. Otherwise, download the MovieLens dataset.\n",
"DATA_DIR = None\n",
"TRAIN_PICKLE_PATH = None\n",
"TEST_PICKLE_PATH = None\n",
"EXPORT_DIR_BASE = os.path.join(\"outputs\", \"model\")\n",
"\n",
"#### Hyperparameters\n",
"MODEL_TYPE = \"wide_deep\"\n",
"N_EPOCHS = 20 # Number of training epochs\n",
"BATCH_SIZE = 32\n",
"# Wide (linear) model hyperparameters\n",
"LINEAR_OPTIMIZER = \"adagrad\"\n",
"LINEAR_OPTIMIZER_LR = 0.0621 # Learning rate\n",
"# DNN model hyperparameters\n",
"DNN_OPTIMIZER = \"adadelta\"\n",
"DNN_OPTIMIZER_LR = 0.1\n",
"# Layer dimensions. Set 0 to skip a layer.\n",
"DNN_HIDDEN_LAYER_1 = 0\n",
"DNN_HIDDEN_LAYER_2 = 64\n",
"DNN_HIDDEN_LAYER_3 = 128\n",
"DNN_HIDDEN_LAYER_4 = 512\n",
"DNN_HIDDEN_UNITS = [h for h in [DNN_HIDDEN_LAYER_1, DNN_HIDDEN_LAYER_2, DNN_HIDDEN_LAYER_3, DNN_HIDDEN_LAYER_4] if h > 0]\n",
"DNN_USER_DIM = 32 # User embedding feature dimension\n",
"DNN_ITEM_DIM = 16 # Item embedding feature dimension\n",
"DNN_DROPOUT = 0.8\n",
"DNN_BATCH_NORM = 1 # 1 to use batch normalization, 0 if not."
]
},
{
"cell_type": "markdown",
"id": "dfd73f40",
"metadata": {
"papermill": {
"duration": 0.003865,
"end_time": "2026-02-23T16:19:33.407941",
"exception": false,
"start_time": "2026-02-23T16:19:33.404076",
"status": "completed"
},
"tags": []
},
"source": [
"### 1. Prepare Data\n",
"\n",
"#### 1.1 Movie Rating and Genres Data\n",
"First, download [MovieLens](https://grouplens.org/datasets/movielens/) data. Movies in the data set are tagged as one or more genres where there are total 19 genres including '*unknown*'. We load *movie genres* to use them as item features."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "8565c30c",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:19:33.419328Z",
"iopub.status.busy": "2026-02-23T16:19:33.418848Z",
"iopub.status.idle": "2026-02-23T16:19:36.821615Z",
"shell.execute_reply": "2026-02-23T16:19:36.817787Z"
},
"papermill": {
"duration": 3.411694,
"end_time": "2026-02-23T16:19:36.824106",
"exception": false,
"start_time": "2026-02-23T16:19:33.412412",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:recommenders.datasets.download_utils:Downloading http://files.grouplens.org/datasets/movielens/ml-100k.zip\n",
"100%|██████████| 4.81k/4.81k [00:01<00:00, 3.56kKB/s]\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" userID | \n",
" itemID | \n",
" rating | \n",
" genre | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 196 | \n",
" 242 | \n",
" 3.0 | \n",
" Comedy | \n",
"
\n",
" \n",
" | 1 | \n",
" 186 | \n",
" 302 | \n",
" 3.0 | \n",
" Crime|Film-Noir|Mystery|Thriller | \n",
"
\n",
" \n",
" | 2 | \n",
" 22 | \n",
" 377 | \n",
" 1.0 | \n",
" Children's|Comedy | \n",
"
\n",
" \n",
" | 3 | \n",
" 244 | \n",
" 51 | \n",
" 2.0 | \n",
" Drama|Romance|War|Western | \n",
"
\n",
" \n",
" | 4 | \n",
" 166 | \n",
" 346 | \n",
" 1.0 | \n",
" Crime|Drama | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" userID itemID rating genre\n",
"0 196 242 3.0 Comedy\n",
"1 186 302 3.0 Crime|Film-Noir|Mystery|Thriller\n",
"2 22 377 1.0 Children's|Comedy\n",
"3 244 51 2.0 Drama|Romance|War|Western\n",
"4 166 346 1.0 Crime|Drama"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"use_preset = (TRAIN_PICKLE_PATH is not None and TEST_PICKLE_PATH is not None)\n",
"if not use_preset:\n",
" # The genres of each movie are returned as '|' separated string, e.g. \"Animation|Children's|Comedy\".\n",
" data = movielens.load_pandas_df(\n",
" size=MOVIELENS_DATA_SIZE,\n",
" header=[USER_COL, ITEM_COL, RATING_COL],\n",
" genres_col=ITEM_FEAT_COL\n",
" )\n",
" display(data.head())"
]
},
{
"cell_type": "markdown",
"id": "ada3bc38",
"metadata": {
"papermill": {
"duration": 0.010731,
"end_time": "2026-02-23T16:19:36.843908",
"exception": false,
"start_time": "2026-02-23T16:19:36.833177",
"status": "completed"
},
"tags": []
},
"source": [
"#### 1.2 Encode Item Features (Genres)\n",
"To use genres from our model, we multi-hot-encode them with scikit-learn's [MultiLabelBinarizer](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MultiLabelBinarizer.html).\n",
"\n",
"For example, *Movie id=2355* has three genres, *Animation|Children's|Comedy*, which are being converted into an integer array of the indicator value for each genre like `[0, 0, 1, 1, 1, 0, 0, 0, ...]`. In the later step, we convert this into a float array and feed into the model.\n",
"\n",
"> For faster feature encoding, you may load ratings and items separately (by using `movielens.load_item_df`), encode the item-features, then combine the rating and item dataframes by using join-operation."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "d42532de",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:19:36.857332Z",
"iopub.status.busy": "2026-02-23T16:19:36.856899Z",
"iopub.status.idle": "2026-02-23T16:19:37.511707Z",
"shell.execute_reply": "2026-02-23T16:19:37.508447Z"
},
"papermill": {
"duration": 0.664192,
"end_time": "2026-02-23T16:19:37.513374",
"exception": false,
"start_time": "2026-02-23T16:19:36.849182",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Genres: ['Action' 'Adventure' 'Animation' \"Children's\" 'Comedy' 'Crime'\n",
" 'Documentary' 'Drama' 'Fantasy' 'Film-Noir' 'Horror' 'Musical' 'Mystery'\n",
" 'Romance' 'Sci-Fi' 'Thriller' 'War' 'Western' 'unknown']\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" userID | \n",
" itemID | \n",
" rating | \n",
" genre | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 196 | \n",
" 242 | \n",
" 3.0 | \n",
" [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... | \n",
"
\n",
" \n",
" | 1 | \n",
" 186 | \n",
" 302 | \n",
" 3.0 | \n",
" [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, ... | \n",
"
\n",
" \n",
" | 2 | \n",
" 22 | \n",
" 377 | \n",
" 1.0 | \n",
" [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ... | \n",
"
\n",
" \n",
" | 3 | \n",
" 244 | \n",
" 51 | \n",
" 2.0 | \n",
" [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, ... | \n",
"
\n",
" \n",
" | 4 | \n",
" 166 | \n",
" 346 | \n",
" 1.0 | \n",
" [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, ... | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" userID itemID rating genre\n",
"0 196 242 3.0 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n",
"1 186 302 3.0 [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, ...\n",
"2 22 377 1.0 [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n",
"3 244 51 2.0 [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, ...\n",
"4 166 346 1.0 [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, ..."
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"if not use_preset and ITEM_FEAT_COL is not None:\n",
" # Encode 'genres' into int array (multi-hot representation) to use as item features\n",
" genres_encoder = sklearn.preprocessing.MultiLabelBinarizer()\n",
" data[ITEM_FEAT_COL] = genres_encoder.fit_transform(\n",
" data[ITEM_FEAT_COL].apply(lambda s: s.split(\"|\"))\n",
" ).tolist()\n",
" print(\"Genres:\", genres_encoder.classes_)\n",
" display(data.head())"
]
},
{
"cell_type": "markdown",
"id": "a904c5fa",
"metadata": {
"papermill": {
"duration": 0.010816,
"end_time": "2026-02-23T16:19:37.531910",
"exception": false,
"start_time": "2026-02-23T16:19:37.521094",
"status": "completed"
},
"tags": []
},
"source": [
"#### 1.3 Train and Test Split"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "3b138916",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:19:37.550742Z",
"iopub.status.busy": "2026-02-23T16:19:37.550173Z",
"iopub.status.idle": "2026-02-23T16:19:37.616227Z",
"shell.execute_reply": "2026-02-23T16:19:37.611924Z"
},
"papermill": {
"duration": 0.076423,
"end_time": "2026-02-23T16:19:37.618306",
"exception": false,
"start_time": "2026-02-23T16:19:37.541883",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"75000 train samples and 25000 test samples\n"
]
}
],
"source": [
"if not use_preset:\n",
" train, test = python_random_split(data, ratio=0.75, seed=SEED)\n",
"else:\n",
" train = pd.read_pickle(path=TRAIN_PICKLE_PATH if DATA_DIR is None else os.path.join(DATA_DIR, TRAIN_PICKLE_PATH))\n",
" test = pd.read_pickle(path=TEST_PICKLE_PATH if DATA_DIR is None else os.path.join(DATA_DIR, TEST_PICKLE_PATH))\n",
" data = pd.concat([train, test])\n",
"\n",
"print(f\"{len(train)} train samples and {len(test)} test samples\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "cdf64b75",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:19:37.633662Z",
"iopub.status.busy": "2026-02-23T16:19:37.633093Z",
"iopub.status.idle": "2026-02-23T16:19:37.688157Z",
"shell.execute_reply": "2026-02-23T16:19:37.684064Z"
},
"papermill": {
"duration": 0.066347,
"end_time": "2026-02-23T16:19:37.690897",
"exception": false,
"start_time": "2026-02-23T16:19:37.624550",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total 1682 items and 943 users in the dataset\n"
]
}
],
"source": [
"# Unique items in the dataset\n",
"if ITEM_FEAT_COL is None:\n",
" items = data.drop_duplicates(ITEM_COL)[[ITEM_COL]].reset_index(drop=True)\n",
" item_feat_shape = None\n",
"else:\n",
" items = data.drop_duplicates(ITEM_COL)[[ITEM_COL, ITEM_FEAT_COL]].reset_index(drop=True)\n",
" item_feat_shape = len(items[ITEM_FEAT_COL][0])\n",
"# Unique users in the dataset\n",
"users = data.drop_duplicates(USER_COL)[[USER_COL]].reset_index(drop=True)\n",
"\n",
"print(f\"Total {len(items)} items and {len(users)} users in the dataset\")"
]
},
{
"cell_type": "markdown",
"id": "bf87e1f9",
"metadata": {
"papermill": {
"duration": 0.007637,
"end_time": "2026-02-23T16:19:37.704534",
"exception": false,
"start_time": "2026-02-23T16:19:37.696897",
"status": "completed"
},
"tags": []
},
"source": "### 2. Build Model\n\nWide-and-deep model consists of a linear model and DNN. We use the following hyperparameters and feature sets for the model:\n\n| | **Wide (linear) model** | **Deep neural networks** |\n|---|---|---|\n| **Feature set** | User-item co-occurrence features to capture how their co-occurrence correlates with the target rating | Deep, lower-dimensional embedding vectors for every user and item; Item feature vector |\n| **Hyperparameters** | Adagrad optimizer; Learning rate = 0.0621 | Adadelta optimizer; Learning rate = 0.1; Hidden units = [64, 128, 512]; Dropout rate = 0.8; Batch normalization (Batch size = 32); User embedding dim = 32; Item embedding dim = 16 |"
},
{
"cell_type": "code",
"execution_count": 8,
"id": "82b3925c",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:19:37.718607Z",
"iopub.status.busy": "2026-02-23T16:19:37.718115Z",
"iopub.status.idle": "2026-02-23T16:19:37.780728Z",
"shell.execute_reply": "2026-02-23T16:19:37.777468Z"
},
"papermill": {
"duration": 0.073824,
"end_time": "2026-02-23T16:19:37.783846",
"exception": false,
"start_time": "2026-02-23T16:19:37.710022",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WideDeepModel(\n",
" (wide_user): Embedding(943, 1)\n",
" (wide_item): Embedding(1682, 1)\n",
" (wide_cross): Embedding(1000, 1)\n",
" (deep_user): Embedding(943, 32, max_norm=5.656854249492381)\n",
" (deep_item): Embedding(1682, 16, max_norm=4.0)\n",
" (dnn): Sequential(\n",
" (0): Linear(in_features=67, out_features=64, bias=True)\n",
" (1): ReLU()\n",
" (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
" (3): Dropout(p=0.8, inplace=False)\n",
" (4): Linear(in_features=64, out_features=128, bias=True)\n",
" (5): ReLU()\n",
" (6): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
" (7): Dropout(p=0.8, inplace=False)\n",
" (8): Linear(in_features=128, out_features=512, bias=True)\n",
" (9): ReLU()\n",
" (10): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
" (11): Dropout(p=0.8, inplace=False)\n",
" (12): Linear(in_features=512, out_features=1, bias=True)\n",
" )\n",
")\n"
]
}
],
"source": [
"# Build the model\n",
"model = WideDeepModel(\n",
" users=users[USER_COL].values,\n",
" items=items[ITEM_COL].values,\n",
" model_type=MODEL_TYPE,\n",
" crossed_feat_dim=1000,\n",
" user_dim=DNN_USER_DIM,\n",
" item_dim=DNN_ITEM_DIM,\n",
" item_feat_shape=item_feat_shape,\n",
" item_feat_col=ITEM_FEAT_COL,\n",
" dnn_hidden_units=DNN_HIDDEN_UNITS,\n",
" dnn_dropout=DNN_DROPOUT,\n",
" dnn_batch_norm=(DNN_BATCH_NORM == 1),\n",
" user_col=USER_COL,\n",
" item_col=ITEM_COL,\n",
" seed=SEED,\n",
")\n",
"print(model)"
]
},
{
"cell_type": "markdown",
"id": "42e258a3",
"metadata": {
"papermill": {
"duration": 0.007783,
"end_time": "2026-02-23T16:19:37.801649",
"exception": false,
"start_time": "2026-02-23T16:19:37.793866",
"status": "completed"
},
"tags": []
},
"source": [
"### 3. Train and Evaluate Model\n",
"\n",
"Now we are all set to train the model. Here, we show how to utilize an evaluation callback to track model performance while training. The callback estimates the model performance on the given data based on the specified evaluation functions. Note we pass the test set to evaluate the model on rating metrics while we use the ranking-pool (all user-item pairs) for ranking metrics.\n",
"\n",
"> Note: The loss is Mean Squared Error. Square root of the loss is the same as [RMSE](https://en.wikipedia.org/wiki/Root-mean-square_deviation)."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "c35d0498",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:19:37.817909Z",
"iopub.status.busy": "2026-02-23T16:19:37.817502Z",
"iopub.status.idle": "2026-02-23T16:19:38.836378Z",
"shell.execute_reply": "2026-02-23T16:19:38.832271Z"
},
"papermill": {
"duration": 1.028981,
"end_time": "2026-02-23T16:19:38.838546",
"exception": false,
"start_time": "2026-02-23T16:19:37.809565",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"cols = {\n",
" \"col_user\": USER_COL,\n",
" \"col_item\": ITEM_COL,\n",
" \"col_rating\": RATING_COL,\n",
" \"col_prediction\": PREDICT_COL,\n",
"}\n",
"\n",
"# Prepare ranking evaluation set, i.e. get the cross join of all user-item pairs\n",
"ranking_pool = user_item_pairs(\n",
" user_df=users,\n",
" item_df=items,\n",
" user_col=USER_COL,\n",
" item_col=ITEM_COL,\n",
" user_item_filter_df=train, # Remove seen items\n",
" shuffle=True,\n",
" seed=SEED\n",
")\n",
"\n",
"# Create checkpoint frequency\n",
"save_checkpoints_epochs = max(1, N_EPOCHS // 5)\n",
"\n",
"# Prepare evaluation logger\n",
"eval_log = {}\n",
"\n",
"def evaluation_callback(m, epoch):\n",
" \"\"\"Evaluate the model on rating and ranking metrics.\"\"\"\n",
" # Rating metrics\n",
" test_no_label = test.drop(RATING_COL, axis=1)\n",
" preds = m.predict(test_no_label)\n",
" pred_df = test_no_label.copy()\n",
" pred_df[PREDICT_COL] = preds\n",
" for name, result in [\n",
" (\"rmse\", rmse(test, pred_df, **cols)),\n",
" (\"mae\", mae(test, pred_df, **cols)),\n",
" ]:\n",
" eval_log.setdefault(name, []).append(result)\n",
" logger.info(\"Epoch %d - %s: %.4f\", epoch, name, result)\n",
"\n",
" # Ranking metrics\n",
" preds = m.predict(ranking_pool)\n",
" pred_df = ranking_pool.copy()\n",
" pred_df[PREDICT_COL] = preds\n",
" for name, result in [\n",
" (\"ndcg_at_k\", ndcg_at_k(test, pred_df, **cols, k=TOP_K)),\n",
" (\"precision_at_k\", precision_at_k(test, pred_df, **cols, k=TOP_K)),\n",
" ]:\n",
" eval_log.setdefault(name, []).append(result)\n",
" logger.info(\"Epoch %d - %s: %.4f\", epoch, name, result)"
]
},
{
"cell_type": "markdown",
"id": "50d46732",
"metadata": {
"papermill": {
"duration": 0.010465,
"end_time": "2026-02-23T16:19:38.857448",
"exception": false,
"start_time": "2026-02-23T16:19:38.846983",
"status": "completed"
},
"tags": []
},
"source": [
"Let's train the model."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "fa786b9c",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:19:38.873232Z",
"iopub.status.busy": "2026-02-23T16:19:38.872629Z",
"iopub.status.idle": "2026-02-23T16:31:37.929049Z",
"shell.execute_reply": "2026-02-23T16:31:37.924109Z"
},
"papermill": {
"duration": 719.068078,
"end_time": "2026-02-23T16:31:37.930823",
"exception": false,
"start_time": "2026-02-23T16:19:38.862745",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training epochs = 20, Batch size = 32\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 1/20 – loss = 2.8091\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 2/20 – loss = 1.3644\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 3/20 – loss = 1.0518\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 4/20 – loss = 0.9378\n",
"INFO:root:Epoch 4 - rmse: 0.9638\n",
"INFO:root:Epoch 4 - mae: 0.7702\n",
"INFO:root:Epoch 4 - ndcg_at_k: 0.1588\n",
"INFO:root:Epoch 4 - precision_at_k: 0.1399\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 5/20 – loss = 0.8963\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 6/20 – loss = 0.8780\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 7/20 – loss = 0.8672\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 8/20 – loss = 0.8608\n",
"INFO:root:Epoch 8 - rmse: 0.9525\n",
"INFO:root:Epoch 8 - mae: 0.7563\n",
"INFO:root:Epoch 8 - ndcg_at_k: 0.1283\n",
"INFO:root:Epoch 8 - precision_at_k: 0.1169\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 9/20 – loss = 0.8548\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 10/20 – loss = 0.8516\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 11/20 – loss = 0.8484\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 12/20 – loss = 0.8447\n",
"INFO:root:Epoch 12 - rmse: 0.9495\n",
"INFO:root:Epoch 12 - mae: 0.7519\n",
"INFO:root:Epoch 12 - ndcg_at_k: 0.1116\n",
"INFO:root:Epoch 12 - precision_at_k: 0.1028\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 13/20 – loss = 0.8435\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 14/20 – loss = 0.8411\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 15/20 – loss = 0.8395\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 16/20 – loss = 0.8374\n",
"INFO:root:Epoch 16 - rmse: 0.9485\n",
"INFO:root:Epoch 16 - mae: 0.7507\n",
"INFO:root:Epoch 16 - ndcg_at_k: 0.1011\n",
"INFO:root:Epoch 16 - precision_at_k: 0.0959\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 17/20 – loss = 0.8365\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 18/20 – loss = 0.8354\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 19/20 – loss = 0.8350\n",
"INFO:recommenders.models.wide_deep.wide_deep_utils:Epoch 20/20 – loss = 0.8328\n",
"INFO:root:Epoch 20 - rmse: 0.9483\n",
"INFO:root:Epoch 20 - mae: 0.7509\n",
"INFO:root:Epoch 20 - ndcg_at_k: 0.0956\n",
"INFO:root:Epoch 20 - precision_at_k: 0.0923\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 8min 58s, sys: 1min 25s, total: 10min 23s\n",
"Wall time: 10min 5s\n"
]
}
],
"source": [
"%%time\n",
"print(f\"Training epochs = {N_EPOCHS}, Batch size = {BATCH_SIZE}\")\n",
"\n",
"model.fit(\n",
" train_df=train,\n",
" n_epochs=N_EPOCHS,\n",
" batch_size=BATCH_SIZE,\n",
" y_col=RATING_COL,\n",
" wide_optimizer=LINEAR_OPTIMIZER,\n",
" wide_optimizer_lr=LINEAR_OPTIMIZER_LR,\n",
" deep_optimizer=DNN_OPTIMIZER,\n",
" deep_optimizer_lr=DNN_OPTIMIZER_LR,\n",
" seed=SEED,\n",
" eval_fn=evaluation_callback if EVALUATE_WHILE_TRAINING else None,\n",
" eval_every_n_epochs=save_checkpoints_epochs if EVALUATE_WHILE_TRAINING else None,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "cdc6e593",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:31:37.952068Z",
"iopub.status.busy": "2026-02-23T16:31:37.951300Z",
"iopub.status.idle": "2026-02-23T16:31:38.618165Z",
"shell.execute_reply": "2026-02-23T16:31:38.614774Z"
},
"papermill": {
"duration": 0.679082,
"end_time": "2026-02-23T16:31:38.620711",
"exception": false,
"start_time": "2026-02-23T16:31:37.941629",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"application/notebook_utils.json+json": {
"data": [
0.9637667765493859,
0.9524653289730259,
0.9494509571022305,
0.9485016319654043,
0.9483230920505272
],
"encoder": "json",
"name": "eval_rmse"
}
},
"metadata": {
"notebook_utils": {
"data": true,
"display": false,
"name": "eval_rmse"
}
},
"output_type": "display_data"
},
{
"data": {
"application/notebook_utils.json+json": {
"data": [
0.7701853054141998,
0.7563325250887871,
0.7518883669877052,
0.7507046607351303,
0.7508952044284344
],
"encoder": "json",
"name": "eval_mae"
}
},
"metadata": {
"notebook_utils": {
"data": true,
"display": false,
"name": "eval_mae"
}
},
"output_type": "display_data"
},
{
"data": {
"application/notebook_utils.json+json": {
"data": [
0.1587807465252856,
0.12826009741043545,
0.11159625364089847,
0.10105289721074505,
0.09560897660465106
],
"encoder": "json",
"name": "eval_ndcg_at_k"
}
},
"metadata": {
"notebook_utils": {
"data": true,
"display": false,
"name": "eval_ndcg_at_k"
}
},
"output_type": "display_data"
},
{
"data": {
"application/notebook_utils.json+json": {
"data": [
0.1399150743099788,
0.11687898089171977,
0.10276008492569004,
0.09585987261146499,
0.09225053078556264
],
"encoder": "json",
"name": "eval_precision_at_k"
}
},
"metadata": {
"notebook_utils": {
"data": true,
"display": false,
"name": "eval_precision_at_k"
}
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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zc11ppbm52wFE7kM+1NzH9yYiIiItAxkUgS41/YgISJqK0RLvuRyOfr374/4+HjtPI1Gg/j4ePj7+993XaVSCUdHR1RXV2P37t0YN26cdtmQIUOQnp6u0/7s2bPo1q2b9vOdxCsjIwP79++HtbV1Mx1V81IYyDC8ly32870vIqIOqTHDsYwcORISiaTONHbsWJ12aWlpeOKJJ2BhYQETExMMHDhQ+wPlxYsX692GRCLBrl27tNuob/n27dtb5kt4CEFeKpzJuYlLhWVih0JEBEDkbofh4eHYvHkztm3bhrS0NMyfPx9lZWUICwsDAMycORMRERHa9snJydizZw/Onz+PQ4cOISQkBBqNBkuXLtW2WbJkCY4cOYI333wT586dw5dffolNmzZpKyRWVVXhySefxG+//YYvvvgCNTU1yMnJQU5ODiorK1v3C2iAQA8VTlwuQt7NCrFDISKiVtTY4VjuvAN9Zzp9+jRkMhkmT56sbZOZmYmhQ4fC3d0dCQkJOHnyJF599VVtMSsnJyedbWRnZ+P111+HqakpRo8erbO/rVu36rQbP358i30XTTW8ly0UBlI+/SKitkMQ2fr164WuXbsKcrlc8PX1FY4cOaJdNmLECGHWrFnazwkJCYKHh4egUCgEa2trYcaMGcLVq1frbPO7774THnnkEUGhUAju7u7Cpk2btMsuXLggAKh3+vnnnxscd3FxsQBAKC4ubtJxN1RhqVrosey/wvaUSy26HyKi1rquUcP4+voKCxYs0H6uqakRHBwchMjIyAat/9577wlmZmZCaWmpdl5oaKgwffr0RsXRp08f4e9//7vOPADCN99806jt3K01z7W/b00RJm883OL7IaKOraHXNVHH+dJnrTkezuSow7A0lmPzzAEtuh8i6tg4zlfbUVlZCWNjY3z99dc6T5RmzZqFoqIifPvttw/chre3N/z9/bFp0yYAtV37LSwssHTpUiQmJuL48ePo0aMHIiIi7vnU6ujRoxgwYAB++eUXDB48WDtfIpHAwcEBarUazs7OmDdvHsLCwiCRSOrdjlqthlqt1n4uKSmBk5NTq5xrO37NQsSeU/j1lUBYmypadF9E1HG1+XG+qOECPFQ4lJGPiqoasUMhIqJW0JThWO6WkpKC06dPY86cOdp5eXl5KC0txVtvvYWQkBDExsZiwoQJmDhxIg4cOFDv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vIcy+dIjfn5++OSTTxATE4ONGzfiwoULGDZsGG7evCl2aO1OTk4OAEClUunMV6lU2mX0cEJCQvDpp58iPj4e//nPf3DgwAGMHj0aNTU1YoemdzQaDZ5//nkMGTIEjzzyCIDac1gul8PS0lKnLc9h6qh4D209vIe2PN5Dm09r30MNHmptalWjR4/W/t27d2/4+fmhW7du2LlzJ2bPni1iZESNN2XKFO3f3t7e6N27N1xcXJCQkICAgAARI9M/CxYswOnTp/n+CtF98B5K7Qnvoc2nte+hfPKlxywtLdGrVy+cO3dO7FDaHXt7ewCoU9UmNzdXu4yal7OzM2xsbHg+N9LChQvx3//+Fz///DO6dOminW9vb4/KykoUFRXptOc5TFSL99CWw3to6+M9tGnEuIcy+dJjpaWlyMzMROfOncUOpd3p0aMH7O3tER8fr51XUlKC5ORk+Pv7ixhZ+3XlyhUUFhbyfG4gQRCwcOFCfPPNN/jpp5/Qo0cPneX9+/eHoaGhzjmcnp6OrKwsnsNE4D20JfEe2vp4D20cMe+h7HaoR1544QU8/vjj6NatG65du4aVK1dCJpNh6tSpYoeml0pLS3V+Ibpw4QJOnDgBKysrdO3aFc8//zz+7//+D66urujRowdeffVVODg4YPz48eIFrUfu9/1aWVnh9ddfx6RJk2Bvb4/MzEwsXboUPXv2RHBwsIhR648FCxbgyy+/xLfffgszMzNtH3QLCwsYGRnBwsICs2fPRnh4OKysrGBubo5FixbB398fgwYNEjl6otbHe2jz4j20ZfEe2rJEvYc+VK1EalWhoaFC586dBblcLjg6OgqhoaHCuXPnxA5Lb/38888CgDrTrFmzBEGoLZX76quvCiqVSlAoFEJAQICQnp4ubtB65H7fb3l5uRAUFCTY2toKhoaGQrdu3YS5c+cKOTk5YoetN+r7bgEIW7du1ba5deuW8I9//EPo1KmTYGxsLEyYMEHIzs4WL2giEfEe2rx4D21ZvIe2LDHvoZLbARAREREREVEL4jtfRERERERErYDJFxERERERUStg8kVERERERNQKmHwRERERERG1AiZfRERERERErYDJFxERERERUStg8kVERERERNQKmHwRtRMJCQmQSCQoKioSOxQiIiK9wnsotRYmX0RERERERK2AyRf9f3v3HdfUvf8P/JUwwo4i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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"if EVALUATE_WHILE_TRAINING and eval_log:\n",
" for i, (m_name, values) in enumerate(eval_log.items(), 1):\n",
" store_metadata(f\"eval_{m_name}\", values)\n",
" x = [save_checkpoints_epochs * j for j in range(1, len(values) + 1)]\n",
" plot.line_graph(\n",
" values=list(zip(values, x)),\n",
" labels=m_name,\n",
" x_name=\"epochs\",\n",
" y_name=m_name,\n",
" subplot=(math.ceil(len(eval_log) / 2), 2, i),\n",
" )"
]
},
{
"cell_type": "markdown",
"id": "4d4ad25e",
"metadata": {
"papermill": {
"duration": 0.013338,
"end_time": "2026-02-23T16:31:38.649827",
"exception": false,
"start_time": "2026-02-23T16:31:38.636489",
"status": "completed"
},
"tags": []
},
"source": [
"### 4. Test and Export Model\n",
"\n",
"#### 4.1 Item rating prediction"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "53984b84",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:31:38.679645Z",
"iopub.status.busy": "2026-02-23T16:31:38.679002Z",
"iopub.status.idle": "2026-02-23T16:31:39.478777Z",
"shell.execute_reply": "2026-02-23T16:31:39.475162Z"
},
"papermill": {
"duration": 0.818831,
"end_time": "2026-02-23T16:31:39.481157",
"exception": false,
"start_time": "2026-02-23T16:31:38.662326",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"RMSE: 0.9483\n",
"MAE: 0.7509\n"
]
}
],
"source": [
"predictions = model.predict(test)\n",
"prediction_df = test.drop(RATING_COL, axis=1)\n",
"prediction_df[PREDICT_COL] = predictions\n",
"\n",
"rating_rmse = rmse(test, prediction_df, **cols)\n",
"rating_mae = mae(test, prediction_df, **cols)\n",
"print(f\"RMSE: {rating_rmse:.4f}\")\n",
"print(f\"MAE: {rating_mae:.4f}\")"
]
},
{
"cell_type": "markdown",
"id": "353627d6",
"metadata": {
"papermill": {
"duration": 0.013006,
"end_time": "2026-02-23T16:31:39.508763",
"exception": false,
"start_time": "2026-02-23T16:31:39.495757",
"status": "completed"
},
"tags": []
},
"source": [
"#### 4.2 Recommend k items\n",
"For top-k recommendation evaluation, we use `recommend_k_items()` which scores all user-item pairs, removes items the user has already seen in the training set, and returns the top-k items per user."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "eab5790f",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:31:39.534168Z",
"iopub.status.busy": "2026-02-23T16:31:39.533704Z",
"iopub.status.idle": "2026-02-23T16:32:27.167542Z",
"shell.execute_reply": "2026-02-23T16:32:27.163230Z"
},
"papermill": {
"duration": 47.658462,
"end_time": "2026-02-23T16:32:27.177577",
"exception": false,
"start_time": "2026-02-23T16:31:39.519115",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"NDCG@10: 0.0956\n",
"Precision@10: 0.0923\n"
]
}
],
"source": [
"top_k_df = model.recommend_k_items(test, top_k=TOP_K, remove_seen=True)\n",
"\n",
"ranking_ndcg = ndcg_at_k(test, top_k_df, **cols, k=TOP_K)\n",
"ranking_precision = precision_at_k(test, top_k_df, **cols, k=TOP_K)\n",
"print(f\"NDCG@{TOP_K}: {ranking_ndcg:.4f}\")\n",
"print(f\"Precision@{TOP_K}: {ranking_precision:.4f}\")"
]
},
{
"cell_type": "markdown",
"id": "059ae096",
"metadata": {
"papermill": {
"duration": 0.011641,
"end_time": "2026-02-23T16:32:27.201341",
"exception": false,
"start_time": "2026-02-23T16:32:27.189700",
"status": "completed"
},
"tags": []
},
"source": [
"#### 4.3 Export Model\n",
"Finally, we export the model so that we can load later for re-training, evaluation, and prediction."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "0b9081c6",
"metadata": {
"execution": {
"iopub.execute_input": "2026-02-23T16:32:27.227081Z",
"iopub.status.busy": "2026-02-23T16:32:27.226582Z",
"iopub.status.idle": "2026-02-23T16:32:27.293553Z",
"shell.execute_reply": "2026-02-23T16:32:27.290366Z"
},
"papermill": {
"duration": 0.083196,
"end_time": "2026-02-23T16:32:27.295471",
"exception": false,
"start_time": "2026-02-23T16:32:27.212275",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model exported to outputs/model/wide_deep_model.pt\n"
]
}
],
"source": [
"os.makedirs(EXPORT_DIR_BASE, exist_ok=True)\n",
"export_path = os.path.join(EXPORT_DIR_BASE, \"wide_deep_model.pt\")\n",
"torch.save(model.state_dict(), export_path)\n",
"print(\"Model exported to\", export_path)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "1212c038",
"metadata": {
"papermill": {
"duration": 0.011373,
"end_time": "2026-02-23T16:32:27.316491",
"exception": false,
"start_time": "2026-02-23T16:32:27.305118",
"status": "completed"
},
"tags": []
},
"outputs": [
{
"data": {
"application/notebook_utils.json+json": {
"data": 0.9483230920505272,
"encoder": "json",
"name": "rmse"
}
},
"metadata": {
"notebook_utils": {
"data": true,
"display": false,
"name": "rmse"
}
},
"output_type": "display_data"
},
{
"data": {
"application/notebook_utils.json+json": {
"data": 0.7508952044284344,
"encoder": "json",
"name": "mae"
}
},
"metadata": {
"notebook_utils": {
"data": true,
"display": false,
"name": "mae"
}
},
"output_type": "display_data"
},
{
"data": {
"application/notebook_utils.json+json": {
"data": 0.09560897660465106,
"encoder": "json",
"name": "ndcg_at_k"
}
},
"metadata": {
"notebook_utils": {
"data": true,
"display": false,
"name": "ndcg_at_k"
}
},
"output_type": "display_data"
},
{
"data": {
"application/notebook_utils.json+json": {
"data": 0.09225053078556264,
"encoder": "json",
"name": "precision_at_k"
}
},
"metadata": {
"notebook_utils": {
"data": true,
"display": false,
"name": "precision_at_k"
}
},
"output_type": "display_data"
},
{
"data": {
"application/notebook_utils.json+json": {
"data": "outputs/model/wide_deep_model.pt",
"encoder": "json",
"name": "saved_model_dir"
}
},
"metadata": {
"notebook_utils": {
"data": true,
"display": false,
"name": "saved_model_dir"
}
},
"output_type": "display_data"
}
],
"source": [
"# Record results for tests - ignore this cell\n",
"store_metadata(\"rmse\", rating_rmse)\n",
"store_metadata(\"mae\", rating_mae)\n",
"store_metadata(\"ndcg_at_k\", ranking_ndcg)\n",
"store_metadata(\"precision_at_k\", ranking_precision)\n",
"store_metadata(\"saved_model_dir\", export_path)\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "recommenders (3.11.14)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.14"
},
"papermill": {
"default_parameters": {},
"duration": 787.342697,
"end_time": "2026-02-23T16:32:30.227487",
"environment_variables": {},
"exception": null,
"input_path": "examples/00_quick_start/wide_deep_movielens.ipynb",
"output_path": "/tmp/wide_deep_output2.ipynb",
"parameters": {},
"start_time": "2026-02-23T16:19:22.884790",
"version": "2.6.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
}