{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "46b17673",
      "metadata": {},
      "source": [
        "# Model Onboarding\n",
        "\n",
        "Use this notebook for the exposure initial upload and risk dataset creation of a set of factor exposures using daily CSV files.\n",
        "\n",
        "The notebook contains a section that obtains coverage statistics of the created risk dataset against the uploaded exposures."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "19c733fb",
      "metadata": {},
      "outputs": [],
      "source": [
        "import datetime as dt\n",
        "import itertools as it\n",
        "import shutil\n",
        "import tempfile\n",
        "\n",
        "from pathlib import Path\n",
        "\n",
        "import polars as pl\n",
        "from tqdm import tqdm\n",
        "\n",
        "from bayesline.apiclient import BayeslineApiClient\n",
        "from bayesline.api.equity import (\n",
        "    CategoricalExposureGroupSettings,\n",
        "    ContinuousExposureGroupSettings,\n",
        "    ExposureSettings, \n",
        "    DerivedRiskDatasetSettings,\n",
        "    RiskDatasetReferencedExposureSettings,\n",
        "    RiskDatasetUploadedExposureSettings,\n",
        "    UniverseSettings,\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "25b52005",
      "metadata": {
        "tags": [
          "skip-execution"
        ]
      },
      "outputs": [],
      "source": [
        "bln = BayeslineApiClient.new_client(\n",
        "    endpoint=\"https://[ENDPOINT]\",\n",
        "    api_key=\"[API-KEY]\",\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ba4338e5",
      "metadata": {},
      "source": [
        "## Exposure Upload"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "dd56872d",
      "metadata": {
        "tags": [
          "skip-execution"
        ]
      },
      "outputs": [],
      "source": [
        "exposure_dir = Path(\"/PATH/TO/EXPOSURES\")\n",
        "assert exposure_dir.exists()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "2c8844ac",
      "metadata": {},
      "outputs": [],
      "source": [
        "exposure_dataset_name = \"My-Exposures\""
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2b7d0105",
      "metadata": {},
      "source": [
        "Below creates a new exposure uploader for the chosen dataset name `My-Exposures`. See the [Uploaders Tutorial](https://docs.bayesline.com/0.21.0/notebooks/tutorial_uploaders.html) for a deep dive into the `Uploaders API`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "1d31b55b",
      "metadata": {},
      "outputs": [],
      "source": [
        "exposure_uploader = bln.equity.uploaders.get_data_type(\"exposures\")\n",
        "uploader = exposure_uploader.create_or_replace_dataset(exposure_dataset_name)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "4fe4f6bd",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Found 31 files.\n",
            "Years: 2025\n"
          ]
        }
      ],
      "source": [
        "# list all csv files and group them by year\n",
        "# expects file pattern \"*_YYYY-MM-DD.csv\"\n",
        "\n",
        "all_files = sorted(exposure_dir.glob(\"*.csv\"))\n",
        "existing_files = uploader.get_staging_results().keys()\n",
        "\n",
        "files_by_year = {\n",
        "    k: list(v) \n",
        "    for k, v in \n",
        "    it.groupby(all_files, lambda x: int(x.name.split(\"_\")[1].split(\".\")[0].split(\"-\")[0]))\n",
        "}\n",
        "files_by_year.keys()\n",
        "\n",
        "print(f\"Found {len(all_files)} files.\")\n",
        "print(\"Years:\", \", \".join(map(str, files_by_year)))"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "462b6afa",
      "metadata": {},
      "source": [
        "Below we batch the daily CSV files into annual Parquet files. Creating batched Parquet files is recommended as it will be much faster to upload and process compared to individually uploading daily files."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "id": "37948615",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Created temp directory: /tmp/tmpo_oem9pm\n"
          ]
        }
      ],
      "source": [
        "temp_dir = Path(tempfile.mkdtemp())\n",
        "print(f\"Created temp directory: {temp_dir}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "id": "da72a997",
      "metadata": {
        "tags": [
          "remove-output"
        ]
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\r",
            "  0%|          | 0/1 [00:00<?, ?it/s]"
          ]
        },
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\r",
            "100%|██████████| 1/1 [00:00<00:00,  1.35it/s]"
          ]
        },
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\r",
            "100%|██████████| 1/1 [00:00<00:00,  1.35it/s]"
          ]
        },
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "\n"
          ]
        }
      ],
      "source": [
        "for year, files in tqdm(files_by_year.items()):\n",
        "    parquet_path = temp_dir / f\"exposures_{year}.parquet\"\n",
        "    df = pl.scan_csv(files, try_parse_dates=True)\n",
        "    df.sink_parquet(parquet_path)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "id": "b517bbe9",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (5, 11)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>asset_id</th><th>market^Market</th><th>style^Size</th><th>style^Value</th><th>style^Growth</th><th>style^Volatility</th><th>style^Momentum</th><th>style^Dividend</th><th>style^Leverage</th><th>asset_id_type</th></tr><tr><td>date</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td></tr></thead><tbody><tr><td>2025-05-01</td><td>&quot;IC000B1557&quot;</td><td>1.0</td><td>0.470459</td><td>1.3535156</td><td>-0.217041</td><td>-0.161893</td><td>0.6529541</td><td>0.066101</td><td>0.4144516</td><td>&quot;bayesid&quot;</td></tr><tr><td>2025-05-01</td><td>&quot;IC0010CEFE&quot;</td><td>1.0</td><td>-1.489746</td><td>-0.119995</td><td>-0.66748</td><td>2.1402996</td><td>-0.570312</td><td>0.029068</td><td>-0.318726</td><td>&quot;bayesid&quot;</td></tr><tr><td>2025-05-01</td><td>&quot;IC0021AFB7&quot;</td><td>1.0</td><td>-0.437744</td><td>-0.035828</td><td>-0.196411</td><td>-0.998698</td><td>0.69751</td><td>0.221924</td><td>-0.07859</td><td>&quot;bayesid&quot;</td></tr><tr><td>2025-05-01</td><td>&quot;IC002CE8B9&quot;</td><td>1.0</td><td>0.147491</td><td>0.7685547</td><td>-0.57666</td><td>1.3333334</td><td>-0.302246</td><td>0.21106</td><td>0.202637</td><td>&quot;bayesid&quot;</td></tr><tr><td>2025-05-01</td><td>&quot;IC002DC646&quot;</td><td>1.0</td><td>0.188354</td><td>0.014297</td><td>0.083984</td><td>-0.636719</td><td>-0.506348</td><td>0.33667</td><td>0.064331</td><td>&quot;bayesid&quot;</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (5, 11)\n",
              "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n",
              "│ date      ┆ asset_id  ┆ market^Ma ┆ style^Siz ┆ … ┆ style^Mom ┆ style^Div ┆ style^Lev ┆ asset_id │\n",
              "│ ---       ┆ ---       ┆ rket      ┆ e         ┆   ┆ entum     ┆ idend     ┆ erage     ┆ _type    │\n",
              "│ date      ┆ str       ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---      │\n",
              "│           ┆           ┆ f64       ┆ f64       ┆   ┆ f64       ┆ f64       ┆ f64       ┆ str      │\n",
              "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n",
              "│ 2025-05-0 ┆ IC000B155 ┆ 1.0       ┆ 0.470459  ┆ … ┆ 0.6529541 ┆ 0.066101  ┆ 0.4144516 ┆ bayesid  │\n",
              "│ 1         ┆ 7         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-0 ┆ IC0010CEF ┆ 1.0       ┆ -1.489746 ┆ … ┆ -0.570312 ┆ 0.029068  ┆ -0.318726 ┆ bayesid  │\n",
              "│ 1         ┆ E         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-0 ┆ IC0021AFB ┆ 1.0       ┆ -0.437744 ┆ … ┆ 0.69751   ┆ 0.221924  ┆ -0.07859  ┆ bayesid  │\n",
              "│ 1         ┆ 7         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-0 ┆ IC002CE8B ┆ 1.0       ┆ 0.147491  ┆ … ┆ -0.302246 ┆ 0.21106   ┆ 0.202637  ┆ bayesid  │\n",
              "│ 1         ┆ 9         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-0 ┆ IC002DC64 ┆ 1.0       ┆ 0.188354  ┆ … ┆ -0.506348 ┆ 0.33667   ┆ 0.064331  ┆ bayesid  │\n",
              "│ 1         ┆ 6         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘"
            ]
          },
          "execution_count": 10,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "df.head().collect()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "1f4977f3",
      "metadata": {},
      "source": [
        "As a next step we iterate over the annual Parquet files and stage them in the uploader. See the [Uploaders Tutorial](https://docs.bayesline.com/0.21.0/notebooks/tutorial_uploaders.html#staging-data) for more details on the *staging* and *commit* concepts."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "id": "76d70f86",
      "metadata": {},
      "outputs": [],
      "source": [
        "for year in files_by_year.keys():\n",
        "    parquet = temp_dir / f\"exposures_{year}.parquet\"\n",
        "    result = uploader.stage_file(parquet)\n",
        "    assert result.success"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "id": "978ef7e0",
      "metadata": {},
      "outputs": [],
      "source": [
        "shutil.rmtree(temp_dir)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "fd6fbd1f",
      "metadata": {},
      "source": [
        "### Data Commit\n",
        "\n",
        "Next up we commit the data into versioned storage."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "id": "6693cb74",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "UploadCommitResult(version=1, committed_names=['exposures_2025'])"
            ]
          },
          "execution_count": 13,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "uploader.commit(mode=\"append\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e1b648ce",
      "metadata": {},
      "source": [
        "## Risk Dataset Creation\n",
        "\n",
        "Below creates a new *Risk Dataset* using above uploaded exposures. See the [Risk Datasets Tutorial](https://docs.bayesline.com/0.21.0/notebooks/tutorial_datasets.html) for a deep dive into the `Risk Datasets API`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "id": "7adbe97b",
      "metadata": {},
      "outputs": [],
      "source": [
        "risk_datasets = bln.equity.riskdatasets"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "id": "13bb9691",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "{'bayesline/Bayesline-US-500-1y': 'ready',\n",
              " 'bayesline/Bayesline-US-All-1y': 'ready'}"
            ]
          },
          "execution_count": 15,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# exisint datasets which can be used as reference datasets\n",
        "risk_datasets.get_dataset_names()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "id": "5077badf",
      "metadata": {},
      "outputs": [],
      "source": [
        "risk_dataset_name = \"My-Risk-Dataset\""
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "id": "d697b7cb",
      "metadata": {},
      "outputs": [],
      "source": [
        "risk_datasets.delete_dataset_if_exists(risk_dataset_name)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "fcc528e5",
      "metadata": {},
      "source": [
        "We need to specify an assignment of which exposures are *style*, *region*, etc. Below lists those *factor groups* as they were extracted from the uploaded exposures."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "id": "0d3f34a1",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (2, 1)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>factor_group</th></tr><tr><td>str</td></tr></thead><tbody><tr><td>&quot;style&quot;</td></tr><tr><td>&quot;market&quot;</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (2, 1)\n",
              "┌──────────────┐\n",
              "│ factor_group │\n",
              "│ ---          │\n",
              "│ str          │\n",
              "╞══════════════╡\n",
              "│ style        │\n",
              "│ market       │\n",
              "└──────────────┘"
            ]
          },
          "execution_count": 18,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "uploader.get_data(columns=[\"factor_group\"], unique=True).collect()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ac933170",
      "metadata": {},
      "source": [
        "See API docs for [`DerivedRiskDatasetSettings`](https://docs.bayesline.com/0.21.0/_autosummary/bayesline.api.equity.DerivedRiskDatasetSettings.html) and [`RiskDatasetUploadedExposureSettings`](https://docs.bayesline.com/0.21.0/_autosummary/bayesline.api.equity.RiskDatasetUploadedExposureSettings.html) for other potential settings.\n",
        "\n",
        "In this recipe we pass through the industry hierarchy from the reference risk dataset, choose that our uploaded exposures make up the estimation universe and that we take the union of all assets across all of our exposures as the overall asset filter."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "id": "00290232",
      "metadata": {},
      "outputs": [],
      "source": [
        "settings = DerivedRiskDatasetSettings(\n",
        "    reference_dataset=\"bayesline/Bayesline-US-All-1y\",\n",
        "    exposures=[\n",
        "        RiskDatasetReferencedExposureSettings(\n",
        "            categorical_factor_groups=[\"trbc\"],\n",
        "            continuous_factor_groups=[],\n",
        "        ),\n",
        "        RiskDatasetUploadedExposureSettings(\n",
        "            exposure_source=exposure_dataset_name,\n",
        "            continuous_factor_groups=[\"market\", \"style\"],\n",
        "            categorical_factor_groups=[],\n",
        "        ),\n",
        "    ],\n",
        "    trim_start_date=dt.date(2025, 5, 1),\n",
        "    trim_assets=\"asset_union\",\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "id": "a1f9f125",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (3_309_156, 23)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>bayesid</th><th>market.Market</th><th>style.Dividend</th><th>style.Growth</th><th>style.Leverage</th><th>style.Momentum</th><th>style.Size</th><th>style.Value</th><th>style.Volatility</th><th>trbc.Academic &amp; Educational Services</th><th>trbc.Basic Materials</th><th>trbc.Consumer Cyclicals</th><th>trbc.Consumer Non-Cyclicals</th><th>trbc.Energy</th><th>trbc.Financials</th><th>trbc.Government Activity</th><th>trbc.Healthcare</th><th>trbc.Industrials</th><th>trbc.Institutions, Associations &amp; Organizations</th><th>trbc.Real Estate</th><th>trbc.Technology</th><th>trbc.Utilities</th></tr><tr><td>date</td><td>str</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td></tr></thead><tbody><tr><td>2025-03-31</td><td>&quot;IC000B1557&quot;</td><td>1.0</td><td>0.284026</td><td>0.090472</td><td>0.544752</td><td>0.800525</td><td>0.447815</td><td>1.699471</td><td>-0.039661</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2025-03-31</td><td>&quot;IC0010CEFE&quot;</td><td>1.0</td><td>-0.722481</td><td>-0.32904</td><td>0.066181</td><td>-0.308197</td><td>-1.285913</td><td>-1.222772</td><td>-1.720172</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td></tr><tr><td>2025-03-31</td><td>&quot;IC0021AFB7&quot;</td><td>1.0</td><td>0.043405</td><td>0.089126</td><td>-0.063883</td><td>1.170062</td><td>-0.051302</td><td>0.321018</td><td>-1.195056</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2025-03-31</td><td>&quot;IC002CE8B9&quot;</td><td>1.0</td><td>0.036184</td><td>-0.345729</td><td>0.269862</td><td>0.840696</td><td>0.182565</td><td>1.148588</td><td>1.208082</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2025-03-31</td><td>&quot;IC002DC646&quot;</td><td>1.0</td><td>0.312444</td><td>0.404062</td><td>0.09229</td><td>-0.35203</td><td>0.242823</td><td>0.433968</td><td>-0.636542</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFE60191&quot;</td><td>1.0</td><td>-0.024328</td><td>-0.451648</td><td>0.790108</td><td>0.41581</td><td>-0.27393</td><td>-0.716752</td><td>0.093616</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFE938FD&quot;</td><td>1.0</td><td>1.2092</td><td>-1.982998</td><td>0.88721</td><td>0.218589</td><td>0.939003</td><td>0.44977</td><td>-0.396562</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFE94AED&quot;</td><td>1.0</td><td>1.017989</td><td>0.231703</td><td>0.976791</td><td>1.195789</td><td>0.170911</td><td>0.883509</td><td>-1.064662</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFEBBB38&quot;</td><td>1.0</td><td>0.423015</td><td>0.612939</td><td>0.201796</td><td>0.75019</td><td>0.595682</td><td>0.441093</td><td>-0.939051</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr><tr><td>2026-03-31</td><td>&quot;ICFFF2F5AD&quot;</td><td>1.0</td><td>-0.072353</td><td>-2.307796</td><td>-1.383067</td><td>-0.129712</td><td>-0.722897</td><td>-0.756288</td><td>0.999789</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (3_309_156, 23)\n",
              "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n",
              "│ date      ┆ bayesid   ┆ market.Ma ┆ style.Div ┆ … ┆ trbc.Inst ┆ trbc.Real ┆ trbc.Tech ┆ trbc.Uti │\n",
              "│ ---       ┆ ---       ┆ rket      ┆ idend     ┆   ┆ itutions, ┆ Estate    ┆ nology    ┆ lities   │\n",
              "│ date      ┆ str       ┆ ---       ┆ ---       ┆   ┆ Associati ┆ ---       ┆ ---       ┆ ---      │\n",
              "│           ┆           ┆ f32       ┆ f32       ┆   ┆ on…       ┆ f32       ┆ f32       ┆ f32      │\n",
              "│           ┆           ┆           ┆           ┆   ┆ ---       ┆           ┆           ┆          │\n",
              "│           ┆           ┆           ┆           ┆   ┆ f32       ┆           ┆           ┆          │\n",
              "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n",
              "│ 2025-03-3 ┆ IC000B155 ┆ 1.0       ┆ 0.284026  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 7         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-03-3 ┆ IC0010CEF ┆ 1.0       ┆ -0.722481 ┆ … ┆ 0.0       ┆ 0.0       ┆ 1.0       ┆ 0.0      │\n",
              "│ 1         ┆ E         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-03-3 ┆ IC0021AFB ┆ 1.0       ┆ 0.043405  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 7         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-03-3 ┆ IC002CE8B ┆ 1.0       ┆ 0.036184  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 9         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-03-3 ┆ IC002DC64 ┆ 1.0       ┆ 0.312444  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 6         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ …         ┆ …         ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …        │\n",
              "│ 2026-03-3 ┆ ICFFE6019 ┆ 1.0       ┆ -0.024328 ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 1         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2026-03-3 ┆ ICFFE938F ┆ 1.0       ┆ 1.2092    ┆ … ┆ 0.0       ┆ 1.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2026-03-3 ┆ ICFFE94AE ┆ 1.0       ┆ 1.017989  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2026-03-3 ┆ ICFFEBBB3 ┆ 1.0       ┆ 0.423015  ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ 8         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2026-03-3 ┆ ICFFF2F5A ┆ 1.0       ┆ -0.072353 ┆ … ┆ 0.0       ┆ 0.0       ┆ 0.0       ┆ 0.0      │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘"
            ]
          },
          "execution_count": 20,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "exposures_api = bln.equity.exposures.load(\n",
        "    ExposureSettings(\n",
        "        exposures=[\n",
        "            ContinuousExposureGroupSettings(hierarchy=\"market\"),\n",
        "            ContinuousExposureGroupSettings(hierarchy=\"style\", standardize_method=\"equal_weighted\"),\n",
        "            CategoricalExposureGroupSettings(hierarchy=\"trbc\"),\n",
        "        ],\n",
        "    ).with_dataset(\"bayesline/Bayesline-US-All-1y\")\n",
        ")\n",
        "exposures_api.get(\n",
        "    UniverseSettings(), \n",
        "    standardize_universe=None\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "be274e2e",
      "metadata": {},
      "source": [
        "Lastly we create the new dataset followed by describing its properties after creation."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "id": "b1f55982",
      "metadata": {},
      "outputs": [],
      "source": [
        "my_risk_dataset = risk_datasets.create_dataset(risk_dataset_name, settings)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "35b488d4",
      "metadata": {},
      "source": [
        "### Data Coverage\n",
        "\n",
        "As a first step after the risk dataset creation we cross check the asset coverage compared to our raw exposure upload."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "id": "0b6868f7",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (5, 6)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>n_assets</th><th>min_exposure</th><th>max_exposure</th><th>mean_exposure</th><th>std_exposure</th></tr><tr><td>date</td><td>i64</td><td>f32</td><td>f32</td><td>f64</td><td>f64</td></tr></thead><tbody><tr><td>2025-05-01</td><td>9108</td><td>-3.0</td><td>3.0</td><td>0.07378</td><td>0.871145</td></tr><tr><td>2025-05-02</td><td>9107</td><td>-3.0</td><td>3.0</td><td>0.075814</td><td>0.869677</td></tr><tr><td>2025-05-03</td><td>9106</td><td>-3.0</td><td>3.0</td><td>0.075695</td><td>0.869591</td></tr><tr><td>2025-05-04</td><td>9106</td><td>-3.0</td><td>3.0</td><td>0.075698</td><td>0.869592</td></tr><tr><td>2025-05-05</td><td>9107</td><td>-3.0</td><td>3.0</td><td>0.080996</td><td>0.868992</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (5, 6)\n",
              "┌────────────┬──────────┬──────────────┬──────────────┬───────────────┬──────────────┐\n",
              "│ date       ┆ n_assets ┆ min_exposure ┆ max_exposure ┆ mean_exposure ┆ std_exposure │\n",
              "│ ---        ┆ ---      ┆ ---          ┆ ---          ┆ ---           ┆ ---          │\n",
              "│ date       ┆ i64      ┆ f32          ┆ f32          ┆ f64           ┆ f64          │\n",
              "╞════════════╪══════════╪══════════════╪══════════════╪═══════════════╪══════════════╡\n",
              "│ 2025-05-01 ┆ 9108     ┆ -3.0         ┆ 3.0          ┆ 0.07378       ┆ 0.871145     │\n",
              "│ 2025-05-02 ┆ 9107     ┆ -3.0         ┆ 3.0          ┆ 0.075814      ┆ 0.869677     │\n",
              "│ 2025-05-03 ┆ 9106     ┆ -3.0         ┆ 3.0          ┆ 0.075695      ┆ 0.869591     │\n",
              "│ 2025-05-04 ┆ 9106     ┆ -3.0         ┆ 3.0          ┆ 0.075698      ┆ 0.869592     │\n",
              "│ 2025-05-05 ┆ 9107     ┆ -3.0         ┆ 3.0          ┆ 0.080996      ┆ 0.868992     │\n",
              "└────────────┴──────────┴──────────────┴──────────────┴───────────────┴──────────────┘"
            ]
          },
          "execution_count": 22,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "upload_stats_df = uploader.get_data_detail_summary()\n",
        "upload_stats_df.head()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "id": "bc89e23d",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (2_258_896, 6)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>asset_id</th><th>asset_id_type</th><th>factor_group</th><th>factor</th><th>exposure</th></tr><tr><td>date</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f32</td></tr></thead><tbody><tr><td>2025-05-06</td><td>&quot;IC794111BC&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Value&quot;</td><td>1.019531</td></tr><tr><td>2025-05-06</td><td>&quot;IC7945E4DE&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Value&quot;</td><td>0.515137</td></tr><tr><td>2025-05-06</td><td>&quot;IC795602F2&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Value&quot;</td><td>0.124084</td></tr><tr><td>2025-05-06</td><td>&quot;IC795BA62D&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Value&quot;</td><td>0.618652</td></tr><tr><td>2025-05-06</td><td>&quot;IC796BC441&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Value&quot;</td><td>-0.048187</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2025-05-31</td><td>&quot;ICAF831C52&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>-0.620117</td></tr><tr><td>2025-05-31</td><td>&quot;ICAF88CD01&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>0.832031</td></tr><tr><td>2025-05-31</td><td>&quot;ICAF967F46&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>-1.527344</td></tr><tr><td>2025-05-31</td><td>&quot;ICAF98D925&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>-0.663574</td></tr><tr><td>2025-05-31</td><td>&quot;ICAF9E7C60&quot;</td><td>&quot;bayesid&quot;</td><td>&quot;style&quot;</td><td>&quot;Growth&quot;</td><td>-0.211914</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (2_258_896, 6)\n",
              "┌────────────┬────────────┬───────────────┬──────────────┬────────┬───────────┐\n",
              "│ date       ┆ asset_id   ┆ asset_id_type ┆ factor_group ┆ factor ┆ exposure  │\n",
              "│ ---        ┆ ---        ┆ ---           ┆ ---          ┆ ---    ┆ ---       │\n",
              "│ date       ┆ str        ┆ str           ┆ str          ┆ str    ┆ f32       │\n",
              "╞════════════╪════════════╪═══════════════╪══════════════╪════════╪═══════════╡\n",
              "│ 2025-05-06 ┆ IC794111BC ┆ bayesid       ┆ style        ┆ Value  ┆ 1.019531  │\n",
              "│ 2025-05-06 ┆ IC7945E4DE ┆ bayesid       ┆ style        ┆ Value  ┆ 0.515137  │\n",
              "│ 2025-05-06 ┆ IC795602F2 ┆ bayesid       ┆ style        ┆ Value  ┆ 0.124084  │\n",
              "│ 2025-05-06 ┆ IC795BA62D ┆ bayesid       ┆ style        ┆ Value  ┆ 0.618652  │\n",
              "│ 2025-05-06 ┆ IC796BC441 ┆ bayesid       ┆ style        ┆ Value  ┆ -0.048187 │\n",
              "│ …          ┆ …          ┆ …             ┆ …            ┆ …      ┆ …         │\n",
              "│ 2025-05-31 ┆ ICAF831C52 ┆ bayesid       ┆ style        ┆ Growth ┆ -0.620117 │\n",
              "│ 2025-05-31 ┆ ICAF88CD01 ┆ bayesid       ┆ style        ┆ Growth ┆ 0.832031  │\n",
              "│ 2025-05-31 ┆ ICAF967F46 ┆ bayesid       ┆ style        ┆ Growth ┆ -1.527344 │\n",
              "│ 2025-05-31 ┆ ICAF98D925 ┆ bayesid       ┆ style        ┆ Growth ┆ -0.663574 │\n",
              "│ 2025-05-31 ┆ ICAF9E7C60 ┆ bayesid       ┆ style        ┆ Growth ┆ -0.211914 │\n",
              "└────────────┴────────────┴───────────────┴──────────────┴────────┴───────────┘"
            ]
          },
          "execution_count": 23,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "uploader.get_data().collect()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "id": "c24fae13",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Categorical Hierarchies ['trbc']\n"
          ]
        }
      ],
      "source": [
        "# note that the industry and region hierarchy names tie out with the factor groups we specified above\n",
        "print(f\"Categorical Hierarchies {list(my_risk_dataset.describe().universe_settings_menu.categorical_hierarchies.keys())}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "id": "4c08c58d",
      "metadata": {},
      "outputs": [],
      "source": [
        "universe_settings = UniverseSettings()\n",
        "\n",
        "universe_api = bln.equity.universes.load(\n",
        "    universe_settings.with_dataset(risk_dataset_name)\n",
        ")\n",
        "universe_counts = universe_api.counts()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "id": "c8e5b544",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Axes: xlabel='date'>"
            ]
          },
          "execution_count": 26,
          "metadata": {},
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "(\n",
        "    universe_counts\n",
        "    .join(\n",
        "        upload_stats_df.select(\"date\", \"n_assets\").rename({\"n_assets\": \"Uploaded\"}),\n",
        "        on=\"date\",\n",
        "        how=\"left\",\n",
        "    )\n",
        "    .sort(\"date\")\n",
        "    .to_pandas()\n",
        "    .set_index(\"date\")\n",
        "    .plot()\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "078c65a6",
      "metadata": {},
      "source": [
        "We can pull some exposures from the new risk dataset to verify."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 27,
      "id": "cee7c6f8",
      "metadata": {},
      "outputs": [],
      "source": [
        "exposures_api = bln.equity.exposures.load(\n",
        "    ExposureSettings(\n",
        "        exposures=[\n",
        "            ContinuousExposureGroupSettings(hierarchy=\"market\"),\n",
        "            ContinuousExposureGroupSettings(hierarchy=\"style\", standardize_method=\"equal_weighted\"),\n",
        "        ],\n",
        "    ).with_dataset(risk_dataset_name)\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 28,
      "id": "35654134",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/html": [
              "<div><style>\n",
              ".dataframe > thead > tr,\n",
              ".dataframe > tbody > tr {\n",
              "  text-align: right;\n",
              "  white-space: pre-wrap;\n",
              "}\n",
              "</style>\n",
              "<small>shape: (5, 10)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>date</th><th>bayesid</th><th>market.Market</th><th>style.Dividend</th><th>style.Growth</th><th>style.Leverage</th><th>style.Momentum</th><th>style.Size</th><th>style.Value</th><th>style.Volatility</th></tr><tr><td>date</td><td>str</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td><td>f32</td></tr></thead><tbody><tr><td>2025-05-31</td><td>&quot;ICFFE54368&quot;</td><td>1.0</td><td>-0.844152</td><td>-0.702781</td><td>0.094035</td><td>-1.14596</td><td>0.962314</td><td>-2.420384</td><td>0.370091</td></tr><tr><td>2025-05-31</td><td>&quot;ICFFE60191&quot;</td><td>1.0</td><td>-0.107817</td><td>-0.069119</td><td>-0.164538</td><td>0.38831</td><td>-0.501507</td><td>0.246586</td><td>0.64925</td></tr><tr><td>2025-05-31</td><td>&quot;ICFFE94AED&quot;</td><td>1.0</td><td>1.232723</td><td>0.386306</td><td>1.141383</td><td>0.702094</td><td>0.179885</td><td>1.009319</td><td>-1.267412</td></tr><tr><td>2025-05-31</td><td>&quot;ICFFEBBB38&quot;</td><td>1.0</td><td>0.400454</td><td>0.678276</td><td>0.293858</td><td>0.704019</td><td>0.635378</td><td>0.376627</td><td>-1.352521</td></tr><tr><td>2025-05-31</td><td>&quot;ICFFF2F5AD&quot;</td><td>1.0</td><td>-0.116423</td><td>-0.081757</td><td>-0.172153</td><td>-0.798808</td><td>-0.521222</td><td>0.244388</td><td>0.196752</td></tr></tbody></table></div>"
            ],
            "text/plain": [
              "shape: (5, 10)\n",
              "┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n",
              "│ date      ┆ bayesid   ┆ market.Ma ┆ style.Div ┆ … ┆ style.Mom ┆ style.Siz ┆ style.Val ┆ style.Vo │\n",
              "│ ---       ┆ ---       ┆ rket      ┆ idend     ┆   ┆ entum     ┆ e         ┆ ue        ┆ latility │\n",
              "│ date      ┆ str       ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---      │\n",
              "│           ┆           ┆ f32       ┆ f32       ┆   ┆ f32       ┆ f32       ┆ f32       ┆ f32      │\n",
              "╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n",
              "│ 2025-05-3 ┆ ICFFE5436 ┆ 1.0       ┆ -0.844152 ┆ … ┆ -1.14596  ┆ 0.962314  ┆ -2.420384 ┆ 0.370091 │\n",
              "│ 1         ┆ 8         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-3 ┆ ICFFE6019 ┆ 1.0       ┆ -0.107817 ┆ … ┆ 0.38831   ┆ -0.501507 ┆ 0.246586  ┆ 0.64925  │\n",
              "│ 1         ┆ 1         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "│ 2025-05-3 ┆ ICFFE94AE ┆ 1.0       ┆ 1.232723  ┆ … ┆ 0.702094  ┆ 0.179885  ┆ 1.009319  ┆ -1.26741 │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆ 2        │\n",
              "│ 2025-05-3 ┆ ICFFEBBB3 ┆ 1.0       ┆ 0.400454  ┆ … ┆ 0.704019  ┆ 0.635378  ┆ 0.376627  ┆ -1.35252 │\n",
              "│ 1         ┆ 8         ┆           ┆           ┆   ┆           ┆           ┆           ┆ 1        │\n",
              "│ 2025-05-3 ┆ ICFFF2F5A ┆ 1.0       ┆ -0.116423 ┆ … ┆ -0.798808 ┆ -0.521222 ┆ 0.244388  ┆ 0.196752 │\n",
              "│ 1         ┆ D         ┆           ┆           ┆   ┆           ┆           ┆           ┆          │\n",
              "└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘"
            ]
          },
          "execution_count": 28,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "df = exposures_api.get(universe_settings, standardize_universe=None)\n",
        "\n",
        "df.tail()"
      ]
    }
  ],
  "metadata": {
    "jupytext": {
      "text_representation": {
        "extension": ".py",
        "format_name": "percent",
        "format_version": "1.3",
        "jupytext_version": "1.19.3"
      }
    },
    "kernelspec": {
      "display_name": ".venv",
      "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.15"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}