{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# MovieLens - Predicting a user's gender based on the movies they have watched\n", "\n", "In this notebook, we will apply getML to a dataset that is often used for benchmarking in the relational learning literature: The MovieLens dataset.\n", "\n", "Summary:\n", "\n", "- Prediction type: __Classification model__\n", "- Domain: __Entertainment__\n", "- Prediction target: __The gender of a user__ \n", "- Population size: __6039__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Background\n", "\n", "The MovieLens dataset is often used in the relational learning literature has a benchmark for newly developed algorithms. Following the tradition, we benchmark getML's own algorithms on this dataset as well. The task is to predict a user's gender based on the movies they have watched.\n", "\n", "\n", "It has been downloaded from the [CTU Prague relational learning repository](https://relational.fit.cvut.cz/dataset/MovieLens) (Motl and Schulte, 2015) (Now residing at [relational-data.org](https://relational-data.org/dataset/MovieLens).)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's get started with the analysis and set up your session:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%pip install -q \"getml==1.5.0\" \"matplotlib==3.9.2\" \"ipywidgets==8.1.5\"" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "getML API version: 1.5.0\n", "\n" ] } ], "source": [ "import os\n", "\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "import getml\n", "\n", "os.environ[\"PYARROW_IGNORE_TIMEZONE\"] = \"1\"\n", "%matplotlib inline \n", "\n", "print(f\"getML API version: {getml.__version__}\\n\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Launching ./getML --allow-push-notifications=true --allow-remote-ips=true --home-directory=/home/user --in-memory=true --install=false --launch-browser=true --log=false --token=token in /home/user/.getML/getml-1.5.0-x64-linux...\n", "Launched the getML Engine. The log output will be stored in /home/user/.getML/logs/20240912151421.log.\n", "\u001b[2K Loading pipelines... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[?25h" ] }, { "data": { "text/html": [ "
Connected to project 'MovieLens'.\n",
       "
\n" ], "text/plain": [ "Connected to project \u001b[32m'MovieLens'\u001b[0m.\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "getml.engine.launch(allow_remote_ips=True, token=\"token\")\n", "getml.engine.set_project(\"MovieLens\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Loading data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.1 Download from source\n", "\n", "We begin by downloading the data from the source file:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Connection(dbname='imdb_MovieLens',\n", " dialect='mysql',\n", " host='relational.fel.cvut.cz',\n", " port=3306)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "conn = getml.database.connect_mysql(\n", " host=\"relational.fel.cvut.cz\",\n", " dbname=\"imdb_MovieLens\",\n", " port=3306,\n", " user=\"guest\",\n", " password=\"ctu-relational\",\n", ")\n", "\n", "conn" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def load_if_needed(name):\n", " \"\"\"\n", " Loads the data from the relational learning\n", " repository, if the data frame has not already\n", " been loaded.\n", " \"\"\"\n", " if not getml.data.exists(name):\n", " data_frame = getml.data.DataFrame.from_db(name=name, table_name=name, conn=conn)\n", " data_frame.save()\n", " else:\n", " data_frame = getml.data.load_data_frame(name)\n", " return data_frame" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "users = load_if_needed(\"users\")\n", "u2base = load_if_needed(\"u2base\")\n", "movies = load_if_needed(\"movies\")\n", "movies2directors = load_if_needed(\"movies2directors\")\n", "directors = load_if_needed(\"directors\")\n", "movies2actors = load_if_needed(\"movies2actors\")\n", "actors = load_if_needed(\"actors\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2 Prepare data for getML" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "getML requires that we define *roles* for each of the columns." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "users[\"target\"] = users.u_gender == \"F\"" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name useridtargetoccupation ageu_gender
rolejoin_keytargetcategoricalnumericalunused_string
01\n", " 1 \n", " 2\n", " 1 \n", " F
151\n", " 1 \n", " 2\n", " 1 \n", " F
275\n", " 1 \n", " 2\n", " 1 \n", " F
386\n", " 1 \n", " 2\n", " 1 \n", " F
499\n", " 1 \n", " 2\n", " 1 \n", " F
...\n", " ... \n", " ...\n", " ... \n", " ...
60345658\n", " 0 \n", " 5\n", " 56 \n", " M
60355669\n", " 0 \n", " 5\n", " 56 \n", " M
60365703\n", " 0 \n", " 5\n", " 56 \n", " M
60375948\n", " 0 \n", " 5\n", " 56 \n", " M
60385980\n", " 0 \n", " 5\n", " 56 \n", " M
\n", "\n", "

\n", " 6039 rows x 5 columns
\n", " memory usage: 0.21 MB
\n", " name: users
\n", " type: getml.DataFrame
\n", " \n", "

\n" ], "text/plain": [ "name userid target occupation age u_gender \n", "role join_key target categorical numerical unused_string\n", " 0 1 1 2 1 F \n", " 1 51 1 2 1 F \n", " 2 75 1 2 1 F \n", " 3 86 1 2 1 F \n", " 4 99 1 2 1 F \n", " ... ... ... ... ... \n", "6034 5658 0 5 56 M \n", "6035 5669 0 5 56 M \n", "6036 5703 0 5 56 M \n", "6037 5948 0 5 56 M \n", "6038 5980 0 5 56 M \n", "\n", "\n", "6039 rows x 5 columns\n", "memory usage: 0.21 MB\n", "type: getml.DataFrame" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "users.set_role(\"userid\", getml.data.roles.join_key)\n", "users.set_role(\"age\", getml.data.roles.numerical)\n", "users.set_role(\"occupation\", getml.data.roles.categorical)\n", "users.set_role(\"target\", getml.data.roles.target)\n", "\n", "users.save()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name userid movieid rating
rolejoin_keyjoin_keynumerical
021964242\n", " 1 \n", "
122219779\n", " 1 \n", "
231856939\n", " 1 \n", "
342273044\n", " 1 \n", "
451681655\n", " 1 \n", "
......\n", " ... \n", "
99615460402560616\n", " 5 \n", "
99615560402564194\n", " 5 \n", "
99615660402581228\n", " 5 \n", "
99615760402581428\n", " 5 \n", "
99615860402593112\n", " 5 \n", "
\n", "\n", "

\n", " 996159 rows x 3 columns
\n", " memory usage: 15.94 MB
\n", " name: u2base
\n", " type: getml.DataFrame
\n", " \n", "

\n" ], "text/plain": [ " name userid movieid rating\n", " role join_key join_key numerical\n", " 0 2 1964242 1\n", " 1 2 2219779 1\n", " 2 3 1856939 1\n", " 3 4 2273044 1\n", " 4 5 1681655 1\n", " ... ... ...\n", "996154 6040 2560616 5\n", "996155 6040 2564194 5\n", "996156 6040 2581228 5\n", "996157 6040 2581428 5\n", "996158 6040 2593112 5\n", "\n", "\n", "996159 rows x 3 columns\n", "memory usage: 15.94 MB\n", "type: getml.DataFrame" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "u2base.set_role([\"userid\", \"movieid\"], getml.data.roles.join_key)\n", "u2base.set_role(\"rating\", getml.data.roles.numerical)\n", "\n", "u2base.save()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name movieidisEnglish country yearrunningtime
rolejoin_keycategoricalcategoricalnumerical numerical
01672052Tother\n", " 3 \n", " \n", " 2 \n", "
11672111Tother\n", " 4 \n", " \n", " 2 \n", "
21672580TUSA\n", " 4 \n", " \n", " 3 \n", "
31672716TUSA\n", " 4 \n", " \n", " 2 \n", "
41672946TUSA\n", " 4 \n", " \n", " 0 \n", "
.........\n", " ... \n", " \n", " ... \n", "
38272591814Tother\n", " 4 \n", " \n", " 2 \n", "
38282592334TUSA\n", " 4 \n", " \n", " 2 \n", "
38292592963FFrance\n", " 2 \n", " \n", " 2 \n", "
38302593112TUSA\n", " 4 \n", " \n", " 1 \n", "
38312593313Fother\n", " 4 \n", " \n", " 3 \n", "
\n", "\n", "

\n", " 3832 rows x 5 columns
\n", " memory usage: 0.11 MB
\n", " name: movies
\n", " type: getml.DataFrame
\n", " \n", "

\n" ], "text/plain": [ "name movieid isEnglish country year runningtime\n", "role join_key categorical categorical numerical numerical\n", " 0 1672052 T other 3 2\n", " 1 1672111 T other 4 2\n", " 2 1672580 T USA 4 3\n", " 3 1672716 T USA 4 2\n", " 4 1672946 T USA 4 0\n", " ... ... ... ... ...\n", "3827 2591814 T other 4 2\n", "3828 2592334 T USA 4 2\n", "3829 2592963 F France 2 2\n", "3830 2593112 T USA 4 1\n", "3831 2593313 F other 4 3\n", "\n", "\n", "3832 rows x 5 columns\n", "memory usage: 0.11 MB\n", "type: getml.DataFrame" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "movies.set_role(\"movieid\", getml.data.roles.join_key)\n", "movies.set_role([\"year\", \"runningtime\"], getml.data.roles.numerical)\n", "movies.set_role([\"isEnglish\", \"country\"], getml.data.roles.categorical)\n", "\n", "movies.save()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name movieiddirectoridgenre
rolejoin_key join_keycategorical
0167211154934Action
11672946188940Action
21679461179783Action
31691387291700Action
4169330514663Action
.........
41362570825265215Other
41372572478149311Other
41382577062304827Other
41392590181270707Other
4140259181457348Other
\n", "\n", "

\n", " 4141 rows x 3 columns
\n", " memory usage: 0.05 MB
\n", " name: movies2directors
\n", " type: getml.DataFrame
\n", " \n", "

\n" ], "text/plain": [ "name movieid directorid genre \n", "role join_key join_key categorical\n", " 0 1672111 54934 Action \n", " 1 1672946 188940 Action \n", " 2 1679461 179783 Action \n", " 3 1691387 291700 Action \n", " 4 1693305 14663 Action \n", " ... ... ... \n", "4136 2570825 265215 Other \n", "4137 2572478 149311 Other \n", "4138 2577062 304827 Other \n", "4139 2590181 270707 Other \n", "4140 2591814 57348 Other \n", "\n", "\n", "4141 rows x 3 columns\n", "memory usage: 0.05 MB\n", "type: getml.DataFrame" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "movies2directors.set_role([\"movieid\", \"directorid\"], getml.data.roles.join_key)\n", "movies2directors.set_role(\"genre\", getml.data.roles.categorical)\n", "\n", "movies2directors.save()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namedirectoridd_qualityavg_revenue
role join_keynumerical numerical
067\n", " 4 \n", " \n", " 1 \n", "
192\n", " 2 \n", " \n", " 3 \n", "
2284\n", " 4 \n", " \n", " 0 \n", "
3708\n", " 4 \n", " \n", " 1 \n", "
4746\n", " 4 \n", " \n", " 4 \n", "
...\n", " ... \n", " \n", " ... \n", "
2196305962\n", " 4 \n", " \n", " 4 \n", "
2197305978\n", " 4 \n", " \n", " 2 \n", "
2198306168\n", " 3 \n", " \n", " 2 \n", "
2199306343\n", " 4 \n", " \n", " 1 \n", "
2200306351\n", " 4 \n", " \n", " 1 \n", "
\n", "\n", "

\n", " 2201 rows x 3 columns
\n", " memory usage: 0.04 MB
\n", " name: directors
\n", " type: getml.DataFrame
\n", " \n", "

\n" ], "text/plain": [ "name directorid d_quality avg_revenue\n", "role join_key numerical numerical\n", " 0 67 4 1\n", " 1 92 2 3\n", " 2 284 4 0\n", " 3 708 4 1\n", " 4 746 4 4\n", " ... ... ...\n", "2196 305962 4 4\n", "2197 305978 4 2\n", "2198 306168 3 2\n", "2199 306343 4 1\n", "2200 306351 4 1\n", "\n", "\n", "2201 rows x 3 columns\n", "memory usage: 0.04 MB\n", "type: getml.DataFrame" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "directors.set_role(\"directorid\", getml.data.roles.join_key)\n", "directors.set_role([\"d_quality\", \"avg_revenue\"], getml.data.roles.numerical)\n", "\n", "directors.save()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name movieid actorid cast_num
rolejoin_keyjoin_keynumerical
01672580981535\n", " 0 \n", "
116729461094968\n", " 0 \n", "
21673647149985\n", " 0 \n", "
31673647261595\n", " 0 \n", "
41673647781357\n", " 0 \n", "
......\n", " ... \n", "
1383442593313947005\n", " 3 \n", "
13834525933131090590\n", " 3 \n", "
13834625933131347419\n", " 3 \n", "
13834725933132099917\n", " 3 \n", "
13834825933132633550\n", " 3 \n", "
\n", "\n", "

\n", " 138349 rows x 3 columns
\n", " memory usage: 2.21 MB
\n", " name: movies2actors
\n", " type: getml.DataFrame
\n", " \n", "

\n" ], "text/plain": [ " name movieid actorid cast_num\n", " role join_key join_key numerical\n", " 0 1672580 981535 0\n", " 1 1672946 1094968 0\n", " 2 1673647 149985 0\n", " 3 1673647 261595 0\n", " 4 1673647 781357 0\n", " ... ... ...\n", "138344 2593313 947005 3\n", "138345 2593313 1090590 3\n", "138346 2593313 1347419 3\n", "138347 2593313 2099917 3\n", "138348 2593313 2633550 3\n", "\n", "\n", "138349 rows x 3 columns\n", "memory usage: 2.21 MB\n", "type: getml.DataFrame" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "movies2actors.set_role([\"movieid\", \"actorid\"], getml.data.roles.join_key)\n", "movies2actors.set_role(\"cast_num\", getml.data.roles.numerical)\n", "\n", "movies2actors.save()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to separate our data set into a training, testing and validation set:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name actorida_gender a_quality
rolejoin_keycategoricalnumerical
04M\n", " 4 \n", "
116M\n", " 0 \n", "
228M\n", " 4 \n", "
3566M\n", " 4 \n", "
4580M\n", " 4 \n", "
......\n", " ... \n", "
986852749162F\n", " 3 \n", "
986862749168F\n", " 3 \n", "
986872749204F\n", " 3 \n", "
986882749377F\n", " 4 \n", "
986892749386F\n", " 4 \n", "
\n", "\n", "

\n", " 98690 rows x 3 columns
\n", " memory usage: 1.58 MB
\n", " name: actors
\n", " type: getml.DataFrame
\n", " \n", "

\n" ], "text/plain": [ " name actorid a_gender a_quality\n", " role join_key categorical numerical\n", " 0 4 M 4\n", " 1 16 M 0\n", " 2 28 M 4\n", " 3 566 M 4\n", " 4 580 M 4\n", " ... ... ...\n", "98685 2749162 F 3\n", "98686 2749168 F 3\n", "98687 2749204 F 3\n", "98688 2749377 F 4\n", "98689 2749386 F 4\n", "\n", "\n", "98690 rows x 3 columns\n", "memory usage: 1.58 MB\n", "type: getml.DataFrame" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "actors.set_role(\"actorid\", getml.data.roles.join_key)\n", "actors.set_role(\"a_quality\", getml.data.roles.numerical)\n", "actors.set_role(\"a_gender\", getml.data.roles.categorical)\n", "\n", "actors.save()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0train
1train
2train
3test
4test
...
\n", "\n", "

\n", " infinite number of rows
\n", " \n", " type: StringColumnView
\n", " \n", "

\n" ], "text/plain": [ " \n", " 0 train\n", " 1 train\n", " 2 train\n", " 3 test \n", " 4 test \n", " ... \n", "\n", "\n", "infinite number of rows\n", "type: StringColumnView" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "split = getml.data.split.random(train=0.75, test=0.25)\n", "split" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
population
\n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
subsetname rowstype
0testusers1511View
1trainusers4528View
\n", "
\n", "
\n", "
peripheral
\n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name rowstype
0u2base996159DataFrame
1movies3832DataFrame
2movies2directors4141DataFrame
3directors2201DataFrame
4movies2actors138349DataFrame
5actors98690DataFrame
\n", "
\n", "
" ], "text/plain": [ "population\n", " subset name rows type\n", "0 test users 1511 View\n", "1 train users 4528 View\n", "\n", "peripheral\n", " name rows type \n", "0 u2base 996159 DataFrame\n", "1 movies 3832 DataFrame\n", "2 movies2directors 4141 DataFrame\n", "3 directors 2201 DataFrame\n", "4 movies2actors 138349 DataFrame\n", "5 actors 98690 DataFrame" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "container = getml.data.Container(population=users, split=split)\n", "\n", "container.add(\n", " u2base=u2base,\n", " movies=movies,\n", " movies2directors=movies2directors,\n", " directors=directors,\n", " movies2actors=movies2actors,\n", " actors=actors,\n", ")\n", "\n", "container" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Predictive modeling\n", "\n", "We loaded the data and defined the roles and units. Next, we create a getML pipeline for relational learning." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.1 Define relational model\n", "\n", "To get started with relational learning, we need to specify the data model." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
diagram
\n", "
directorsmovies2directorsactorsmovies2actorsmoviesu2baseusersdirectorid = directoridRelationship: many-to-oneactorid = actoridRelationship: many-to-onemovieid = movieidRelationship: propositionalizationmovieid = movieidRelationship: propositionalizationmovieid = movieidRelationship: many-to-oneuserid = userid
\n", "
\n", "\n", "
\n", "
staging
\n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
data frames staging table
0usersUSERS__STAGING_TABLE_1
1movies2actors, actorsMOVIES2ACTORS__STAGING_TABLE_2
2movies2directors, directorsMOVIES2DIRECTORS__STAGING_TABLE_3
3u2base, moviesU2BASE__STAGING_TABLE_4
\n", "
\n", " " ], "text/plain": [ "users:\n", " columns:\n", " - occupation: categorical\n", " - userid: join_key\n", " - age: numerical\n", " - target: target\n", " - u_gender: unused_string\n", "\n", " joins:\n", " - right: 'u2base'\n", " on: (users.userid, u2base.userid)\n", " relationship: 'many-to-many'\n", " lagged_targets: False\n", "\n", "u2base:\n", " columns:\n", " - userid: join_key\n", " - movieid: join_key\n", " - rating: numerical\n", "\n", " joins:\n", " - right: 'movies'\n", " on: (u2base.movieid, movies.movieid)\n", " relationship: 'many-to-one'\n", " lagged_targets: False\n", "\n", "movies:\n", " columns:\n", " - isEnglish: categorical\n", " - country: categorical\n", " - movieid: join_key\n", " - year: numerical\n", " - runningtime: numerical\n", "\n", " joins:\n", " - right: 'movies2directors'\n", " on: (movies.movieid, movies2directors.movieid)\n", " relationship: 'propositionalization'\n", " lagged_targets: False\n", " - right: 'movies2actors'\n", " on: (movies.movieid, movies2actors.movieid)\n", " relationship: 'propositionalization'\n", " lagged_targets: False\n", "\n", "movies2directors:\n", " columns:\n", " - genre: categorical\n", " - movieid: join_key\n", " - directorid: join_key\n", "\n", " joins:\n", " - right: 'directors'\n", " on: (movies2directors.directorid, directors.directorid)\n", " relationship: 'many-to-one'\n", " lagged_targets: False\n", "\n", "directors:\n", " columns:\n", " - directorid: join_key\n", " - d_quality: numerical\n", " - avg_revenue: numerical\n", "\n", "movies2actors:\n", " columns:\n", " - movieid: join_key\n", " - actorid: join_key\n", " - cast_num: numerical\n", "\n", " joins:\n", " - right: 'actors'\n", " on: (movies2actors.actorid, actors.actorid)\n", " relationship: 'many-to-one'\n", " lagged_targets: False\n", "\n", "actors:\n", " columns:\n", " - a_gender: categorical\n", " - actorid: join_key\n", " - a_quality: numerical" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dm = getml.data.DataModel(users.to_placeholder())\n", "\n", "dm.add(\n", " getml.data.to_placeholder(\n", " u2base=u2base,\n", " movies=movies,\n", " movies2directors=movies2directors,\n", " directors=directors,\n", " movies2actors=movies2actors,\n", " actors=actors,\n", " )\n", ")\n", "\n", "dm.population.join(dm.u2base, on=\"userid\")\n", "\n", "dm.u2base.join(\n", " dm.movies, on=\"movieid\", relationship=getml.data.relationship.many_to_one\n", ")\n", "\n", "dm.movies.join(\n", " dm.movies2directors,\n", " on=\"movieid\",\n", " relationship=getml.data.relationship.propositionalization,\n", ")\n", "\n", "dm.movies2directors.join(\n", " dm.directors, on=\"directorid\", relationship=getml.data.relationship.many_to_one\n", ")\n", "\n", "dm.movies.join(\n", " dm.movies2actors,\n", " on=\"movieid\",\n", " relationship=getml.data.relationship.propositionalization,\n", ")\n", "\n", "dm.movies2actors.join(\n", " dm.actors, on=\"actorid\", relationship=getml.data.relationship.many_to_one\n", ")\n", "\n", "dm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.2 getML pipeline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "__Set-up the feature learner & predictor__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will set up two pipelines. One of them uses `FastProp`, the other one uses `Relboost`. Note that we have marked some of the joins in the data model with the `propositionalization` tag. This means that `FastProp` will be used for these relationships, even for the second pipeline. This can significantly speed up the training process." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "mapping = getml.preprocessors.Mapping()\n", "\n", "fast_prop = getml.feature_learning.FastProp(\n", " loss_function=getml.feature_learning.loss_functions.CrossEntropyLoss,\n", " num_threads=1,\n", ")\n", "\n", "relboost = getml.feature_learning.Relboost(\n", " loss_function=getml.feature_learning.loss_functions.CrossEntropyLoss,\n", " num_subfeatures=50,\n", " num_threads=1,\n", ")\n", "\n", "predictor = getml.predictors.XGBoostClassifier(\n", " max_depth=5,\n", " n_jobs=1,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Build the pipeline__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Pipeline(data_model='users',\n",
       "         feature_learners=['FastProp'],\n",
       "         feature_selectors=[],\n",
       "         include_categorical=False,\n",
       "         loss_function='CrossEntropyLoss',\n",
       "         peripheral=['actors', 'directors', 'movies', 'movies2actors', 'movies2directors',\n",
       "                     'u2base'],\n",
       "         predictors=['XGBoostClassifier'],\n",
       "         preprocessors=['Mapping'],\n",
       "         share_selected_features=0.5,\n",
       "         tags=['fast_prop'])
" ], "text/plain": [ "Pipeline(data_model='users',\n", " feature_learners=['FastProp'],\n", " feature_selectors=[],\n", " include_categorical=False,\n", " loss_function='CrossEntropyLoss',\n", " peripheral=['actors', 'directors', 'movies', 'movies2actors', 'movies2directors',\n", " 'u2base'],\n", " predictors=['XGBoostClassifier'],\n", " preprocessors=['Mapping'],\n", " share_selected_features=0.5,\n", " tags=['fast_prop'])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe1 = getml.pipeline.Pipeline(\n", " tags=[\"fast_prop\"],\n", " data_model=dm,\n", " preprocessors=[mapping],\n", " feature_learners=[fast_prop],\n", " predictors=[predictor],\n", ")\n", "\n", "pipe1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Pipeline(data_model='users',\n",
       "         feature_learners=['Relboost'],\n",
       "         feature_selectors=[],\n",
       "         include_categorical=False,\n",
       "         loss_function='CrossEntropyLoss',\n",
       "         peripheral=['actors', 'directors', 'movies', 'movies2actors', 'movies2directors',\n",
       "                     'u2base'],\n",
       "         predictors=['XGBoostClassifier'],\n",
       "         preprocessors=['Mapping'],\n",
       "         share_selected_features=0.5,\n",
       "         tags=['relboost'])
" ], "text/plain": [ "Pipeline(data_model='users',\n", " feature_learners=['Relboost'],\n", " feature_selectors=[],\n", " include_categorical=False,\n", " loss_function='CrossEntropyLoss',\n", " peripheral=['actors', 'directors', 'movies', 'movies2actors', 'movies2directors',\n", " 'u2base'],\n", " predictors=['XGBoostClassifier'],\n", " preprocessors=['Mapping'],\n", " share_selected_features=0.5,\n", " tags=['relboost'])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe2 = getml.pipeline.Pipeline(\n", " tags=[\"relboost\"],\n", " data_model=dm,\n", " preprocessors=[mapping],\n", " feature_learners=[relboost],\n", " predictors=[predictor],\n", ")\n", "\n", "pipe2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.3 Model training" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Checking data model...\n",
       "
\n" ], "text/plain": [ "Checking data model\u001b[33m...\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[2K Staging... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K Preprocessing... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:12\n", "\u001b[2K Checking... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[?25h" ] }, { "data": { "text/html": [ "
The pipeline check generated 2 issues labeled INFO and 0 issues labeled WARNING.\n",
       "
\n" ], "text/plain": [ "The pipeline check generated \u001b[1;36m2\u001b[0m issues labeled INFO and \u001b[1;36m0\u001b[0m issues labeled WARNING.\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
typelabel message
0INFOFOREIGN KEYS NOT FOUNDWhen joining U2BASE__STAGING_TABLE_4 and MOVIES2DIRECTORS__STAGING_TABLE_3 over 'movieid' and 'movieid', there are no corresponding entries for 0.159513% of entries in 'movieid' in 'U2BASE__STAGING_TABLE_4'. You might want to double-check your join keys.
1INFOFOREIGN KEYS NOT FOUNDWhen joining U2BASE__STAGING_TABLE_4 and MOVIES2ACTORS__STAGING_TABLE_2 over 'movieid' and 'movieid', there are no corresponding entries for 0.336492% of entries in 'movieid' in 'U2BASE__STAGING_TABLE_4'. You might want to double-check your join keys.
" ], "text/plain": [ " type label message \n", "0 INFO FOREIGN KEYS NOT FOUND When joining U2BASE__STAGING_TAB...\n", "1 INFO FOREIGN KEYS NOT FOUND When joining U2BASE__STAGING_TAB..." ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe1.check(container.train)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Checking data model...\n",
       "
\n" ], "text/plain": [ "Checking data model\u001b[33m...\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[2K Staging... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K Preprocessing... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[?25h" ] }, { "data": { "text/html": [ "
The pipeline check generated 2 issues labeled INFO and 0 issues labeled WARNING.\n",
       "
\n" ], "text/plain": [ "The pipeline check generated \u001b[1;36m2\u001b[0m issues labeled INFO and \u001b[1;36m0\u001b[0m issues labeled WARNING.\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
To see the issues in full, run .check() on the pipeline.\n",
       "
\n" ], "text/plain": [ "To see the issues in full, run \u001b[1;35m.check\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m on the pipeline.\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[2K Staging... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K Preprocessing... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K FastProp: Trying 941 features... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:34\n", "\u001b[2K FastProp: Building subfeatures... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:18\n", "\u001b[2K FastProp: Building features... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:02\n", "\u001b[2K XGBoost: Training as predictor... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:03\n", "\u001b[?25h" ] }, { "data": { "text/html": [ "
Trained pipeline.\n",
       "
\n" ], "text/plain": [ "Trained pipeline.\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time taken: 0:00:59.177060.\n", "\n" ] }, { "data": { "text/html": [ "
Pipeline(data_model='users',\n",
       "         feature_learners=['FastProp'],\n",
       "         feature_selectors=[],\n",
       "         include_categorical=False,\n",
       "         loss_function='CrossEntropyLoss',\n",
       "         peripheral=['actors', 'directors', 'movies', 'movies2actors', 'movies2directors',\n",
       "                     'u2base'],\n",
       "         predictors=['XGBoostClassifier'],\n",
       "         preprocessors=['Mapping'],\n",
       "         share_selected_features=0.5,\n",
       "         tags=['fast_prop', 'container-AA9NXV'])
" ], "text/plain": [ "Pipeline(data_model='users',\n", " feature_learners=['FastProp'],\n", " feature_selectors=[],\n", " include_categorical=False,\n", " loss_function='CrossEntropyLoss',\n", " peripheral=['actors', 'directors', 'movies', 'movies2actors', 'movies2directors',\n", " 'u2base'],\n", " predictors=['XGBoostClassifier'],\n", " preprocessors=['Mapping'],\n", " share_selected_features=0.5,\n", " tags=['fast_prop', 'container-AA9NXV'])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe1.fit(container.train)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Checking data model...\n",
       "
\n" ], "text/plain": [ "Checking data model\u001b[33m...\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[2K Staging... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K Preprocessing... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K Checking... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[?25h" ] }, { "data": { "text/html": [ "
The pipeline check generated 2 issues labeled INFO and 0 issues labeled WARNING.\n",
       "
\n" ], "text/plain": [ "The pipeline check generated \u001b[1;36m2\u001b[0m issues labeled INFO and \u001b[1;36m0\u001b[0m issues labeled WARNING.\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
typelabel message
0INFOFOREIGN KEYS NOT FOUNDWhen joining U2BASE__STAGING_TABLE_4 and MOVIES2DIRECTORS__STAGING_TABLE_3 over 'movieid' and 'movieid', there are no corresponding entries for 0.159513% of entries in 'movieid' in 'U2BASE__STAGING_TABLE_4'. You might want to double-check your join keys.
1INFOFOREIGN KEYS NOT FOUNDWhen joining U2BASE__STAGING_TABLE_4 and MOVIES2ACTORS__STAGING_TABLE_2 over 'movieid' and 'movieid', there are no corresponding entries for 0.336492% of entries in 'movieid' in 'U2BASE__STAGING_TABLE_4'. You might want to double-check your join keys.
" ], "text/plain": [ " type label message \n", "0 INFO FOREIGN KEYS NOT FOUND When joining U2BASE__STAGING_TAB...\n", "1 INFO FOREIGN KEYS NOT FOUND When joining U2BASE__STAGING_TAB..." ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe2.check(container.train)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Checking data model...\n",
       "
\n" ], "text/plain": [ "Checking data model\u001b[33m...\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[2K Staging... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K Preprocessing... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[?25h" ] }, { "data": { "text/html": [ "
The pipeline check generated 2 issues labeled INFO and 0 issues labeled WARNING.\n",
       "
\n" ], "text/plain": [ "The pipeline check generated \u001b[1;36m2\u001b[0m issues labeled INFO and \u001b[1;36m0\u001b[0m issues labeled WARNING.\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
To see the issues in full, run .check() on the pipeline.\n",
       "
\n" ], "text/plain": [ "To see the issues in full, run \u001b[1;35m.check\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m on the pipeline.\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[2K Staging... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K Preprocessing... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K FastProp: Building subfeatures... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:04\n", "\u001b[2K Relboost: Training features... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 11:48\n", "\u001b[2K FastProp: Building subfeatures... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:05\n", "\u001b[2K Relboost: Building features... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 06:18\n", "\u001b[2K XGBoost: Training as predictor... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:03\n", "\u001b[?25h" ] }, { "data": { "text/html": [ "
Trained pipeline.\n",
       "
\n" ], "text/plain": [ "Trained pipeline.\n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Time taken: 0:18:19.843564.\n", "\n" ] }, { "data": { "text/html": [ "
Pipeline(data_model='users',\n",
       "         feature_learners=['Relboost'],\n",
       "         feature_selectors=[],\n",
       "         include_categorical=False,\n",
       "         loss_function='CrossEntropyLoss',\n",
       "         peripheral=['actors', 'directors', 'movies', 'movies2actors', 'movies2directors',\n",
       "                     'u2base'],\n",
       "         predictors=['XGBoostClassifier'],\n",
       "         preprocessors=['Mapping'],\n",
       "         share_selected_features=0.5,\n",
       "         tags=['relboost', 'container-AA9NXV'])
" ], "text/plain": [ "Pipeline(data_model='users',\n", " feature_learners=['Relboost'],\n", " feature_selectors=[],\n", " include_categorical=False,\n", " loss_function='CrossEntropyLoss',\n", " peripheral=['actors', 'directors', 'movies', 'movies2actors', 'movies2directors',\n", " 'u2base'],\n", " predictors=['XGBoostClassifier'],\n", " preprocessors=['Mapping'],\n", " share_selected_features=0.5,\n", " tags=['relboost', 'container-AA9NXV'])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe2.fit(container.train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.4 Model evaluation" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "lines_to_next_cell": 0 }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[2K Staging... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K Preprocessing... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K FastProp: Building subfeatures... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:19\n", "\u001b[2K FastProp: Building features... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[?25h" ] }, { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date time set usedtargetaccuracy auccross entropy
02024-09-12 15:15:36traintarget0.91390.96860.2788
12024-09-12 15:34:18testtarget0.7750.78590.4779
" ], "text/plain": [ " date time set used target accuracy auc cross entropy\n", "0 2024-09-12 15:15:36 train target 0.9139 0.9686 0.2788\n", "1 2024-09-12 15:34:18 test target 0.775 0.7859 0.4779" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fastprop_score = pipe1.score(container.test)\n", "fastprop_score" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[2K Staging... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K Preprocessing... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:00\n", "\u001b[2K FastProp: Building subfeatures... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 00:04\n", "\u001b[2K Relboost: Building features... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% • 02:01\n", "\u001b[?25h" ] }, { "data": { "text/html": [ "\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
date time set usedtargetaccuracy auccross entropy
02024-09-12 15:33:57traintarget0.97550.99620.1488
12024-09-12 15:36:24testtarget0.80480.83770.4429
" ], "text/plain": [ " date time set used target accuracy auc cross entropy\n", "0 2024-09-12 15:33:57 train target 0.9755 0.9962 0.1488\n", "1 2024-09-12 15:36:24 test target 0.8048 0.8377 0.4429" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "relboost_score = pipe2.score(container.test)\n", "relboost_score" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.6 Studying features" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Column importances__\n", "\n", "Because getML uses relational learning, we can apply the principles we used to calculate the feature importances to individual columns as well.\n", "\n", "As we can see, most of the predictive accuracy is drawn from the roles played by the actors. This suggests that the text fields contained in this relational database have a higher impact on predictive accuracy than for most other data sets." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABl4AAARaCAYAAAAtuQ8oAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAD9nUlEQVR4nOzdfZyVdZ3/8fcMygAqA4oMguSAkDchUpAsptHaJBCldmOg7Q8ltdLMbFJXKlGzDVBzMTVdK03tRsst29JFXZLKJNkkl2601RbEO0BUGMWEZM7vjx7O7gSoDF89jDyfj8d5xLnO91zncw3XA7UX17lqKpVKJQAAAAAAAGyx2moPAAAAAAAA8HohvAAAAAAAABQivAAAAAAAABQivAAAAAAAABQivAAAAAAAABQivAAAAAAAABQivAAAAAAAABQivAAAAAAAABQivAAAAAAAABQivAAAAO284x3vyDve8Y5qj/GqaWxszLHHHlvtMQAAgNcp4QUAADq5P/3pT/nYxz6WwYMHp1u3bunZs2fe9ra35eKLL86f//znao9HYbfcckvOOeecao8BAABswnbVHgAAAOi4m2++OUceeWTq6uoyZcqUDBs2LOvWrcudd96Z008/Pb///e9z5ZVXVnvMrcof//jH1NZ23r+Ddsstt+Syyy4TXwAAYCslvAAAQCe1ePHiTJ48OXvssUd++tOfZrfddmt77ROf+EQefPDB3HzzzVWccOtUV1dX7RE6ZM2aNdlhhx2qPQYAAPAyOu9f8wIAgG3c+eefn2effTbf+MY32kWXFw0ZMiSf+tSn2p6/8MILOe+887Lnnnumrq4ujY2N+exnP5u1a9e+5Od885vfTE1NTZYsWdJu+7x581JTU5N58+a1bXvHO96RYcOGZdGiRRk7dmx69OiRIUOG5MYbb0yS/OxnP8vo0aPTvXv37LXXXvmP//iPdvs855xzUlNTkwcffDDHHntsevXqlfr6+kydOjXPPfdcu7W33357DjrooPTq1Ss77rhj9tprr3z2s5992Z/b397j5cXju/POO3PKKadk1113Ta9evfKxj30s69aty6pVqzJlypT07t07vXv3zhlnnJFKpdL2/iVLlqSmpiYXXnhh/vmf/zl77LFHunfvnrFjx+Z3v/vdBp//05/+NAcffHB22GGH9OrVK4cffnjuu+++jf4c/vCHP+Too49O7969c9BBB+XYY4/NZZddliSpqalpe7zowgsvzIEHHphddtkl3bt3z8iRI9t+9v9XTU1NTj755Nx0000ZNmxY6urq8qY3vSlz5szZYO2jjz6a4447Lv37909dXV0GDRqUE088MevWrWtbs2rVqpx66qkZOHBg6urqMmTIkMyaNSutra3t9nX99ddn5MiR2WmnndKzZ8/st99+ufjii1/mdwwAADoXV7wAAEAn9eMf/ziDBw/OgQce+IrWH3/88bnmmmvywQ9+MJ/5zGdy9913Z8aMGbnvvvvywx/+sNhcTz/9dN7znvdk8uTJOfLII3P55Zdn8uTJ+fa3v51TTz01H//4x3P00UfnggsuyAc/+ME8/PDD2Wmnndrt40Mf+lAGDRqUGTNmZOHChfn617+evn37ZtasWUmS3//+93nPe96T4cOH5wtf+ELq6ury4IMP5pe//GWH5/7kJz+Zfv365dxzz82vfvWrXHnllenVq1fuuuuuvOENb8iXvvSl3HLLLbngggsybNiwTJkypd37r7322jzzzDP5xCc+keeffz4XX3xxDjnkkPz2t79NQ0NDkuQ//uM/MmHChAwePDjnnHNO/vznP+eSSy7J2972tixcuDCNjY3t9nnkkUdm6NCh+dKXvpRKpZI3v/nNeeyxx3L77bfnuuuu2+AYLr744hx22GH58Ic/nHXr1uX666/PkUcemZ/85CeZOHFiu7V33nlnfvCDH+Skk07KTjvtlK985Sv5wAc+kKVLl2aXXXZJkjz22GM54IADsmrVqnz0ox/N3nvvnUcffTQ33nhjnnvuuXTt2jXPPfdcxo4dm0cffTQf+9jH8oY3vCF33XVXpk2blscffzyzZ89O8tdQdtRRR+Wd73xn2+/jfffdl1/+8pftAiEAAHR6FQAAoNNZvXp1JUnl8MMPf0Xr77333kqSyvHHH99u+2mnnVZJUvnpT3/atm3s2LGVsWPHtj2/+uqrK0kqixcvbvfeO+64o5Kkcscdd7R7b5LKd77znbZt999/fyVJpba2tvKrX/2qbfutt95aSVK5+uqr27adffbZlSSVj3zkI+0+633ve19ll112aXv+z//8z5UklSeeeOIVHf//tccee1SOOeaYDY5v3LhxldbW1rbtY8aMqdTU1FQ+/vGPt2174YUXKrvvvnu7n8/ixYsrSSrdu3evPPLII23b77777kqSyqc//em2bSNGjKj07du38uSTT7Zt+6//+q9KbW1tZcqUKRv8HI466qgN5v/EJz5R2dR/yj333HPtnq9bt64ybNiwyiGHHNJue5JK165dKw8++GC7OZJULrnkkrZtU6ZMqdTW1lb+8z//c4PPevFndd5551V22GGHyn//93+3e/3MM8+sdOnSpbJ06dJKpVKpfOpTn6r07Nmz8sILL2x0dgAAeL3wVWMAANAJtbS0JMkGV4psyi233JIkaW5ubrf9M5/5TJIUvRfMjjvumMmTJ7c932uvvdKrV6/ss88+GT16dNv2F3/9P//zPxvs4+Mf/3i75wcffHCefPLJtuPu1atXkuRHP/rRBl9n1VHHHXdcu6/tGj16dCqVSo477ri2bV26dMmoUaM2OvMRRxyRAQMGtD0/4IADMnr06Laf/eOPP5577703xx57bHbeeee2dcOHD8+73vWutnX/19/+HF5O9+7d23799NNPZ/Xq1Tn44IOzcOHCDdY2NTVlzz33bDdHz549246ttbU1N910U9773vdm1KhRG7z/xZ/V97///Rx88MHp3bt3Vq5c2fZoamrK+vXr8/Of/zzJX3/P1qxZk9tvv32zjgkAADob4QUAADqhnj17JkmeeeaZV7T+oYceSm1tbYYMGdJue79+/dKrV6889NBDxWbbfffd2wWMJKmvr8/AgQM32Jb8NRD8rTe84Q3tnvfu3bvd2kmTJuVtb3tbjj/++DQ0NGTy5Mn53ve+t0UR5m8/88X5Njb3xmYeOnToBtve+MY3tt0b58Wf8V577bXBun322ScrV67MmjVr2m0fNGjQKz+AJD/5yU/yd3/3d+nWrVt23nnn7Lrrrrn88suzevXqDdb+7fEmf/05v3hsTzzxRFpaWjJs2LCX/MwHHnggc+bMya677tru0dTUlCRZsWJFkuSkk07KG9/4xkyYMCG77757PvKRj2z0njIAANDZuccLAAB0Qj179kz//v03evP2l/K3QWRL3rN+/fqNbu/Spctmba/8nxvVv9K13bt3z89//vPccccdufnmmzNnzpzccMMNOeSQQ3Lbbbdt8v0vZXPm3tjMr4b/ewXLy/nFL36Rww47LG9/+9vz1a9+Nbvttlu23377XH311fnOd76zwfrN+f14Ka2trXnXu96VM844Y6Ovv/GNb0yS9O3bN/fee29uvfXW/Pu//3v+/d//PVdffXWmTJmSa665ZrM+EwAAtmbCCwAAdFLvec97cuWVV2b+/PkZM2bMS67dY4890tramgceeCD77LNP2/bly5dn1apV2WOPPTb53hevNlm1alW77SWvkumI2travPOd78w73/nOXHTRRfnSl76Uz33uc7njjjvarrZ4LT3wwAMbbPvv//7vNDY2Jknbz/iPf/zjBuvuv//+9OnTJzvssMPLfs6mQti//uu/plu3brn11ltTV1fXtv3qq69+JeNvYNddd03Pnj1fNu7tueeeefbZZ1/Rz7xr165573vfm/e+971pbW3NSSedlH/5l3/JWWedtcHVWAAA0Fn5qjEAAOikzjjjjOywww45/vjjs3z58g1e/9Of/pSLL744SfLud787STJ79ux2ay666KIkycSJEzf5OS/eB+TFe3Ukf73a5corr9yi+bfEU089tcG2ESNGJEnWrl37Gk/zVzfddFMeffTRtucLFizI3XffnQkTJiRJdtttt4wYMSLXXHNNu4j1u9/9Lrfddlvb79HLeTHO/G0I69KlS2pqatpdibRkyZLcdNNNHTqe2traHHHEEfnxj3+cX//61xu8/uKVMR/60Icyf/783HrrrRusWbVqVV544YUkyZNPPrnB/ocPH56ker9nAADwanDFCwAAdFJ77rlnvvOd72TSpEnZZ599MmXKlAwbNizr1q3LXXfdle9///s59thjkyT7779/jjnmmFx55ZVZtWpVxo4dmwULFuSaa67JEUcckb//+7/f5Oe86U1vyt/93d9l2rRpeeqpp7Lzzjvn+uuvb/s/1KvhC1/4Qn7+859n4sSJ2WOPPbJixYp89atfze67756DDjqoKjMNGTIkBx10UE488cSsXbs2s2fPzi677NLuK7guuOCCTJgwIWPGjMlxxx2XP//5z7nkkktSX1+fc8455xV9zsiRI5Mkp5xySsaNG5cuXbpk8uTJmThxYi666KKMHz8+Rx99dFasWJHLLrssQ4YMyaJFizp0TF/60pdy2223ZezYsfnoRz+affbZJ48//ni+//3v584770yvXr1y+umn59/+7d/ynve8J8cee2xGjhyZNWvW5Le//W1uvPHGLFmyJH369Mnxxx+fp556Koccckh23333PPTQQ7nkkksyYsSIdldhAQBAZye8AABAJ3bY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AAAAAKBT6FB4efTRR3PKKaekR48epecBAAAAAADotDoUXsaNG5df//rXpWcBAAAAAADo1DoUXiZOnJjTTz8955xzTv71X/81//Zv/9busbkuu+yyNDY2plu3bhk9enQWLFiwybVf+9rXcvDBB6d3797p3bt3mpqaNlhfqVQyffr07LbbbunevXuamprywAMPbPZcAAAAAAAAm2O7jrzphBNOSJJ84Qtf2OC1mpqarF+//hXv64Ybbkhzc3OuuOKKjB49OrNnz864cePyxz/+MX379t1g/bx583LUUUflwAMPTLdu3TJr1qwceuih+f3vf58BAwYkSc4///x85StfyTXXXJNBgwblrLPOyrhx4/KHP/wh3bp168ghAwAAAAAAvKyaSqVSqeYAo0ePzlvf+tZceumlSZLW1tYMHDgwn/zkJ3PmmWe+7PvXr1+f3r1759JLL82UKVNSqVTSv3//fOYzn8lpp52WJFm9enUaGhryzW9+M5MnT37Zfba0tKS+vj6rV69Oz549t+wAX2caz7y52iNQ0JKZE1/Tz3P+vH681ucOAAAAAFTT5nSDDn3VWCnr1q3LPffck6amprZttbW1aWpqyvz581/RPp577rn85S9/yc4775wkWbx4cZYtW9Zun/X19Rk9evQm97l27dq0tLS0ewAAAAAAAGyuDn3VWJKsWbMmP/vZz7J06dKsW7eu3WunnHLKK9rHypUrs379+jQ0NLTb3tDQkPvvv/8V7eMf//Ef079//7bQsmzZsrZ9/O0+X3ztb82YMSPnnnvuK/o8AAAAAACATelQePnNb36Td7/73XnuueeyZs2a7Lzzzlm5cmV69OiRvn37vuLwsqVmzpyZ66+/PvPmzduie7dMmzYtzc3Nbc9bWloycODAEiMCAAAAAADbkA591dinP/3pvPe9783TTz+d7t2751e/+lUeeuihjBw5MhdeeOEr3k+fPn3SpUuXLF++vN325cuXp1+/fi/53gsvvDAzZ87MbbfdluHDh7dtf/F9m7PPurq69OzZs90DAAAAAABgc3UovNx77735zGc+k9ra2nTp0iVr167NwIEDc/755+ezn/3sK95P165dM3LkyMydO7dtW2tra+bOnZsxY8Zs8n3nn39+zjvvvMyZMyejRo1q99qgQYPSr1+/dvtsaWnJ3Xff/ZL7BAAAAAAA2FId+qqx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eVatWlXtUQAAYKsmvLBN22677fLxj388zz//fLVHoZO64447qj0CsI1atWpVvv71r2fatGl56qmnkiQLFy7Mo48+WuXJ2Nodc8wx+fnPf17tMeiEunTpkkMPPTRPP/10tUehE3vhhRfyH//xH/mXf/mXPPPMM0mSxx57LM8++2yVJ6MzePDBB3Prrbfmz3/+c5KkUqlUeSJgW+HPHzbXdtUeAKrtgAMOyL333ps99tij2qPQCY0fPz677757pk6dmmOOOSYDBw6s9kh0IpVKJTfeeGPuuOOOrFixIq2tre1e/8EPflClydjaLVq0KE1NTamvr8+SJUtywgknZOedd84PfvCDLF26NNdee221R2Qrtnr16jQ1NWWPPfZo++fXgAEDqj0WncSwYcPyP//zPxk0aFC1R6ETeuihhzJ+/PgsXbo0a9euzbve9a7stNNOmTVrVtauXZsrrrii2iOylXryySczadKk/PSnP01NTU0eeOCBDB48OMcdd1x69+6dL3/5y9Ueka3cAw88sMn/7po+fXqVpqIz8OcPHeWKF7Z5J510Upqbm3PppZdm/vz5WbRoUbsHvJRHH300J598cm688cYMHjw448aNy/e+972sW7eu2qPRCZx66qn5f//v/2Xx4sXZcccdU19f3+4Bm9Lc3Jxjjz02DzzwQLp169a2/d3vfrcrGXhZN910Ux599NGceOKJueGGG9LY2JgJEybkxhtvzF/+8pdqj8dW7otf/GJOO+20/OQnP8njjz+elpaWdg94KZ/61KcyatSoPP300+nevXvb9ve9732ZO3duFSdja/fpT3862223XZYuXZoePXq0bZ80aVLmzJlTxcnoDL72ta9ln332yfTp03PjjTfmhz/8YdvjpptuqvZ4bOX8+UNH1VRcF8U2rrZ2w/5YU1OTSqWSmpqarF+/vgpT0RktXLgwV199db773e8mSY4++ugcd9xx2X///as8GVurnXfeOd/61rfy7ne/u9qj0MnU19dn4cKF2XPPPbPTTjvlv/7rvzJ48OA89NBD2WuvvXyFJpvlxX9+ff3rX8+OO+6Yf/iHf8hJJ52UoUOHVns0tkL/99+da2pq2n7t3515JXbZZZfcdddd2Wuvvdr982vJkiXZd99989xzz1V7RLZS/fr1y6233pr999+/3bnzP//zPxk+fLivquMl7bHHHjnp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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "names, importances = pipe1.columns.importances()\n", "\n", "plt.subplots(figsize=(20, 10))\n", "\n", "plt.bar(names, importances)\n", "\n", "plt.title(\"Columns importances\")\n", "plt.xlabel(\"Columns\")\n", "plt.ylabel(\"Importances\")\n", "plt.xticks(rotation=\"vertical\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABl4AAARaCAYAAAAtuQ8oAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzde5yXdZ3//+cMyoAHBhQdDrIOiHkIkRaSpTRamwSXPGxlYP0WJA+lmdl4WKkEzVZAzcXUdLU0tYOubbnf0sVsksoi2TTWDuaqK+FpBrFgFBNW5vP7o5tTs4DK+NaPA/f77XbdYq7P+7o+r2uubt7Uh9fnU1OpVCoBAAAAAADgVaut9gAAAAAAAABbCuEFAAAAAACgEOEFAAAAAACgEOEFAAAAAACgEOEFAAAAAACgEOEFAAAAAACgEOEFAAAAAACgEOEFAAAAAACgEOEFAAAAAACgEOEFAADo4p3vfGfe+c53VnuM10xjY2OOOeaYao8BAABsoYQXAADo4R5++OF85CMfyYgRI9KnT5/069cvb3/723PJJZfkj3/8Y7XHo7Dbbrst55xzTrXHAAAANmGbag8AAAB036233pqjjjoqdXV1mT59ekaNGpV169blrrvuyhlnnJFf//rXueqqq6o95hvKAw88kNranvvfoN122225/PLLxRcAAHiDEl4AAKCHeuSRRzJt2rTsvvvu+cEPfpDBgwd3vvaxj30sDz30UG699dYqTvjGVFdXV+0RumXNmjXZfvvtqz0GAADwMnruf+YFAABbuQsuuCDPPvtsvvzlL3eJLi8aOXJkPvGJT3T+/MILL+S8887LHnvskbq6ujQ2NuZTn/pU1q5d+5Lv85WvfCU1NTVZtmxZl/2LFi1KTU1NFi1a1Lnvne98Z0aNGpX77rsvEydOzHbbbZeRI0fmm9/8ZpLkhz/8YcaPH5++fftmr732yve///0u5zznnHNSU1OThx56KMccc0z69++f+vr6zJw5M88991yXtXfccUcOPPDA9O/fPzvssEP22muvfOpTn3rZ39v//Y6XF6/vrrvuyimnnJJddtkl/fv3z0c+8pGsW7cuq1atyvTp0zNgwIAMGDAgZ555ZiqVSufxy5YtS01NTS666KL88z//c3bffff07ds3EydOzK9+9asN3v8HP/hBDjrooGy//fbp379/jjjiiNx///0b/T385je/yQc/+MEMGDAgBx54YI455phcfvnlSZKamprO7UUXXXRR3va2t2XnnXdO3759M3bs2M7f/V+qqanJySefnFtuuSWjRo1KXV1d3vzmN2fhwoUbrH388cdz7LHHZsiQIamrq8vw4cNz4oknZt26dZ1rVq1alVNPPTXDhg1LXV1dRo4cmfnz56ejo6PLuW688caMHTs2O+64Y/r165f99tsvl1xyycvcMQAA6Fk88QIAAD3Ud77znYwYMSJve9vbXtH64447Ltddd13e//7357TTTsvdd9+duXPn5v7778+3v/3tYnP94Q9/yHve855MmzYtRx11VK644opMmzYtX/va13Lqqafmox/9aD74wQ/mwgsvzPvf//48+uij2XHHHbuc4wMf+ECGDx+euXPn5t57782XvvSl7Lrrrpk/f36S5Ne//nXe8573ZPTo0fnsZz+burq6PPTQQ/nJT37S7bk//vGPZ9CgQTn33HPzs5/9LFdddVX69++fn/70p/mrv/qrnH/++bntttty4YUXZtSoUZk+fXqX46+//vo888wz+djHPpbnn38+l1xySQ4++OD88pe/TENDQ5Lk+9//fg499NCMGDEi55xzTv74xz/m0ksvzdvf/vbce++9aWxs7HLOo446KnvuuWfOP//8VCqVvOUtb8kTTzyRO+64IzfccMMG13DJJZfk8MMPz4c+9KGsW7cuN954Y4466qh897vfzZQpU7qsveuuu/Ktb30rJ510Unbcccd84QtfyPve974sX748O++8c5LkiSeeyAEHHJBVq1blhBNOyN57753HH3883/zmN/Pcc8+ld+/eee655zJx4sQ8/vjj+chHPpK/+qu/yk9/+tPMmjUrTz75ZBYsWJDkT6Hs6KOPzrve9a7O+3j//ffnJz/5SZdACAAAPV4FAADocVavXl1JUjniiCNe0fqlS5dWklSOO+64LvtPP/30SpLKD37wg859EydOrEycOLHz52uvvbaSpPLII490OfbOO++sJKnceeedXY5NUvn617/eue+3v/1tJUmltra28rOf/axz/+23315JUrn22ms7982ZM6eSpPLhD3+4y3v9/d//fWXnnXfu/Pmf//mfK0kqTz311Cu6/r+0++67V2bMmLHB9U2aNKnS0dHRuX/ChAmVmpqaykc/+tHOfS+88EJlt9126/L7eeSRRypJKn379q089thjnfvvvvvuSpLKJz/5yc59Y8aMqey6666Vp59+unPff/3Xf1Vqa2sr06dP3+D3cPTRR28w/8c+9rHKpv5R7rnnnuvy87p16yqjRo2qHHzwwV32J6n07t278tBDD3WZI0nl0ksv7dw3ffr0Sm1tbeU///M/N3ivF39X5513XmX77bev/Pd//3eX188666xKr169KsuXL69UKpXKJz7xiUq/fv0qL7zwwkZnBwCALYWPGgMAgB6ovb09STZ4UmRTbrvttiRJc3Nzl/2nnXZakhT9Lpgddtgh06ZN6/x5r732Sv/+/bPPPvtk/Pjxnftf/PP//M//bHCOj370o11+Puigg/L00093Xnf//v2TJP/+7/++wcdZddexxx7b5WO7xo8fn0qlkmOPPbZzX69evTJu3LiNznzkkUdm6NChnT8fcMABGT9+fOfv/sknn8zSpUtzzDHHZKeddupcN3r06Lz73e/uXPeX/u/v4eX07du3889/+MMfsnr16hx00EG59957N1jb1NSUPfbYo8sc/fr167y2jo6O3HLLLTnssMMybty4DY5/8Xd1880356CDDsqAAQOycuXKzq2pqSnr16/Pj370oyR/umdr1qzJHXfcsVnXBAAAPY3wAgAAPVC/fv2SJM8888wrWv+73/0utbW1GTlyZJf9gwYNSv/+/fO73/2u2Gy77bZbl4CRJPX19Rk2bNgG+5I/BYL/66/+6q+6/DxgwIAua6dOnZq3v/3tOe6449LQ0JBp06blX//1X19VhPm/7/nifBube2Mz77nnnhvse9Ob3tT53Tgv/o732muvDdbts88+WblyZdasWdNl//Dhw1/5BST57ne/m7/5m79Jnz59stNOO2WXXXbJFVdckdWrV2+w9v9eb/Kn3/OL1/bUU0+lvb09o0aNesn3fPDBB7Nw4cLssssuXbampqYkyYoVK5IkJ510Ut70pjfl0EMPzW677ZYPf/jDG/1OGQAA6Ol8xwsAAPRA/fr1y5AhQzb65e0v5f8GkVdzzPr16ze6v1evXpu1v/IXX1T/Stf27ds3P/rRj3LnnXfm1ltvzcKFC3PTTTfl4IMPzve+971NHv9SNmfujc38WvjLJ1hezo9//OMcfvjhecc73pEvfvGLGTx4cLbddttce+21+frXv77B+s25Hy+lo6Mj7373u3PmmWdu9PU3velNSZJdd901S5cuze23357/+I//yH/8x3/k2muvzfTp03Pddddt1nsCAMAbmfACAAA91Hve855cddVVWbx4cSZMmPCSa3ffffd0dHTkwQcfzD777NO5v62tLatWrcruu+++yWNffNpk1apVXfaXfEqmO2pra/Oud70r73rXu3LxxRfn/PPPz6c//enceeednU9bvJ4efPDBDfb993//dxobG5Ok83f8wAMPbLDut7/9bQYOHJjtt9/+Zd9nUyHs3/7t39KnT5/cfvvtqaur69x/7bXXvpLxN7DLLrukX79+Lxv39thjjzz77LOv6Hfeu3fvHHbYYTnssMPS0dGRk046Kf/yL/+Ss88+e4OnsQAAoKfyUWMAANBDnXnmmdl+++1z3HHHpa2tbYPXH3744VxyySVJkr/7u79LkixYsKDLmosvvjhJMmXKlE2+z4vfA/Lid3Ukf3ra5aqrrnpV878av//97zfYN2bMmCTJ2rVrX+dp/uSWW27J448/3vnzkiVLcvfdd+fQQw9NkgwePDhjxozJdddd1yVi/epXv8r3vve9znv0cl6MM/83hPXq1Ss1NTVdnkRatmxZbrnllm5dT21tbY488sh85zvfyc9//vMNXn/xyZgPfOADWbx4cW6//fYN1qxatSovvPBCkuTpp5/e4PyjR49OUr17BgAArwVPvAAAQA+1xx575Otf/3qmTp2affbZJ9OnT8+oUaOybt26/PSnP83NN9+cY445Jkmy//77Z8aMGbnqqquyatWqTJw4MUuWLMl1112XI488Mn/7t3+7yfd585vfnL/5m7/JrFmz8vvf/z477bRTbrzxxs5/oV4Nn/3sZ/OjH/0oU6ZMye67754VK1bki1/8YnbbbbcceOCBVZlp5MiROfDAA3PiiSdm7dq1WbBgQXbeeecuH8F14YUX5tBDD82ECRNy7LHH5o9//GMuvfTS1NfX55xzznlF7zN27NgkySmnnJJJkyalV69emTZtWqZMmZKLL744kydPzgc/+MGsWLEil19+eUaOHJn77ruvW9d0/vnn53vf+14mTpyYE044Ifvss0+efPLJ3HzzzbnrrrvSv3//nHHGGfl//+//5T3veU+OOeaYjB07NmvWrMkvf/nLfPOb38yyZcsycODAHHfccfn973+fgw8+OLvttlt+97vf5dJLL82YMWO6PIUF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70ySTJs2rXPtfvvtl9GjR2ePPfbIokWL8q53vWuD882aNSvNzc2dP7e3t2fYsGGv+XUAAAAAAABblqqGl4EDB6ZXr15pa2vrsr+trS2DBg3a5HG1tbUZOXJkkmTMmDG5//77M3fu3M7w8n+NGDEiAwcOzEMPPbTR8FJXV5e6urruXwgAAAAAAECq/B0vvXv3ztixY9PS0tK5r6OjIy0tLZkwYcIrPk9HR0fWrl27ydcfe+yxPP300xk8ePCrmhcAAAAAAOClVP2jxpqbmzNjxoyMGzcuBxxwQBYsWJA1a9Zk5syZSZLp06dn6NChmTt3bpI/fR/LuHHjsscee2Tt2rW57bbbcsMNN+SKK65Ikjz77LM599xz8773vS+DBg3Kww8/nDPPPDMjR47MpEmTqnadAAAAAADAlq/q4WXq1Kl56qmnMnv27LS2tmbMmDFZuHBhGhoakiTLly9Pbe2fH8xZs2ZNTjrppDz22GPp27dv9t5773z1q1/N1KlTkyS9evXKfffdl+uuuy6rVq3KkCFDcsghh+S8887zcWIAAAAAAMBrqqZSqVSqPcQbTXt7e+rr67N69er069ev2uO8oTSedWu1R9jiLZs3pdojAAAAAADwFzanG1T1O14AAAAAAAC2JMILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIcILAAAAAABAIW+I8HL55ZensbExffr0yfjx47NkyZJNrv3Wt76VcePGpX///tl+++0zZsyY3HDDDV3WVCqVzJ49O4MHD07fvn3T1NSUBx988LW+DAAAAAAAYCtX9fBy0003pbm5OXPmzMm9996b/fffP5MmTcqKFSs2un6nnXbKpz/96SxevDj33XdfZs6cmZkzZ+b222/vXHPBBRfkC1/4Qq688srcfffd2X777TNp0qQ8//zzr9dlAQAAAAAAW6GaSqVSqeYA48ePz1vf+tZcdtllSZKOjo4MGzYsH//4x3PWWWe9onP89V//daZMmZLzzjsvlUolQ4YMyWmnnZbTTz89SbJ69eo0NDTkK1/5SqZNm/ay52tvb099fX1Wr16dfv36df/itkCNZ91a7RG2eMvmTan2CAAAAAAA/IXN6QZVfeJl3bp1ueeee9LU1NS5r7a2Nk1NTVm8ePHLHl+pVNLS0pIHHngg73jHO5IkjzzySFpbW7ucs76+PuPHj9/kOdeuXZv29vYuGwAAAAAAwOaqanhZuXJl1q9fn4aGhi77Gxoa0trausnjVq9enR122CG9e/fOlClTcumll+bd7353knQetznnnDt3burr6zu3YcOGvZrLAgAAAAAAtlJV/46X7thxxx2zdOnS/Od//mf+6Z/+Kc3NzVm0aFG3zzdr1qysXr26c3v00UfLDQsAAAAAAGw1tqnmmw8cODC9evVKW1tbl/1tbW0ZNGjQJo+rra3NyJEj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AAAAAAAAChFeAAAAAAAAChFeAAAAAAAAChFeAAAAAAAAChFeAAAAAAAAChFeAAAAAAAAChFeAAAAAAAAChFeAAAAAAAAChFeAAAAAAAACtmm2gMAr4/Gs26t9ghbtGXzplR7BAAAAADgDcATLwAAAAAAAIUILwAAAAAAAIUILwAAAAAAAIUILwAAAAAAAIUILwAAAAAAAIUILwAAAAAAAIUILwAAAAAAAIUILwAAAAAAAIUILwAAAAAAAIUILwAAAAAAAIUILwAAAAAAAIUILwAAAAAAAIUILwAAAAAAAIVsU+0BANi0xrNurfYIW7Rl86ZUewQAAAAAtjCeeAEAAAAAAChEeAEAAAAAAChEeAEAAAAAAChEeAEAAAAAAChEeAEAAAAAAChEeAEAAAAAAChEeAEAAAAAAChEeAEAAAAAAChEeAEAAAAAACik6uHl8ssvT2NjY/r06ZPx48dnyZIlm1z761//Ou973/vS2NiYmpqaLFiwYIM155xzTmpqarpse++992t4BQAAAAAAAH9S1fBy0003pbm5OXPmzMm9996b/fffP5MmTcqKFSs2uv65557LiBEjMm/evAwaNGiT533zm9+cJ598snO76667XqtLAAAAAAAA6FTV8HLxxRfn+OOPz8yZM7PvvvvmyiuvzHbbbZdrrrlmo+vf+ta35sILL8y0adNSV1e3yfNus802GTRoUOc2cODA1+oSAAAAAAAAOlUtvKxbty733HNPmpqa/jxMbW2ampqyePHiV3XuBx98MEOGDMmIESPyoQ99KMuXL3/J9WvXrk17e3uXDQAAAAAAYHNVLbysXLky69evT0NDQ5f9DQ0NaW1t7fZ5x48fn6985StZuHBhrrjiijzyyCM56KCD8swzz2zymLlz56a+vr5zGzZsWLffHwAAAAAA2HpV9aPGXguHHnpojjrqqIwePTqTJk3KbbfdllWrVuVf//VfN3nMrFmzsnr16s7t0UcffR0nBgAAAAAAthTbVOuNBw4cmF69eqWtra3L/ra2tgwaNKjY+/Tv3z9vetOb8tBDD21yTV1d3Ut+ZwwAAAAAAMArUbUnXnr37p2xY8empaWlc19HR0daWloyYcKEYu/z7LPP5uGHH87gwYOLnRMAAAAAAGBjqvbES5I0NzdnxowZGTduXA444IAsWLAga9asycyZM5Mk06dPz9Ch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9evXTz/++KPS09M1b948HTlyxOiIAAAAAO5hnHgBAAAA4FLmzp0rk8mkf/3rX5owYYJ69OihPn36aOHChfrss88kSV9//bV+8YtfqHXr1rJarYqKitKZM2du+u8cPny4FixYUOva448/rqeeesr+OjAwUG+88Yaio6PVunVrdenSRWlpaTp79qz99woJCdEXX3xh/zVJSUny9fVVenq6goOD1bp1a40cOVKFhYX2e/bu3auwsDB5eXnJ19dX4eHhOnnyZMP8nwUAAACgyVF4AQAAAOAyiouLtXPnTs2bN09eXl7Xve/r66vq6mr94he/UHFxsT755BPt2rVLx48f1+TJk+/693/nnXcUHh6ugwcPavTo0Zo+fbqio6M1bdo0ffnll7r//vsVHR0tm81m/zXl5eVasWKFPvjgA/3973/X119/rRdeeEGSVFVVpccff1zDhg1TTk6O9u3bp9mzZ8tkMt11VgAAAADGoNUYAAAAAJfx73//WzabTb169brpPXv27NGhQ4d04sQJde7cWZK0ceNG9enTR59//rlCQ0Pv+PePjIzUs88+K0launSp3nvvPYWGhmrSpEmSpMWLF2vw4ME6c+aM7rvvPknSjz/+qHXr1un++++XJP3617/W66+/LkkqLS3V999/rzFjxtjfDw4OvuN8AAAAAIzHiRcAAAAALuPakyQ3k5+fr86dO9uLLpLUu3dv+fr6Kj8//65+/5CQEPv/7tChgySpX79+11377rvv7NdatWplL6pIUkBAgP19Pz8/PfXUU4qIiNDYsWP1hz/8oVYbMgAAAACuh8ILAAAAAJfRvXt3mUwmHTlypEH/vWaz+bqizo8//njdfc2bN7f/75p2YDe6Vl1dfcNfU3PPtb/X+++/r3379umRRx7Rhx9+qB49ethn1QAAAABwPRReAAAAALgMPz8/RUREaM2aNbp06dJ175eUlCg4OFinTp3SqVOn7Nfz8vJUUlKi3r173/Df265du1onTa5cuaLDhw83/H/ATfTv318vvvii/s//+T/q27evNm/e3GS/NwAAAICGReEFAAAAgEtZs2aNrly5orCwMG3ZskUFBQXKz8/Xu+++q8GDB2vEiBHq16+fnnjiCX355Zf617/+pejoaA0bNkwPPfTQDf+dP/vZz/Txxx/r448/1pEjR/SrX/1KJSUljf7fcuLECb344ovat2+fTp48qYyMDBUUFDDnBQAAAHBhzYwOAAAAAAC3IygoSF9++aXi4uL0m9/8RoWFhWrXrp0GDhyo9957TyaTSX/96181f/58DR06VGazWSNHjtT//M//3PTfOXPmTGVnZys6OlrNmjXT888/r//6r/9q9P+WVq1a6ciRI0pOTtb58+cVEBCgefPm6dlnn2303xsAAABA4zDZHJlOCQAAAAAAAAAAgFui1RgAAAAAAAAAAEADofACAAAAAAAAAADQQCi8AAAAAAAAAAAANBAKLwAAAAAAAAAAAA2EwgsAAAAAAAAAAEADofACAAAAAAAAAADQQCi8AAAAAAAAAAAANBAKLwAAAAAAAAAAAA2EwgsAAAAAAAAAAEADofACAAAAAAAAAADQQCi8AAAAAAAAAAAANBAKLwAAAAAAAAAAAA3k/wKllhLl/ju9lgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "names, importances = pipe2.columns.importances()\n", "\n", "plt.subplots(figsize=(20, 10))\n", "\n", "plt.bar(names, importances)\n", "\n", "plt.title(\"Columns importances\")\n", "plt.xlabel(\"Columns\")\n", "plt.ylabel(\"Importances\")\n", "plt.xticks(rotation=\"vertical\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.7 Features\n", "\n", "The most important features look as follows:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "```sql\n", "DROP TABLE IF EXISTS \"FEATURE_1_155\";\n", "\n", "CREATE TABLE \"FEATURE_1_155\" AS\n", "SELECT MEDIAN( COALESCE( f_1_1_76.\"feature_1_1_76\", 0.0 ) ) AS \"feature_1_155\",\n", " t1.rowid AS rownum\n", "FROM \"USERS__STAGING_TABLE_1\" t1\n", "INNER JOIN \"U2BASE__STAGING_TABLE_4\" t2\n", "ON t1.\"userid\" = t2.\"userid\"\n", "LEFT JOIN \"FEATURE_1_1_76\" f_1_1_76\n", "ON t2.rowid = f_1_1_76.rownum\n", "GROUP BY t1.rowid;\n", "```" ], "text/plain": [ "'DROP TABLE IF EXISTS \"FEATURE_1_155\";\\n\\nCREATE TABLE \"FEATURE_1_155\" AS\\nSELECT MEDIAN( COALESCE( f_1_1_76.\"feature_1_1_76\", 0.0 ) ) AS \"feature_1_155\",\\n t1.rowid AS rownum\\nFROM \"USERS__STAGING_TABLE_1\" t1\\nINNER JOIN \"U2BASE__STAGING_TABLE_4\" t2\\nON t1.\"userid\" = t2.\"userid\"\\nLEFT JOIN \"FEATURE_1_1_76\" f_1_1_76\\nON t2.rowid = f_1_1_76.rownum\\nGROUP BY t1.rowid;'" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe1.features.to_sql()[pipe1.features.sort(by=\"importances\")[0].name]" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "```sql\n", "DROP TABLE IF EXISTS \"FEATURE_1_1\";\n", "\n", "CREATE TABLE \"FEATURE_1_1\" AS\n", "SELECT AVG( \n", " CASE\n", " WHEN ( p_1_1.\"feature_1_1_76\" > 0.241788 ) AND ( p_1_1.\"feature_1_1_91\" > 0.007531 ) AND ( t2.\"t3__year\" > 3.000000 ) THEN -14.47282772262984\n", " WHEN ( p_1_1.\"feature_1_1_76\" > 0.241788 ) AND ( p_1_1.\"feature_1_1_91\" > 0.007531 ) AND ( t2.\"t3__year\" <= 3.000000 OR t2.\"t3__year\" IS NULL ) THEN 18.80608436507123\n", " WHEN ( p_1_1.\"feature_1_1_76\" > 0.241788 ) AND ( p_1_1.\"feature_1_1_91\" <= 0.007531 OR p_1_1.\"feature_1_1_91\" IS NULL ) AND ( t2.\"t3__year__mapping_1_target_1_avg\" > 0.250270 ) THEN 17.15219491452244\n", " WHEN ( p_1_1.\"feature_1_1_76\" > 0.241788 ) AND ( p_1_1.\"feature_1_1_91\" <= 0.007531 OR p_1_1.\"feature_1_1_91\" IS NULL ) AND ( t2.\"t3__year__mapping_1_target_1_avg\" <= 0.250270 OR t2.\"t3__year__mapping_1_target_1_avg\" IS NULL ) THEN 7.625903043390911\n", " WHEN ( p_1_1.\"feature_1_1_76\" <= 0.241788 OR p_1_1.\"feature_1_1_76\" IS NULL ) AND ( p_1_1.\"feature_1_1_40\" > 0.251831 ) AND ( p_1_1.\"feature_1_1_58\" > 2.309180 ) THEN -9.39027739930436\n", " WHEN ( p_1_1.\"feature_1_1_76\" <= 0.241788 OR p_1_1.\"feature_1_1_76\" IS NULL ) AND ( p_1_1.\"feature_1_1_40\" > 0.251831 ) AND ( p_1_1.\"feature_1_1_58\" <= 2.309180 OR p_1_1.\"feature_1_1_58\" IS NULL ) THEN -3.045979108396568\n", " WHEN ( p_1_1.\"feature_1_1_76\" <= 0.241788 OR p_1_1.\"feature_1_1_76\" IS NULL ) AND ( p_1_1.\"feature_1_1_40\" <= 0.251831 OR p_1_1.\"feature_1_1_40\" IS NULL ) AND ( p_1_1.\"feature_1_1_73\" > 0.009437 ) THEN 0.007265281402375446\n", " WHEN ( p_1_1.\"feature_1_1_76\" <= 0.241788 OR p_1_1.\"feature_1_1_76\" IS NULL ) AND ( p_1_1.\"feature_1_1_40\" <= 0.251831 OR p_1_1.\"feature_1_1_40\" IS NULL ) AND ( p_1_1.\"feature_1_1_73\" <= 0.009437 OR p_1_1.\"feature_1_1_73\" IS NULL ) THEN -3.672817201353017\n", " ELSE NULL\n", " END\n", ") AS \"feature_1_1\",\n", " t1.rowid AS rownum\n", "FROM \"USERS__STAGING_TABLE_1\" t1\n", "INNER JOIN \"U2BASE__STAGING_TABLE_4\" t2\n", "ON t1.\"userid\" = t2.\"userid\"\n", "LEFT JOIN \"FEATURES_1_1_PROPOSITIONALIZATION\" p_1_1\n", "ON t2.rowid = p_1_1.\"rownum\"\n", "GROUP BY t1.rowid;\n", "```" ], "text/plain": [ "'DROP TABLE IF EXISTS \"FEATURE_1_1\";\\n\\nCREATE TABLE \"FEATURE_1_1\" AS\\nSELECT AVG( \\n CASE\\n WHEN ( p_1_1.\"feature_1_1_76\" > 0.241788 ) AND ( p_1_1.\"feature_1_1_91\" > 0.007531 ) AND ( t2.\"t3__year\" > 3.000000 ) THEN -14.47282772262984\\n WHEN ( p_1_1.\"feature_1_1_76\" > 0.241788 ) AND ( p_1_1.\"feature_1_1_91\" > 0.007531 ) AND ( t2.\"t3__year\" <= 3.000000 OR t2.\"t3__year\" IS NULL ) THEN 18.80608436507123\\n WHEN ( p_1_1.\"feature_1_1_76\" > 0.241788 ) AND ( p_1_1.\"feature_1_1_91\" <= 0.007531 OR p_1_1.\"feature_1_1_91\" IS NULL ) AND ( t2.\"t3__year__mapping_1_target_1_avg\" > 0.250270 ) THEN 17.15219491452244\\n WHEN ( p_1_1.\"feature_1_1_76\" > 0.241788 ) AND ( p_1_1.\"feature_1_1_91\" <= 0.007531 OR p_1_1.\"feature_1_1_91\" IS NULL ) AND ( t2.\"t3__year__mapping_1_target_1_avg\" <= 0.250270 OR t2.\"t3__year__mapping_1_target_1_avg\" IS NULL ) THEN 7.625903043390911\\n WHEN ( p_1_1.\"feature_1_1_76\" <= 0.241788 OR p_1_1.\"feature_1_1_76\" IS NULL ) AND ( p_1_1.\"feature_1_1_40\" > 0.251831 ) AND ( p_1_1.\"feature_1_1_58\" > 2.309180 ) THEN -9.39027739930436\\n WHEN ( p_1_1.\"feature_1_1_76\" <= 0.241788 OR p_1_1.\"feature_1_1_76\" IS NULL ) AND ( p_1_1.\"feature_1_1_40\" > 0.251831 ) AND ( p_1_1.\"feature_1_1_58\" <= 2.309180 OR p_1_1.\"feature_1_1_58\" IS NULL ) THEN -3.045979108396568\\n WHEN ( p_1_1.\"feature_1_1_76\" <= 0.241788 OR p_1_1.\"feature_1_1_76\" IS NULL ) AND ( p_1_1.\"feature_1_1_40\" <= 0.251831 OR p_1_1.\"feature_1_1_40\" IS NULL ) AND ( p_1_1.\"feature_1_1_73\" > 0.009437 ) THEN 0.007265281402375446\\n WHEN ( p_1_1.\"feature_1_1_76\" <= 0.241788 OR p_1_1.\"feature_1_1_76\" IS NULL ) AND ( p_1_1.\"feature_1_1_40\" <= 0.251831 OR p_1_1.\"feature_1_1_40\" IS NULL ) AND ( p_1_1.\"feature_1_1_73\" <= 0.009437 OR p_1_1.\"feature_1_1_73\" IS NULL ) THEN -3.672817201353017\\n ELSE NULL\\n END\\n) AS \"feature_1_1\",\\n t1.rowid AS rownum\\nFROM \"USERS__STAGING_TABLE_1\" t1\\nINNER JOIN \"U2BASE__STAGING_TABLE_4\" t2\\nON t1.\"userid\" = t2.\"userid\"\\nLEFT JOIN \"FEATURES_1_1_PROPOSITIONALIZATION\" p_1_1\\nON t2.rowid = p_1_1.\"rownum\"\\nGROUP BY t1.rowid;'" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe2.features.to_sql()[pipe2.features.sort(by=\"importances\")[0].name]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.8 Productionization\n", "\n", "It is possible to productionize the pipeline by transpiling the features into production-ready SQL code. Please also refer to getML's `sqlite3` and `spark` modules." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "# Creates a folder named movie_lens_pipeline containing\n", "# the SQL code.\n", "pipe2.features.to_sql().save(\"movie_lens_pipeline\")" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "pipe2.features.to_sql(dialect=getml.pipeline.dialect.spark_sql).save(\"movie_lens_spark\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.9 Benchmarks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "State-of-the-art approaches on this dataset perform as follows:\n", "\n", "\n", "| Approach | Study | Accuracy | AUC |\n", "| :------------------------------ | :------------------------- | -----------: | ------: |\n", "| Probabalistic Relational Model | Ghanem (2009) | -- | 69.2% |\n", "| Multi-Relational Bayesian Network | Schulte and Khosravi (2012) | 69% | -- |\n", "| Multi-Relational Bayesian Network | Schulte et al (2013) | 66% | -- |\n", "\n", "\n", "By contrast, getML's algorithms, as used in this notebook, perform as follows:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ApproachAccuracyAUC
0FastProp77.5%78.6%
1Relboost80.5%83.8%
\n", "
" ], "text/plain": [ " Approach Accuracy AUC\n", "0 FastProp 77.5% 78.6%\n", "1 Relboost 80.5% 83.8%" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scores = [fastprop_score, relboost_score]\n", "pd.DataFrame(\n", " data={\n", " \"Approach\": [\"FastProp\", \"Relboost\"],\n", " \"Accuracy\": [f\"{score.accuracy:.1%}\" for score in scores],\n", " \"AUC\": [f\"{score.auc:,.1%}\" for score in scores],\n", " }\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "getml.engine.shutdown()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. Conclusion\n", "\n", "In this notebook we have demonstrated how getML can be applied to the MovieLens dataset. We have demonstrated the our approach outperforms state-of-the-art relational learning algorithms." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References\n", "\n", "Motl, Jan, and Oliver Schulte. \"The CTU prague relational learning repository.\" arXiv preprint arXiv:1511.03086 (2015).\n", "\n", "Ghanem, Amal S. \"Probabilistic models for mining imbalanced relational data.\" Doctoral dissertation, Curtin University (2009).\n", "\n", "Schulte, Oliver, and Hassan Khosravi. \"Learning graphical models for relational data via lattice search.\" Machine Learning 88.3 (2012): 331-368.\n", "\n", "Schulte, Oliver, et al. \"A hierarchy of independence assumptions for multi-relational Bayes net classifiers.\" 2013 IEEE Symposium on Computational Intelligence and Data Mining (CIDM). IEEE, 2013.\n" ] } ], "metadata": { "jupytext": { "encoding": "# -*- coding: utf-8 -*-", "formats": "ipynb,py:percent,md" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.4" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 4 }