In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
\n",
+ "
\n",
+ " \n",
+ " Parameters\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
missing_only
\n",
+ "
True
\n",
+ "
\n",
+ " \n",
+ "\n",
+ "
\n",
+ "
\n",
+ "
variables
\n",
+ "
['company', 'agent', ...]
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 11
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In dem wir die Add Missing Indicator Umformung durchführen verändern wir die Form unseres Datensatzes. Dies können wir mit folgendem Befehl sehen. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2026-06-05T12:30:44.632219233Z",
+ "start_time": "2026-06-05T12:30:44.433361527Z"
+ }
+ },
+ "source": [
+ "print(f\"Form of the dataset before transformation: {df.shape}\")\n",
+ "# transform \n",
+ "df = addBinary_imputer.transform(df)\n",
+ "print(f\"Form of the dataset after transformation: {df.shape}\")"
+ ],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Form of the dataset before transformation: (119390, 28)\n",
+ "Form of the dataset after transformation: (119390, 32)\n"
+ ]
+ }
+ ],
+ "execution_count": 12
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Um zu verdeutlichen, dass die Variablen `agent` und `company` eine andere Bedeutung haben, werden wir diese umbenennen."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2026-06-05T12:30:44.737369925Z",
+ "start_time": "2026-06-05T12:30:44.643084959Z"
+ }
+ },
+ "source": [
+ "# Rename columns using rename()\n",
+ "df = df.rename(columns={'agent_na': 'Not_agent_booking', 'company_na': 'Not_company_booking'})"
+ ],
+ "outputs": [],
+ "execution_count": 13
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Da wir mit den Variablen `agent` und `company` nicht weiterarbeiten werden, löschen wir sie nun."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2026-06-05T12:30:44.869111695Z",
+ "start_time": "2026-06-05T12:30:44.751575472Z"
+ }
+ },
+ "source": [
+ "df = df.drop(columns=['agent','company'])\n",
+ "print(f\"Shape of data frame after remove of variables: {df.shape}\")"
+ ],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Shape of data frame after remove of variables: (119390, 30)\n"
+ ]
+ }
+ ],
+ "execution_count": 14
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Numerische Variablen Imputation"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Im nächsten Schritt soll die numerische Variable `children` aufgefüllt werden. Viele Hotelbuchungen erfolgen ohne Kinder, was auch durch die deskriptiven Statistiken bestätigt wird, da der Median dieser Variable bei Null liegt. Aus diesem Grund werden die fehlenden Werte in der Variable `children` mit dem Median ersetzt.\n",
+ "\n",
+ "Da nur die Variable `children` aufgefüllt werden soll, nicht jedoch die Variablen agent und company, wird dies explizit im Imputer festgelegt. Zwar wurden die Variablen agent und company bereits entfernt, dennoch möchte ich sicherstellen, dass diese nicht versehentlich berücksichtigt werden."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2026-06-05T12:30:44.964906496Z",
+ "start_time": "2026-06-05T12:30:44.909721150Z"
+ }
+ },
+ "source": [
+ "# To perform median imputation, we specify the\n",
+ "# imputation strategy\n",
+ "\n",
+ "imputer = MeanMedianImputer(imputation_method=\"median\",\n",
+ " variables=['children'])"
+ ],
+ "outputs": [],
+ "execution_count": 15
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Der Befehl `.fit` ermöglicht es dem Imputer, die Werte zu ermitteln, die für das Auffüllen der fehlenden Daten verwendet werden sollen. Dabei handelt es sich lediglich um einen Lernprozess; tatsächliche Änderungen an den Daten werden durch diesen Befehl noch nicht vorgenommen."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2026-06-05T12:30:45.114950331Z",
+ "start_time": "2026-06-05T12:30:44.970591416Z"
+ }
+ },
+ "source": [
+ "# we fit the imputer\n",
+ "imputer.fit(df)"
+ ],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "MeanMedianImputer(variables=['children'])"
+ ],
+ "text/html": [
+ "
MeanMedianImputer(variables=['children'])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
\n",
+ "
\n",
+ " \n",
+ " Parameters\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
imputation_method
\n",
+ "
'median'
\n",
+ "
\n",
+ " \n",
+ "\n",
+ "
\n",
+ "
\n",
+ "
variables
\n",
+ "
['children']
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 16
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Mit dem folgenden Befehl bekomme ich die Variablen aufgelistet für welche fehlende Werte ersetzt worden sind. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2026-06-05T12:30:45.294384142Z",
+ "start_time": "2026-06-05T12:30:45.124081190Z"
+ }
+ },
+ "source": [
+ "# this attribute stores the variables, numerical and categorical,\n",
+ "# that had missing data in the train set\n",
+ "imputer.variables_"
+ ],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['children']"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 17
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Wir beobachten, dass nur die Variable `children` aufgefüllt worden ist. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Mit dem folgenden Befehl können wir nachvollziehen, mit welchem Wert die fehlenden Daten in der Variable `children` aufgefüllt wurden."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2026-06-05T12:30:45.494716748Z",
+ "start_time": "2026-06-05T12:30:45.344158430Z"
+ }
+ },
+ "source": [
+ "imputer.imputer_dict_"
+ ],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'children': 0.0}"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "execution_count": 18
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Nun führen wir die Transformation durch. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2026-06-05T12:30:45.628296869Z",
+ "start_time": "2026-06-05T12:30:45.502919200Z"
+ }
+ },
+ "source": [
+ "# feature-engine returns a dataframe\n",
+ "\n",
+ "df = imputer.transform(df)"
+ ],
+ "outputs": [],
+ "execution_count": 19
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Kategorisch Variablen Imputation"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Nun müssen die fehlenden Werte der kategorialen Variable `country` aufgefüllt werden. Dabei nehmen wir an, dass die häufigste Ausprägung in den vorhandenen Daten eine repräsentative Grundlage bildet. Daher werden die fehlenden Werte durch die häufigste Kategorie ersetzt. Dieser Schritt wird im Folgenden umgesetzt."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2026-06-05T12:30:45.793199263Z",
+ "start_time": "2026-06-05T12:30:45.634139864Z"
+ }
+ },
+ "source": [
+ "# let's impute just 1 variable:\n",
+ "\n",
+ "imputer = CategoricalImputer(imputation_method=\"frequent\", \n",
+ " variables = ['country'])\n",
+ "\n",
+ "imputer.fit(df)"
+ ],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "CategoricalImputer(imputation_method='frequent', variables=['country'])"
+ ],
+ "text/html": [
+ "
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.