3375 lines
361 KiB
Plaintext
3375 lines
361 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "da7e37e7",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.003526,
|
|
"end_time": "2026-06-13T02:38:23.074970+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:23.071444+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"# Chapter 5: GT-GAN - Neural ODEs for Irregular Time Series\n",
|
|
"\n",
|
|
"**Docker image**: `ml4t-gpu`\n",
|
|
"\n",
|
|
"This notebook implements a **GT-GAN-inspired** model (based on Jeon et al., NeurIPS 2022)\n",
|
|
"using **Neural ODEs** to handle time series with **naturally irregular timestamps**.\n",
|
|
"\n",
|
|
"**Learning Objectives**:\n",
|
|
"- Understand how Neural ODEs handle irregular time intervals via continuous dynamics\n",
|
|
"- Implement a GRU-ODE encoder that processes observations at arbitrary timestamps\n",
|
|
"- Train a GAN with ODE-based generator and discriminator for irregular series\n",
|
|
"- Evaluate interpolation quality at unobserved timestamps (GT-GAN's unique capability)\n",
|
|
"- Compare GT-GAN's irregular-data approach with fixed-grid generators (TimeGAN, Sig-CWGAN)\n",
|
|
"\n",
|
|
"**Book Reference**: Chapter 5, Section 5.4 (GANs for Financial Time Series) — GT-GAN\n",
|
|
"is treated here as a hybrid GAN + continuous-time generator for irregular observations.\n",
|
|
"\n",
|
|
"**Prerequisites**: Familiarity with GANs (`01_timegan_pytorch.py`) and Chapter 3 bar data.\n",
|
|
"\n",
|
|
"## Key Innovation: Genuine Irregularity\n",
|
|
"\n",
|
|
"Unlike other notebooks that use daily returns on regular grids, GT-GAN is designed\n",
|
|
"for **naturally irregular** data. We use Chapter 3's information-theoretic bars:\n",
|
|
"\n",
|
|
"- **Tick bars**: Fixed number of trades → variable time between bars\n",
|
|
"- **Volume bars**: Fixed volume threshold → variable time between bars\n",
|
|
"- **Dollar bars**: Fixed dollar volume → variable time between bars\n",
|
|
"\n",
|
|
"These bars have genuine irregular timestamps driven by market activity, not\n",
|
|
"artificial random masking.\n",
|
|
"\n",
|
|
"## Neural ODEs: The Key Innovation\n",
|
|
"\n",
|
|
"Instead of discrete recurrence:\n",
|
|
"\n",
|
|
"$$h_{t+1} = \\text{RNN}(h_t, x_t)$$\n",
|
|
"\n",
|
|
"Neural ODEs define continuous dynamics:\n",
|
|
"\n",
|
|
"$$\\frac{dh}{dt} = f_\\theta(h, t)$$\n",
|
|
"\n",
|
|
"The hidden state evolves continuously, and we can query it at any time point.\n",
|
|
"This naturally handles:\n",
|
|
"- Variable time intervals between observations\n",
|
|
"- Interpolation to any desired time grid\n",
|
|
"- Generation at arbitrary timestamps\n",
|
|
"\n",
|
|
"## Model Architecture (Simplified GT-GAN)\n",
|
|
"\n",
|
|
"GT-GAN uses Neural ODEs to handle continuous-time dynamics:\n",
|
|
"1. **GRU-ODE Encoder**: Maps irregular observations to latent space\n",
|
|
"2. **ODE Generator**: Generates synthetic latent trajectories\n",
|
|
"3. **ODE Discriminator**: Classifies real vs synthetic in latent space\n",
|
|
"4. **ODE Decoder**: Reconstructs observations from latent space\n",
|
|
"\n",
|
|
"See `figures/figure_5_12_gtgan_architecture.png` for the full architecture diagram.\n",
|
|
"\n",
|
|
"## References\n",
|
|
"\n",
|
|
"- **GT-GAN Paper**: Jeon et al. (2022). \"GT-GAN: General Purpose Time Series\n",
|
|
" Synthesis with Generative Adversarial Networks.\" NeurIPS 2022.\n",
|
|
"- **Neural ODEs**: Chen et al. (2018). \"Neural Ordinary Differential Equations.\"\n",
|
|
"- **Information Bars**: López de Prado (2018). \"Advances in Financial Machine Learning.\"\n",
|
|
"\n",
|
|
"---\n",
|
|
"\n",
|
|
"## WARNING: IMPORTANT: Data Source Requirement\n",
|
|
"\n",
|
|
"**GT-GAN requires naturally irregular data** - that's its core design goal.\n",
|
|
"\n",
|
|
"| Data Source | Natural Irregularity? | Suitability |\n",
|
|
"|-------------|----------------------|-------------|\n",
|
|
"| Chapter 3 bar data | [OK] Yes (activity-driven) | [OK] Ideal |\n",
|
|
"| Synthetic fallback | WARNING: Simulated | WARNING: Demo only |\n",
|
|
"| Daily returns + masking | [FAIL] Artificial | [FAIL] Not recommended |\n",
|
|
"\n",
|
|
"**If Chapter 3 bar data is unavailable**, this notebook falls back to generating\n",
|
|
"synthetic bars with log-normal inter-arrival times. While this demonstrates the\n",
|
|
"Neural ODE architecture, the statistical properties are artificial.\n",
|
|
"\n",
|
|
"**For production use**: Ensure Chapter 3's microstructure bar data is available.\n",
|
|
"Run Chapter 3 notebooks first to generate tick/volume/dollar bars.\n",
|
|
"\n",
|
|
"### Results Context\n",
|
|
"\n",
|
|
"- **Reconstruction MSE**: ~0.026 — above the ~0.01 bar this notebook uses for a\n",
|
|
" \"good\" autoencoder, so the encoder only roughly captures the bars (see the\n",
|
|
" per-cell interpretation; this is a simplified, short-training demo)\n",
|
|
"- **KS statistic**: ~0.68 (high — small synthetic-data regime)\n",
|
|
"- **Smoothness ratio**: ~0.02 — the Neural-ODE interpolation is far smoother\n",
|
|
" than the real bars (ratio ≪ 1), not matching their roughness\n",
|
|
"\n",
|
|
"---\n",
|
|
"\n",
|
|
"## Per-Sample Time Integration\n",
|
|
"\n",
|
|
"Two ODE-stepping strategies are available:\n",
|
|
"\n",
|
|
"- **Euler method**: Direct vectorized computation `h_new = h + dt * f(h)` where dt\n",
|
|
" varies per sample. Fast and exact for the Euler case.\n",
|
|
"- **Adaptive methods (Dopri5)**: Uses `torchdiffeq.odeint` with a batch-averaged\n",
|
|
" time span. The original GT-GAN paper relied on `torchode` (Lienen & Günnemann,\n",
|
|
" 2022) for per-sample integration in a single solver call, but its\n",
|
|
" `torchtyping` dependency is incompatible with current PyTorch, so we use\n",
|
|
" `torchdiffeq` here.\n",
|
|
"\n",
|
|
"For genuinely irregular time series (e.g., information-theoretic bars), the\n",
|
|
"Euler path is preferred since it preserves per-sample dt; the adaptive path is\n",
|
|
"kept for completeness and matches what `torchdiffeq` provides.\n",
|
|
"\n",
|
|
"**Reference**: Lienen, M. & Günnemann, S. (2022). \"torchode: A Parallel ODE\n",
|
|
"Solver for PyTorch.\" https://arxiv.org/abs/2210.12375"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "a585051c",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:23.080842Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:23.080736Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.756211Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.755481Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 2.67921,
|
|
"end_time": "2026-06-13T02:38:25.756798+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:23.077588+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"\"\"\"GT-GAN — Neural ODE-based generative model for irregular time series.\"\"\"\n",
|
|
"\n",
|
|
"import json\n",
|
|
"import os\n",
|
|
"from datetime import UTC, datetime, timedelta\n",
|
|
"from pathlib import Path\n",
|
|
"\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import numpy as np\n",
|
|
"import plotly.graph_objects as go\n",
|
|
"import polars as pl\n",
|
|
"import torch\n",
|
|
"import torch.nn as nn\n",
|
|
"import torch.optim as optim\n",
|
|
"from IPython.display import Image, display\n",
|
|
"from plotly.subplots import make_subplots\n",
|
|
"from scipy import stats\n",
|
|
"from sklearn.decomposition import PCA\n",
|
|
"from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor\n",
|
|
"from sklearn.metrics import accuracy_score, roc_auc_score\n",
|
|
"from torch.utils.data import DataLoader, TensorDataset\n",
|
|
"from torchdiffeq import odeint\n",
|
|
"from tqdm import tqdm\n",
|
|
"\n",
|
|
"from utils.paths import get_chapter_dir, get_output_dir\n",
|
|
"from utils.reproducibility import set_global_seeds\n",
|
|
"from utils.style import COLORS, plot_fidelity_comparison"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "6e4cc150",
|
|
"metadata": {
|
|
"lines_to_next_cell": 0,
|
|
"papermill": {
|
|
"duration": 0.002507,
|
|
"end_time": "2026-06-13T02:38:25.762122+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.759615+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## GT-GAN Architecture\n",
|
|
"\n",
|
|
"GT-GAN uses Neural ODEs to handle continuous-time dynamics with genuine irregularity.\n",
|
|
"Unlike discrete RNNs, the hidden state evolves continuously and can be queried at\n",
|
|
"any time point."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "bc1737d4",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.767731Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.767641Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.770025Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.769571Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.005982,
|
|
"end_time": "2026-06-13T02:38:25.770543+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.764561+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"ASSETS_DIR = get_chapter_dir(5) / \"assets\"\n",
|
|
"if (ASSETS_DIR / \"gtgan_architecture.jpeg\").exists():\n",
|
|
" display(Image(ASSETS_DIR / \"gtgan_architecture.jpeg\", width=800))\n",
|
|
"\n",
|
|
"HEADLESS = os.environ.get(\"HEADLESS\", \"0\") == \"1\"\n",
|
|
"\n",
|
|
"# Checkpoint path for model persistence\n",
|
|
"CHECKPOINT_PATH = get_output_dir(5, \"gtgan\") / \"checkpoints\" / \"gtgan_model.pt\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "65fcfb04",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.776050Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.775937Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.778288Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.777896Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.005657,
|
|
"end_time": "2026-06-13T02:38:25.778647+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.772990+00:00",
|
|
"status": "completed"
|
|
},
|
|
"tags": [
|
|
"parameters"
|
|
]
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Paper-faithful defaults (Jeon et al., NeurIPS 2022)\n",
|
|
"SEQ_LENGTH = 32\n",
|
|
"LATENT_DIM = 32\n",
|
|
"HIDDEN_DIM = 24\n",
|
|
"ODE_HIDDEN = 24\n",
|
|
"MAX_STEPS = 2000\n",
|
|
"BATCH_SIZE = 128\n",
|
|
"ODE_METHOD = \"rk4\"\n",
|
|
"N_BARS = 2000 # Fallback synthetic bar count (when Ch3 data unavailable)\n",
|
|
"RETRAIN = False # Set True to retrain even if checkpoint exists\n",
|
|
"SEED = 42"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "5205282e",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.784018Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.783953Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.821907Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.821462Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.041512,
|
|
"end_time": "2026-06-13T02:38:25.822628+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.781116+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"set_global_seeds(SEED)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "00835b3d",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.831290Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.831200Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.834091Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.833652Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.006893,
|
|
"end_time": "2026-06-13T02:38:25.834368+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.827475+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"GT-GAN: Steps=2000, ODE=rk4\n",
|
|
"Using device: cuda\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Configuration for naturally irregular Chapter 3 bar data\n",
|
|
"CONFIG = {\n",
|
|
" \"bar_type\": \"dollar\",\n",
|
|
" \"seq_length\": SEQ_LENGTH,\n",
|
|
" \"features\": [\"close\", \"volume\"],\n",
|
|
" \"latent_dim\": LATENT_DIM,\n",
|
|
" \"hidden_dim\": HIDDEN_DIM,\n",
|
|
" \"ode_hidden\": ODE_HIDDEN,\n",
|
|
" \"max_steps\": MAX_STEPS,\n",
|
|
" \"batch_size\": BATCH_SIZE,\n",
|
|
" \"learning_rate\": 1e-3,\n",
|
|
" \"ode_method\": ODE_METHOD,\n",
|
|
" \"holdout_fraction\": 0.2,\n",
|
|
"}\n",
|
|
"\n",
|
|
"print(f\"GT-GAN: Steps={CONFIG['max_steps']}, ODE={CONFIG['ode_method']}\")\n",
|
|
"\n",
|
|
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
|
|
"print(f\"Using device: {device}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "d1260dce",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.002498,
|
|
"end_time": "2026-06-13T02:38:25.839385+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.836887+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Data: Chapter 3 Information-Theoretic Bars\n",
|
|
"\n",
|
|
"The key insight is that GT-GAN's Neural ODE architecture is designed for\n",
|
|
"**genuinely irregular timestamps**. Information bars from Chapter 3 provide this:\n",
|
|
"\n",
|
|
"| Bar Type | Trigger Condition | Inter-arrival Time |\n",
|
|
"|----------|------------------|-------------------|\n",
|
|
"| Tick bars | Every N trades | Variable (activity-driven) |\n",
|
|
"| Volume bars | Every V shares | Variable (liquidity-driven) |\n",
|
|
"| Dollar bars | Every $D traded | Variable (value-driven) |\n",
|
|
"\n",
|
|
"This is fundamentally different from daily returns with artificial masking."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "bc411789",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.845231Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.845110Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.849271Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.848824Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.007573,
|
|
"end_time": "2026-06-13T02:38:25.849656+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.842083+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def generate_synthetic_irregular_bars(n_bars: int = 1000, seed: int = 42) -> pl.DataFrame:\n",
|
|
" \"\"\"\n",
|
|
" Generate synthetic bars with naturally irregular timestamps.\n",
|
|
"\n",
|
|
" Used as fallback when Chapter 3 bar data is not available.\n",
|
|
" Simulates the statistical properties of information-theoretic bars.\n",
|
|
"\n",
|
|
" WARNING: This is DEMO MODE ONLY. Synthetic bars have artificial\n",
|
|
" statistical properties. For production use, run Chapter 3 notebooks\n",
|
|
" first to generate real tick/volume/dollar bars from market data.\n",
|
|
" \"\"\"\n",
|
|
" print(\"\\n\" + \"=\" * 70)\n",
|
|
" print(\"WARNING: DEMO MODE: Using synthetic bars (Chapter 3 data unavailable)\")\n",
|
|
" print(\" Results are illustrative only. For production:\")\n",
|
|
" print(\" 1. Run Chapter 3 microstructure notebooks first\")\n",
|
|
" print(\" 2. Generate tick/volume/dollar bars from real market data\")\n",
|
|
" print(\"=\" * 70 + \"\\n\")\n",
|
|
" rng = np.random.default_rng(seed)\n",
|
|
"\n",
|
|
" # Simulate irregular inter-arrival times (log-normal, like real bars)\n",
|
|
" dt_mean = 60 # mean 60 seconds between bars\n",
|
|
" dt_std = 30 # high variance (realistic for dollar bars)\n",
|
|
" dt = rng.lognormal(np.log(dt_mean), np.log(1 + dt_std / dt_mean), n_bars)\n",
|
|
"\n",
|
|
" # Cumulative timestamps\n",
|
|
" timestamps = np.cumsum(dt)\n",
|
|
" base_time = datetime(2024, 1, 2, 9, 30, tzinfo=UTC) # Market open\n",
|
|
" timestamps_dt = [base_time + timedelta(seconds=int(t)) for t in timestamps]\n",
|
|
"\n",
|
|
" # Simulate OHLCV (geometric Brownian motion)\n",
|
|
" returns = rng.normal(0.0001, 0.001, n_bars) # Small returns per bar\n",
|
|
" prices = 100 * np.exp(np.cumsum(returns))\n",
|
|
"\n",
|
|
" # OHLC from close prices with noise\n",
|
|
" close = prices\n",
|
|
" open_ = np.roll(close, 1)\n",
|
|
" open_[0] = close[0]\n",
|
|
" high = np.maximum(open_, close) * (1 + rng.uniform(0, 0.001, n_bars))\n",
|
|
" low = np.minimum(open_, close) * (1 - rng.uniform(0, 0.001, n_bars))\n",
|
|
"\n",
|
|
" # Volume (correlated with price movement)\n",
|
|
" volume = rng.exponential(1000, n_bars) * (1 + 10 * np.abs(returns))\n",
|
|
"\n",
|
|
" df = pl.DataFrame(\n",
|
|
" {\n",
|
|
" \"timestamp\": timestamps_dt,\n",
|
|
" \"open\": open_,\n",
|
|
" \"high\": high,\n",
|
|
" \"low\": low,\n",
|
|
" \"close\": close,\n",
|
|
" \"volume\": volume.astype(int),\n",
|
|
" }\n",
|
|
" )\n",
|
|
" print(f\"Generated {len(df)} synthetic irregular bars (Chapter 3 data unavailable)\")\n",
|
|
" return df"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "e09fe33c",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.00433,
|
|
"end_time": "2026-06-13T02:38:25.858274+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.853944+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### Load Chapter 3 Bar Data\n",
|
|
"\n",
|
|
"Loads information-theoretic bars generated in Chapter 3's microstructure notebooks.\n",
|
|
"Falls back to synthetic bars if the data is unavailable."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"id": "a9490394",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.868009Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.867882Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.871075Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.870613Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.009401,
|
|
"end_time": "2026-06-13T02:38:25.872026+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.862625+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def load_chapter3_bars(bar_type: str = \"dollar\") -> pl.DataFrame:\n",
|
|
" \"\"\"\n",
|
|
" Load information-theoretic bars from Chapter 3 output.\n",
|
|
"\n",
|
|
" Args:\n",
|
|
" bar_type: One of 'tick', 'volume', 'dollar'\n",
|
|
"\n",
|
|
" Returns:\n",
|
|
" DataFrame with OHLCV and timestamp columns\n",
|
|
" \"\"\"\n",
|
|
" if bar_type not in (\"tick\", \"volume\", \"dollar\"):\n",
|
|
" raise ValueError(f\"bar_type must be one of 'tick', 'volume', 'dollar' (got {bar_type!r})\")\n",
|
|
" # Chapter 3 Databento notebook saves bars to get_output_dir(3, \"databento\")\n",
|
|
" bar_dir = get_output_dir(3, \"databento\")\n",
|
|
"\n",
|
|
" bar_path = bar_dir / f\"NVDA_{bar_type}_bars.parquet\"\n",
|
|
" if not bar_path.exists():\n",
|
|
" # Fallback to synthetic data when Chapter 3 hasn't been run\n",
|
|
" return generate_synthetic_irregular_bars(n_bars=N_BARS)\n",
|
|
"\n",
|
|
" df = pl.read_parquet(bar_path)\n",
|
|
" print(f\"Loaded {len(df)} {bar_type} bars from Chapter 3\")\n",
|
|
" print(f\"Columns: {df.columns}\")\n",
|
|
"\n",
|
|
" return df"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "5fef3056",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.004535,
|
|
"end_time": "2026-06-13T02:38:25.881202+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.876667+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### Compute Inter-Arrival Times\n",
|
|
"\n",
|
|
"Normalizes bar timestamps to the [0, 1] range for ODE integration. The variable\n",
|
|
"spacing between bars is the key signal that GT-GAN's Neural ODE exploits."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"id": "3e84ca30",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.888483Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.888353Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.891169Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.890749Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.006531,
|
|
"end_time": "2026-06-13T02:38:25.891726+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.885195+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def compute_inter_arrival_times(df: pl.DataFrame) -> np.ndarray:\n",
|
|
" \"\"\"\n",
|
|
" Compute normalized inter-arrival times from bar timestamps.\n",
|
|
"\n",
|
|
" Returns times in [0, 1] range for ODE integration.\n",
|
|
" \"\"\"\n",
|
|
" # Get timestamps in nanoseconds\n",
|
|
" timestamps = df.select(\"timestamp\").to_numpy().flatten()\n",
|
|
"\n",
|
|
" # Convert to numeric (nanoseconds since epoch)\n",
|
|
" if hasattr(timestamps[0], \"value\"):\n",
|
|
" # datetime64 objects\n",
|
|
" times_ns = np.array([t.value for t in timestamps], dtype=np.float64)\n",
|
|
" else:\n",
|
|
" # Already numeric\n",
|
|
" times_ns = timestamps.astype(np.float64)\n",
|
|
"\n",
|
|
" # Normalize to [0, 1] for ODE integration\n",
|
|
" times_norm = (times_ns - times_ns.min()) / (times_ns.max() - times_ns.min() + 1e-10)\n",
|
|
"\n",
|
|
" return times_norm.astype(np.float32)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "cef71a86",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.002472,
|
|
"end_time": "2026-06-13T02:38:25.896905+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.894433+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### Create Irregular Sequences\n",
|
|
"\n",
|
|
"Slides a window over the bar data to create training sequences, preserving\n",
|
|
"the per-sequence normalized timestamps that encode irregular spacing."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"id": "d1238f5a",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.902448Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.902339Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.905679Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.905306Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.006572,
|
|
"end_time": "2026-06-13T02:38:25.905965+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.899393+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def create_irregular_sequences(\n",
|
|
" df: pl.DataFrame, features: list[str], seq_length: int, times: np.ndarray\n",
|
|
") -> tuple[np.ndarray, np.ndarray]:\n",
|
|
" \"\"\"\n",
|
|
" Create sequences with their associated irregular timestamps.\n",
|
|
"\n",
|
|
" Args:\n",
|
|
" df: DataFrame with bar data\n",
|
|
" features: Column names to use as features\n",
|
|
" seq_length: Number of bars per sequence\n",
|
|
" times: Normalized timestamps for each bar\n",
|
|
"\n",
|
|
" Returns:\n",
|
|
" sequences: Shape (n_seq, seq_length, n_features)\n",
|
|
" seq_times: Shape (n_seq, seq_length) - normalized times per sequence\n",
|
|
" \"\"\"\n",
|
|
" # Extract feature matrix\n",
|
|
" data = df.select(features).to_numpy().astype(np.float32)\n",
|
|
"\n",
|
|
" n_sequences = len(data) - seq_length + 1\n",
|
|
" n_features = len(features)\n",
|
|
"\n",
|
|
" sequences = np.zeros((n_sequences, seq_length, n_features), dtype=np.float32)\n",
|
|
" seq_times = np.zeros((n_sequences, seq_length), dtype=np.float32)\n",
|
|
"\n",
|
|
" for i in range(n_sequences):\n",
|
|
" sequences[i] = data[i : i + seq_length]\n",
|
|
" # Normalize times within each sequence to [0, 1]\n",
|
|
" t_seq = times[i : i + seq_length]\n",
|
|
" t_norm = (t_seq - t_seq.min()) / (t_seq.max() - t_seq.min() + 1e-10)\n",
|
|
" # Ensure strictly increasing (add small epsilon for duplicate timestamps)\n",
|
|
" for j in range(1, len(t_norm)):\n",
|
|
" if t_norm[j] <= t_norm[j - 1]:\n",
|
|
" t_norm[j] = t_norm[j - 1] + 1e-6\n",
|
|
" seq_times[i] = t_norm\n",
|
|
"\n",
|
|
" return sequences, seq_times"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "24cbe696",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.002459,
|
|
"end_time": "2026-06-13T02:38:25.910961+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.908502+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### Prepare Training Data\n",
|
|
"\n",
|
|
"Load bars, compute inter-arrival times, split into train/holdout, and\n",
|
|
"create normalized sequences for model input."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"id": "65e82cdc",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.916763Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.916653Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.932502Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.932111Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.019272,
|
|
"end_time": "2026-06-13T02:38:25.932843+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.913571+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Loaded 446 dollar bars from Chapter 3\n",
|
|
"Columns: ['timestamp', 'open', 'high', 'low', 'close', 'volume', 'tick_count', 'dollar_volume', 'vwap', 'bar_start', 'bar_end', 'duration_sec']\n",
|
|
"\n",
|
|
"Inter-arrival time statistics (normalized [0,1]):\n",
|
|
" Mean: 0.002247, Std: 0.002644\n",
|
|
" Min: 0.000000, Max: 0.030489\n",
|
|
" CV (std/mean): 1.18\n",
|
|
"\n",
|
|
"Train/Holdout split:\n",
|
|
" Training: 357 bars\n",
|
|
" Holdout: 89 bars\n",
|
|
"\n",
|
|
"Created 326 training sequences\n",
|
|
"Sequence shape: (326, 32, 2)\n",
|
|
"Time shape: (326, 32)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Load data\n",
|
|
"df = load_chapter3_bars(CONFIG[\"bar_type\"])\n",
|
|
"global_times = compute_inter_arrival_times(df)\n",
|
|
"\n",
|
|
"# Compute inter-arrival statistics\n",
|
|
"dt = np.diff(global_times)\n",
|
|
"print(\"\\nInter-arrival time statistics (normalized [0,1]):\")\n",
|
|
"print(f\" Mean: {dt.mean():.6f}, Std: {dt.std():.6f}\")\n",
|
|
"print(f\" Min: {dt.min():.6f}, Max: {dt.max():.6f}\")\n",
|
|
"print(f\" CV (std/mean): {dt.std() / dt.mean():.2f}\")\n",
|
|
"\n",
|
|
"# Train/holdout split (temporal)\n",
|
|
"n_total = len(df)\n",
|
|
"n_holdout = int(n_total * CONFIG[\"holdout_fraction\"])\n",
|
|
"n_train = n_total - n_holdout\n",
|
|
"\n",
|
|
"df_train = df.head(n_train)\n",
|
|
"df_holdout = df.tail(n_holdout)\n",
|
|
"times_train = global_times[:n_train]\n",
|
|
"times_holdout = global_times[n_train:]\n",
|
|
"\n",
|
|
"print(\"\\nTrain/Holdout split:\")\n",
|
|
"print(f\" Training: {n_train} bars\")\n",
|
|
"print(f\" Holdout: {n_holdout} bars\")\n",
|
|
"\n",
|
|
"# Create sequences from training data\n",
|
|
"sequences, seq_times = create_irregular_sequences(\n",
|
|
" df_train, CONFIG[\"features\"], CONFIG[\"seq_length\"], times_train\n",
|
|
")\n",
|
|
"n_features = len(CONFIG[\"features\"])\n",
|
|
"\n",
|
|
"# Normalize features to [0, 1] for stable training\n",
|
|
"seq_min = sequences.min(axis=(0, 1), keepdims=True)\n",
|
|
"seq_max = sequences.max(axis=(0, 1), keepdims=True)\n",
|
|
"sequences_norm = (sequences - seq_min) / (seq_max - seq_min + 1e-8)\n",
|
|
"\n",
|
|
"print(f\"\\nCreated {len(sequences)} training sequences\")\n",
|
|
"print(f\"Sequence shape: {sequences.shape}\")\n",
|
|
"print(f\"Time shape: {seq_times.shape}\")\n",
|
|
"\n",
|
|
"# Store normalization params\n",
|
|
"norm_params = {\"min\": seq_min.squeeze(), \"max\": seq_max.squeeze()}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "06d9e874",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.002683,
|
|
"end_time": "2026-06-13T02:38:25.938312+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.935629+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Neural ODE Components\n",
|
|
"\n",
|
|
"The core building block is a neural network that defines the derivative:\n",
|
|
"\n",
|
|
"$$\\frac{dh}{dt} = f_\\theta(h)$$\n",
|
|
"\n",
|
|
"Given an initial state $h(t_0)$, the ODE solver integrates forward to compute:\n",
|
|
"\n",
|
|
"$$h(t) = h(t_0) + \\int_{t_0}^{t} f_\\theta(h(s)) \\, ds$$\n",
|
|
"\n",
|
|
"This allows querying the hidden state at **any** time point, not just discrete steps."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "139824f3",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.002503,
|
|
"end_time": "2026-06-13T02:38:25.943559+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.941056+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### ODEFunc: Dynamics Network\n",
|
|
"\n",
|
|
"Defines the derivative $dh/dt = f_\\theta(h)$ used by `torchdiffeq`. This is the\n",
|
|
"core \"physics\" that governs how latent states evolve continuously in time."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"id": "6fc9bb53",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.949208Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.949125Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.951344Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.951022Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.005739,
|
|
"end_time": "2026-06-13T02:38:25.951818+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.946079+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"class ODEFunc(nn.Module):\n",
|
|
" \"\"\"\n",
|
|
" Neural network defining the ODE dynamics: dh/dt = f(h, t).\n",
|
|
"\n",
|
|
" This is the \"physics\" of our latent space - how states evolve over time.\n",
|
|
" \"\"\"\n",
|
|
"\n",
|
|
" def __init__(self, hidden_dim: int):\n",
|
|
" super().__init__()\n",
|
|
" self.net = nn.Sequential(\n",
|
|
" nn.Linear(hidden_dim, hidden_dim * 2),\n",
|
|
" nn.Tanh(),\n",
|
|
" nn.Linear(hidden_dim * 2, hidden_dim * 2),\n",
|
|
" nn.Tanh(),\n",
|
|
" nn.Linear(hidden_dim * 2, hidden_dim),\n",
|
|
" )\n",
|
|
"\n",
|
|
" def forward(self, t: torch.Tensor, h: torch.Tensor) -> torch.Tensor:\n",
|
|
" \"\"\"Compute derivative dh/dt (torchdiffeq interface).\"\"\"\n",
|
|
" return self.net(h)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "d7475d07",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.002511,
|
|
"end_time": "2026-06-13T02:38:25.957544+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.955033+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### TorchODEFunc: Adaptive Solver Drift Network\n",
|
|
"\n",
|
|
"`torchdiffeq.odeint` calls the drift network as `f(t, y)`, so the same module\n",
|
|
"can serve as the Euler function (state-only `f(y)` via the wrapper above) or\n",
|
|
"as the adaptive Dopri5 drift via this `(t, y)` signature."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"id": "96a414bc",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.963286Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.963207Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.965318Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.965009Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.005611,
|
|
"end_time": "2026-06-13T02:38:25.965666+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.960055+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"class TorchODEFunc(nn.Module):\n",
|
|
" \"\"\"Drift network with the (t, y) signature expected by ``torchdiffeq.odeint``.\"\"\"\n",
|
|
"\n",
|
|
" def __init__(self, hidden_dim: int):\n",
|
|
" super().__init__()\n",
|
|
" self.net = nn.Sequential(\n",
|
|
" nn.Linear(hidden_dim, hidden_dim * 2),\n",
|
|
" nn.Tanh(),\n",
|
|
" nn.Linear(hidden_dim * 2, hidden_dim * 2),\n",
|
|
" nn.Tanh(),\n",
|
|
" nn.Linear(hidden_dim * 2, hidden_dim),\n",
|
|
" )\n",
|
|
"\n",
|
|
" def forward(self, t: torch.Tensor, y: torch.Tensor) -> torch.Tensor:\n",
|
|
" \"\"\"Compute derivative dy/dt for the adaptive ODE solver.\"\"\"\n",
|
|
" return self.net(y)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "ff242edb",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.002518,
|
|
"end_time": "2026-06-13T02:38:25.970740+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.968222+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### GRU-ODE Cell: Continuous-Time GRU\n",
|
|
"\n",
|
|
"Combines discrete GRU updates (at observation times) with continuous ODE evolution\n",
|
|
"(between observations). Each sample's hidden state evolves according to its own\n",
|
|
"inter-arrival time -- no batch averaging. Based on De Brouwer et al. (2019)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"id": "ade63fc8",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.976510Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.976438Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.979719Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.979396Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.006739,
|
|
"end_time": "2026-06-13T02:38:25.980150+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.973411+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"class GRUODECell(nn.Module):\n",
|
|
" \"\"\"\n",
|
|
" GRU-ODE: A continuous-time version of GRU with per-sample dt handling.\n",
|
|
"\n",
|
|
" When an observation arrives, update the hidden state using GRU gates.\n",
|
|
" Between observations, evolve the state using the ODE.\n",
|
|
"\n",
|
|
" For efficiency:\n",
|
|
" - Euler method: Direct vectorized computation (no solver overhead)\n",
|
|
" - Dopri5: Uses torchode for adaptive stepping with per-sample times\n",
|
|
"\n",
|
|
" Reference: De Brouwer et al. (2019) \"GRU-ODE-Bayes\"\n",
|
|
" \"\"\"\n",
|
|
"\n",
|
|
" def __init__(self, input_dim: int, hidden_dim: int, ode_method: str = \"euler\"):\n",
|
|
" super().__init__()\n",
|
|
" self.hidden_dim = hidden_dim\n",
|
|
" self.ode_method = ode_method\n",
|
|
"\n",
|
|
" # GRU gates for observation updates\n",
|
|
" self.W_z = nn.Linear(input_dim + hidden_dim, hidden_dim)\n",
|
|
" self.W_r = nn.Linear(input_dim + hidden_dim, hidden_dim)\n",
|
|
" self.W_h = nn.Linear(input_dim + hidden_dim, hidden_dim)\n",
|
|
"\n",
|
|
" # ODE function for continuous evolution\n",
|
|
" self.ode_func = TorchODEFunc(hidden_dim)\n",
|
|
"\n",
|
|
" def forward(\n",
|
|
" self,\n",
|
|
" x: torch.Tensor,\n",
|
|
" h: torch.Tensor,\n",
|
|
" dt_per_sample: torch.Tensor,\n",
|
|
" ) -> torch.Tensor:\n",
|
|
" \"\"\"\n",
|
|
" Process one timestep: ODE evolution + GRU update.\n",
|
|
"\n",
|
|
" Args:\n",
|
|
" x: Observation, shape (batch, input_dim)\n",
|
|
" h: Previous hidden state, shape (batch, hidden_dim)\n",
|
|
" dt_per_sample: Time since last step for each sample, shape (batch,)\n",
|
|
"\n",
|
|
" Returns:\n",
|
|
" Updated hidden state\n",
|
|
" \"\"\"\n",
|
|
" device = h.device\n",
|
|
"\n",
|
|
" # Evolve hidden state via ODE with per-sample dt\n",
|
|
" dt_mask = dt_per_sample > 1e-6\n",
|
|
" if dt_mask.any():\n",
|
|
" if self.ode_method == \"euler\":\n",
|
|
" # Fast vectorized Euler: h_new = h + dt * f(t, h)\n",
|
|
" dt_expanded = dt_per_sample.unsqueeze(-1) # (batch, 1)\n",
|
|
" dh_dt = self.ode_func(torch.tensor(0.0, device=device), h)\n",
|
|
" h = h + dt_expanded * dh_dt\n",
|
|
" else:\n",
|
|
" # Adaptive Dopri5 via torchdiffeq with batch-averaged time span.\n",
|
|
" dt_mean = dt_per_sample.mean().item()\n",
|
|
" t_span = torch.tensor([0.0, max(dt_mean, 1e-5)], device=device)\n",
|
|
" h = odeint(self.ode_func, h, t_span, method=\"dopri5\")[-1]\n",
|
|
"\n",
|
|
" # GRU update at observation time\n",
|
|
" combined = torch.cat([x, h], dim=1)\n",
|
|
" z = torch.sigmoid(self.W_z(combined))\n",
|
|
" r = torch.sigmoid(self.W_r(combined))\n",
|
|
" h_tilde = torch.tanh(self.W_h(torch.cat([x, r * h], dim=1)))\n",
|
|
" h_new = (1 - z) * h + z * h_tilde\n",
|
|
"\n",
|
|
" return h_new"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "2b78301d",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.002607,
|
|
"end_time": "2026-06-13T02:38:25.985801+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.983194+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Encoder and Decoder"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"id": "fe5f4388",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:25.991483Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:25.991407Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:25.994118Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:25.993858Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.006319,
|
|
"end_time": "2026-06-13T02:38:25.994655+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.988336+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"class ODEEncoder(nn.Module):\n",
|
|
" \"\"\"\n",
|
|
" Encode irregular time series to latent representation using GRU-ODE.\n",
|
|
" \"\"\"\n",
|
|
"\n",
|
|
" def __init__(self, input_dim: int, hidden_dim: int, latent_dim: int, ode_method: str = \"euler\"):\n",
|
|
" super().__init__()\n",
|
|
" self.hidden_dim = hidden_dim\n",
|
|
"\n",
|
|
" self.gru_ode = GRUODECell(input_dim, hidden_dim, ode_method=ode_method)\n",
|
|
" self.fc_mu = nn.Linear(hidden_dim, latent_dim)\n",
|
|
" self.fc_logvar = nn.Linear(hidden_dim, latent_dim)\n",
|
|
"\n",
|
|
" def forward(\n",
|
|
" self,\n",
|
|
" x: torch.Tensor,\n",
|
|
" times: torch.Tensor,\n",
|
|
" ) -> tuple[torch.Tensor, torch.Tensor]:\n",
|
|
" \"\"\"\n",
|
|
" Encode irregular sequence to latent distribution.\n",
|
|
"\n",
|
|
" Args:\n",
|
|
" x: Observations, shape (batch, seq_len, input_dim)\n",
|
|
" times: Observation times, shape (batch, seq_len)\n",
|
|
"\n",
|
|
" Returns:\n",
|
|
" mu, logvar: Latent distribution parameters\n",
|
|
" \"\"\"\n",
|
|
" batch_size, seq_len, _ = x.shape\n",
|
|
" device = x.device\n",
|
|
"\n",
|
|
" h = torch.zeros(batch_size, self.hidden_dim, device=device)\n",
|
|
"\n",
|
|
" for t in range(seq_len):\n",
|
|
" # Per-sample dt (no batch averaging)\n",
|
|
" if t > 0:\n",
|
|
" dt_per_sample = times[:, t] - times[:, t - 1]\n",
|
|
" else:\n",
|
|
" dt_per_sample = torch.zeros(batch_size, device=device)\n",
|
|
" # Clamp to non-negative\n",
|
|
" dt_per_sample = torch.clamp(dt_per_sample, min=0.0)\n",
|
|
" h = self.gru_ode(x[:, t], h, dt_per_sample)\n",
|
|
"\n",
|
|
" mu = self.fc_mu(h)\n",
|
|
" logvar = self.fc_logvar(h)\n",
|
|
"\n",
|
|
" return mu, logvar"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "28df4335",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.002806,
|
|
"end_time": "2026-06-13T02:38:26.001986+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:25.999180+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### ODE Decoder\n",
|
|
"\n",
|
|
"Decodes latent representations back to time series observations at given\n",
|
|
"query times using a Neural ODE to evolve hidden states continuously."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"id": "cb623e34",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:26.007623Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:26.007557Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:26.010489Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:26.010059Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.006247,
|
|
"end_time": "2026-06-13T02:38:26.010768+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.004521+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"class ODEDecoder(nn.Module):\n",
|
|
" \"\"\"\n",
|
|
" Decode latent representation to time series using Neural ODE.\n",
|
|
" \"\"\"\n",
|
|
"\n",
|
|
" def __init__(\n",
|
|
" self, latent_dim: int, hidden_dim: int, output_dim: int, ode_method: str = \"euler\"\n",
|
|
" ):\n",
|
|
" super().__init__()\n",
|
|
" self.hidden_dim = hidden_dim\n",
|
|
" self.ode_method = ode_method\n",
|
|
"\n",
|
|
" self.fc_init = nn.Linear(latent_dim, hidden_dim)\n",
|
|
" self.ode_func = ODEFunc(hidden_dim)\n",
|
|
" self.fc_out = nn.Linear(hidden_dim, output_dim)\n",
|
|
"\n",
|
|
" def forward(self, z: torch.Tensor, times: torch.Tensor) -> torch.Tensor:\n",
|
|
" \"\"\"\n",
|
|
" Decode latent code to observations at given times.\n",
|
|
"\n",
|
|
" Args:\n",
|
|
" z: Latent code, shape (batch, latent_dim)\n",
|
|
" times: Query times, shape (batch, n_times)\n",
|
|
"\n",
|
|
" Returns:\n",
|
|
" Observations, shape (batch, n_times, output_dim)\n",
|
|
" \"\"\"\n",
|
|
" device = z.device\n",
|
|
"\n",
|
|
" h0 = torch.tanh(self.fc_init(z))\n",
|
|
" t_unique = times[0]\n",
|
|
"\n",
|
|
" eps = 1e-5\n",
|
|
" t_start = torch.tensor([t_unique[0].item() - eps], device=device)\n",
|
|
" t_span = torch.cat([t_start, t_unique])\n",
|
|
"\n",
|
|
" h_trajectory = odeint(self.ode_func, h0, t_span, method=self.ode_method)\n",
|
|
" h_at_times = h_trajectory[1:].permute(1, 0, 2)\n",
|
|
"\n",
|
|
" output = self.fc_out(h_at_times)\n",
|
|
"\n",
|
|
" return output"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "9c81ed88",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.002503,
|
|
"end_time": "2026-06-13T02:38:26.015989+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.013486+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Generator and Discriminator\n",
|
|
"\n",
|
|
"The GAN components operate in latent space. The generator maps noise through a\n",
|
|
"Neural ODE to produce latent codes, while the discriminator uses the same GRU-ODE\n",
|
|
"architecture to classify sequences as real or synthetic."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "86c8d8b7",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.0025,
|
|
"end_time": "2026-06-13T02:38:26.021006+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.018506+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### ODE Generator\n",
|
|
"\n",
|
|
"Maps random noise to latent codes by evolving initial states through\n",
|
|
"a Neural ODE. The ODE trajectory acts as a learned nonlinear transformation."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"id": "284a0737",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:26.026585Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:26.026521Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:26.029071Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:26.028713Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.005791,
|
|
"end_time": "2026-06-13T02:38:26.029322+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.023531+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"class ODEGenerator(nn.Module):\n",
|
|
" \"\"\"Generate latent trajectories from noise using Neural ODE.\"\"\"\n",
|
|
"\n",
|
|
" def __init__(self, noise_dim: int, latent_dim: int, hidden_dim: int, ode_method: str = \"euler\"):\n",
|
|
" super().__init__()\n",
|
|
" self.noise_dim = noise_dim\n",
|
|
" self.ode_method = ode_method\n",
|
|
"\n",
|
|
" self.fc_init = nn.Linear(noise_dim, hidden_dim)\n",
|
|
" self.ode_func = ODEFunc(hidden_dim)\n",
|
|
" self.fc_out = nn.Linear(hidden_dim, latent_dim)\n",
|
|
"\n",
|
|
" def forward(self, z: torch.Tensor) -> torch.Tensor:\n",
|
|
" \"\"\"Generate latent code from noise.\"\"\"\n",
|
|
" device = z.device\n",
|
|
"\n",
|
|
" h0 = torch.tanh(self.fc_init(z))\n",
|
|
" t_span = torch.linspace(0, 1, 5, device=device)\n",
|
|
" h_trajectory = odeint(self.ode_func, h0, t_span, method=self.ode_method)\n",
|
|
" h_final = h_trajectory[-1]\n",
|
|
"\n",
|
|
" return self.fc_out(h_final)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "a748e342",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.002634,
|
|
"end_time": "2026-06-13T02:38:26.034482+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.031848+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### ODE Discriminator\n",
|
|
"\n",
|
|
"Processes sequences through GRU-ODE (respecting irregular timestamps) and\n",
|
|
"outputs a real/fake classification. The time-awareness is what distinguishes\n",
|
|
"this from a standard GRU discriminator."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"id": "235e942c",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:26.040066Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:26.039974Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:26.042937Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:26.042380Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.006206,
|
|
"end_time": "2026-06-13T02:38:26.043227+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.037021+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"class ODEDiscriminator(nn.Module):\n",
|
|
" \"\"\"Discriminate real vs fake sequences using ODE-based processing.\"\"\"\n",
|
|
"\n",
|
|
" def __init__(self, input_dim: int, hidden_dim: int, ode_method: str = \"euler\"):\n",
|
|
" super().__init__()\n",
|
|
" self.hidden_dim = hidden_dim\n",
|
|
" self.gru_ode = GRUODECell(input_dim, hidden_dim, ode_method=ode_method)\n",
|
|
" self.fc_out = nn.Linear(hidden_dim, 1)\n",
|
|
"\n",
|
|
" def forward(self, x: torch.Tensor, times: torch.Tensor) -> torch.Tensor:\n",
|
|
" \"\"\"Classify sequence as real or fake.\"\"\"\n",
|
|
" batch_size, seq_len, _ = x.shape\n",
|
|
" device = x.device\n",
|
|
"\n",
|
|
" h = torch.zeros(batch_size, self.hidden_dim, device=device)\n",
|
|
"\n",
|
|
" for t in range(seq_len):\n",
|
|
" # Per-sample dt (no batch averaging)\n",
|
|
" if t > 0:\n",
|
|
" dt_per_sample = times[:, t] - times[:, t - 1]\n",
|
|
" else:\n",
|
|
" dt_per_sample = torch.zeros(batch_size, device=device)\n",
|
|
" dt_per_sample = torch.clamp(dt_per_sample, min=0.0)\n",
|
|
" h = self.gru_ode(x[:, t], h, dt_per_sample)\n",
|
|
"\n",
|
|
" return self.fc_out(h)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "b6f9fdd6",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.00253,
|
|
"end_time": "2026-06-13T02:38:26.048489+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.045959+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## GT-GAN Model"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"id": "ad136498",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:26.054305Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:26.054180Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:26.183933Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:26.183527Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.133497,
|
|
"end_time": "2026-06-13T02:38:26.184529+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.051032+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"GT-GAN parameters: 26,859\n",
|
|
"\n",
|
|
"Loading checkpoint from: 05_synthetic_data/output/gtgan/checkpoints/gtgan_model.pt\n",
|
|
"Checkpoint loaded successfully - skipping training\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"class GTGAN(nn.Module):\n",
|
|
" \"\"\"\n",
|
|
" GT-GAN-inspired model for time series with irregular timestamps.\n",
|
|
"\n",
|
|
" Key difference from TimeGAN: explicitly models variable dt between observations.\n",
|
|
" \"\"\"\n",
|
|
"\n",
|
|
" def __init__(\n",
|
|
" self,\n",
|
|
" input_dim: int,\n",
|
|
" hidden_dim: int,\n",
|
|
" latent_dim: int,\n",
|
|
" noise_dim: int,\n",
|
|
" ode_method: str = \"euler\",\n",
|
|
" ):\n",
|
|
" super().__init__()\n",
|
|
"\n",
|
|
" self.encoder = ODEEncoder(input_dim, hidden_dim, latent_dim, ode_method=ode_method)\n",
|
|
" self.decoder = ODEDecoder(latent_dim, hidden_dim, input_dim, ode_method=ode_method)\n",
|
|
" self.generator = ODEGenerator(noise_dim, latent_dim, hidden_dim, ode_method=ode_method)\n",
|
|
" self.discriminator = ODEDiscriminator(input_dim, hidden_dim, ode_method=ode_method)\n",
|
|
"\n",
|
|
" self.latent_dim = latent_dim\n",
|
|
" self.noise_dim = noise_dim\n",
|
|
"\n",
|
|
" def encode(self, x: torch.Tensor, times: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor]:\n",
|
|
" return self.encoder(x, times)\n",
|
|
"\n",
|
|
" def decode(self, z: torch.Tensor, times: torch.Tensor) -> torch.Tensor:\n",
|
|
" return self.decoder(z, times)\n",
|
|
"\n",
|
|
" def generate(self, batch_size: int, times: torch.Tensor, device: torch.device) -> torch.Tensor:\n",
|
|
" noise = torch.randn(batch_size, self.noise_dim, device=device)\n",
|
|
" z = self.generator(noise)\n",
|
|
" return self.decode(z, times)\n",
|
|
"\n",
|
|
" def reparameterize(self, mu: torch.Tensor, logvar: torch.Tensor) -> torch.Tensor:\n",
|
|
" std = torch.exp(0.5 * logvar)\n",
|
|
" eps = torch.randn_like(std)\n",
|
|
" return mu + eps * std\n",
|
|
"\n",
|
|
"\n",
|
|
"# Initialize model\n",
|
|
"model = GTGAN(\n",
|
|
" input_dim=n_features,\n",
|
|
" hidden_dim=CONFIG[\"hidden_dim\"],\n",
|
|
" latent_dim=CONFIG[\"latent_dim\"],\n",
|
|
" noise_dim=CONFIG[\"latent_dim\"],\n",
|
|
" ode_method=CONFIG[\"ode_method\"],\n",
|
|
").to(device)\n",
|
|
"\n",
|
|
"print(f\"GT-GAN parameters: {sum(p.numel() for p in model.parameters()):,}\")\n",
|
|
"\n",
|
|
"# Check for existing checkpoint\n",
|
|
"SKIP_TRAINING = False\n",
|
|
"if CHECKPOINT_PATH.exists() and not RETRAIN:\n",
|
|
" print(f\"\\nLoading checkpoint from: {CHECKPOINT_PATH}\")\n",
|
|
" checkpoint = torch.load(CHECKPOINT_PATH, map_location=device, weights_only=False)\n",
|
|
" model.encoder.load_state_dict(checkpoint[\"encoder\"])\n",
|
|
" model.decoder.load_state_dict(checkpoint[\"decoder\"])\n",
|
|
" model.generator.load_state_dict(checkpoint[\"generator\"])\n",
|
|
" model.discriminator.load_state_dict(checkpoint[\"discriminator\"])\n",
|
|
" norm_params = {\n",
|
|
" \"min\": np.array(checkpoint[\"scaler\"][\"min\"]),\n",
|
|
" \"max\": np.array(checkpoint[\"scaler\"][\"max\"]),\n",
|
|
" }\n",
|
|
" print(\"Checkpoint loaded successfully - skipping training\")\n",
|
|
" SKIP_TRAINING = True\n",
|
|
"else:\n",
|
|
" if RETRAIN:\n",
|
|
" print(\"\\nRETRAIN=True: Training from scratch\")\n",
|
|
" else:\n",
|
|
" print(f\"\\nNo checkpoint found at: {CHECKPOINT_PATH}\")\n",
|
|
" print(\"Training from scratch...\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "ebbd0dda",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.003018,
|
|
"end_time": "2026-06-13T02:38:26.192229+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.189211+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Training Loop"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"id": "a160f781",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:26.198031Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:26.197952Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:26.202580Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:26.202241Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.008003,
|
|
"end_time": "2026-06-13T02:38:26.202829+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.194826+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def train_gtgan(\n",
|
|
" model: GTGAN,\n",
|
|
" sequences: np.ndarray,\n",
|
|
" times: np.ndarray,\n",
|
|
" config: dict,\n",
|
|
" device: torch.device,\n",
|
|
") -> dict:\n",
|
|
" \"\"\"\n",
|
|
" Train GT-GAN model on irregular time series.\n",
|
|
"\n",
|
|
" Per Jeon et al. (NeurIPS 2022): Step-based training (10000 steps)\n",
|
|
" instead of epoch-based.\n",
|
|
" \"\"\"\n",
|
|
" opt_ae = optim.Adam(\n",
|
|
" list(model.encoder.parameters()) + list(model.decoder.parameters()),\n",
|
|
" lr=config[\"learning_rate\"],\n",
|
|
" )\n",
|
|
" opt_g = optim.Adam(model.generator.parameters(), lr=config[\"learning_rate\"])\n",
|
|
" opt_d = optim.Adam(model.discriminator.parameters(), lr=config[\"learning_rate\"])\n",
|
|
"\n",
|
|
" seq_tensor = torch.FloatTensor(sequences)\n",
|
|
" time_tensor = torch.FloatTensor(times)\n",
|
|
" dataset = TensorDataset(seq_tensor, time_tensor)\n",
|
|
" dataloader = DataLoader(dataset, batch_size=config[\"batch_size\"], shuffle=True)\n",
|
|
"\n",
|
|
" losses = {\"recon\": [], \"d_real\": [], \"d_fake\": [], \"g\": []}\n",
|
|
"\n",
|
|
" # Step-based training (not epoch-based) per Jeon et al.\n",
|
|
" total_steps = config.get(\"max_steps\", 10000)\n",
|
|
"\n",
|
|
" print(f\"\\nTraining GT-GAN for {total_steps} steps...\")\n",
|
|
" print(f\" Sequences: {len(sequences)}, Features: {sequences.shape[-1]}\")\n",
|
|
" print(f\" Batch size: {config['batch_size']}, Learning rate: {config['learning_rate']}\")\n",
|
|
"\n",
|
|
" # Create infinite iterator over batches\n",
|
|
" def infinite_dataloader():\n",
|
|
" while True:\n",
|
|
" yield from dataloader\n",
|
|
"\n",
|
|
" data_iter = infinite_dataloader()\n",
|
|
" pbar = tqdm(range(total_steps), desc=f\"Training ({total_steps} steps)\")\n",
|
|
"\n",
|
|
" for step in pbar:\n",
|
|
" batch_seq, batch_time = next(data_iter)\n",
|
|
" batch_seq = batch_seq.to(device)\n",
|
|
" batch_time = batch_time.to(device)\n",
|
|
" batch_size = batch_seq.shape[0]\n",
|
|
"\n",
|
|
" # Phase 1: Autoencoder\n",
|
|
" opt_ae.zero_grad()\n",
|
|
" mu, logvar = model.encode(batch_seq, batch_time)\n",
|
|
" z = model.reparameterize(mu, logvar)\n",
|
|
" recon = model.decode(z, batch_time)\n",
|
|
" recon_loss = nn.functional.mse_loss(recon, batch_seq)\n",
|
|
" kl_loss = -0.5 * torch.mean(1 + logvar - mu.pow(2) - logvar.exp())\n",
|
|
" ae_loss = recon_loss + 0.1 * kl_loss\n",
|
|
" ae_loss.backward()\n",
|
|
" opt_ae.step()\n",
|
|
"\n",
|
|
" # Phase 2: Discriminator\n",
|
|
" opt_d.zero_grad()\n",
|
|
" d_real = model.discriminator(batch_seq, batch_time)\n",
|
|
" loss_d_real = nn.functional.binary_cross_entropy_with_logits(\n",
|
|
" d_real, torch.ones_like(d_real)\n",
|
|
" )\n",
|
|
" with torch.no_grad():\n",
|
|
" fake_seq = model.generate(batch_size, batch_time, device)\n",
|
|
" d_fake = model.discriminator(fake_seq, batch_time)\n",
|
|
" loss_d_fake = nn.functional.binary_cross_entropy_with_logits(\n",
|
|
" d_fake, torch.zeros_like(d_fake)\n",
|
|
" )\n",
|
|
" loss_d = loss_d_real + loss_d_fake\n",
|
|
" loss_d.backward()\n",
|
|
" opt_d.step()\n",
|
|
"\n",
|
|
" # Phase 3: Generator\n",
|
|
" opt_g.zero_grad()\n",
|
|
" fake_seq = model.generate(batch_size, batch_time, device)\n",
|
|
" d_fake = model.discriminator(fake_seq, batch_time)\n",
|
|
" loss_g = nn.functional.binary_cross_entropy_with_logits(d_fake, torch.ones_like(d_fake))\n",
|
|
" loss_g.backward()\n",
|
|
" opt_g.step()\n",
|
|
"\n",
|
|
" # Record losses\n",
|
|
" losses[\"recon\"].append(recon_loss.item())\n",
|
|
" losses[\"d_real\"].append(loss_d_real.item())\n",
|
|
" losses[\"d_fake\"].append(loss_d_fake.item())\n",
|
|
" losses[\"g\"].append(loss_g.item())\n",
|
|
"\n",
|
|
" if step % max(1, total_steps // 10) == 0:\n",
|
|
" pbar.set_postfix(\n",
|
|
" {\n",
|
|
" \"Recon\": f\"{recon_loss.item():.4f}\",\n",
|
|
" \"D_real\": f\"{loss_d_real.item():.3f}\",\n",
|
|
" \"G\": f\"{loss_g.item():.3f}\",\n",
|
|
" }\n",
|
|
" )\n",
|
|
"\n",
|
|
" print(\"Training complete!\")\n",
|
|
" return losses"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "0fe8e40d",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.002673,
|
|
"end_time": "2026-06-13T02:38:26.208144+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.205471+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### Run Training\n",
|
|
"\n",
|
|
"Execute step-based training. Progress is logged every 10% of total steps."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"id": "3e6e06cb",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:26.215172Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:26.215089Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:26.217304Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:26.216962Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.0055,
|
|
"end_time": "2026-06-13T02:38:26.217531+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.212031+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"if not SKIP_TRAINING:\n",
|
|
" training_losses = train_gtgan(model, sequences_norm, seq_times, CONFIG, device)\n",
|
|
"\n",
|
|
" # Save checkpoint after training\n",
|
|
" CHECKPOINT_PATH.parent.mkdir(parents=True, exist_ok=True)\n",
|
|
" checkpoint_data = {\n",
|
|
" \"encoder\": model.encoder.state_dict(),\n",
|
|
" \"decoder\": model.decoder.state_dict(),\n",
|
|
" \"generator\": model.generator.state_dict(),\n",
|
|
" \"discriminator\": model.discriminator.state_dict(),\n",
|
|
" \"scaler\": {\n",
|
|
" \"min\": norm_params[\"min\"].tolist(),\n",
|
|
" \"max\": norm_params[\"max\"].tolist(),\n",
|
|
" },\n",
|
|
" \"config\": CONFIG,\n",
|
|
" }\n",
|
|
" torch.save(checkpoint_data, CHECKPOINT_PATH)\n",
|
|
" print(f\"\\nCheckpoint saved to: {CHECKPOINT_PATH}\")\n",
|
|
"else:\n",
|
|
" # Create dummy losses for visualization when loading from checkpoint\n",
|
|
" training_losses = {\"recon\": [], \"d_real\": [], \"d_fake\": [], \"g\": []}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "d9f9b1e4",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.002541,
|
|
"end_time": "2026-06-13T02:38:26.222644+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.220103+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Training Progress"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"id": "5619b450",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:26.228381Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:26.228263Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:26.231248Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:26.230963Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.006393,
|
|
"end_time": "2026-06-13T02:38:26.231568+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.225175+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Training skipped (loaded from checkpoint) - no training losses to plot\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"if training_losses[\"recon\"]: # Only plot if we have training losses\n",
|
|
" fig = make_subplots(\n",
|
|
" rows=1, cols=2, subplot_titles=[\"Reconstruction Loss\", \"Adversarial Losses\"]\n",
|
|
" )\n",
|
|
"\n",
|
|
" fig.add_trace(\n",
|
|
" go.Scatter(y=training_losses[\"recon\"], mode=\"lines\", name=\"Reconstruction\"),\n",
|
|
" row=1,\n",
|
|
" col=1,\n",
|
|
" )\n",
|
|
" fig.add_trace(\n",
|
|
" go.Scatter(y=training_losses[\"d_real\"], mode=\"lines\", name=\"D (real)\"), row=1, col=2\n",
|
|
" )\n",
|
|
" fig.add_trace(\n",
|
|
" go.Scatter(y=training_losses[\"d_fake\"], mode=\"lines\", name=\"D (fake)\"), row=1, col=2\n",
|
|
" )\n",
|
|
" fig.add_trace(go.Scatter(y=training_losses[\"g\"], mode=\"lines\", name=\"Generator\"), row=1, col=2)\n",
|
|
"\n",
|
|
" fig.update_layout(\n",
|
|
" title_text=\"GT-GAN Training Progress (Naturally Irregular Timestamps)\",\n",
|
|
" template=\"ml4t\",\n",
|
|
" height=400,\n",
|
|
" )\n",
|
|
" if not HEADLESS:\n",
|
|
" fig.show()\n",
|
|
"else:\n",
|
|
" print(\"Training skipped (loaded from checkpoint) - no training losses to plot\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "783b5f90",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.002542,
|
|
"end_time": "2026-06-13T02:38:26.236717+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.234175+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"**Interpretation**: The reconstruction loss should decrease steadily, indicating the\n",
|
|
"autoencoder learns to compress and reconstruct irregular sequences through the ODE\n",
|
|
"bottleneck. The adversarial losses (D real, D fake, Generator) should oscillate and\n",
|
|
"roughly balance -- if the discriminator dominates (D losses near 0), the generator\n",
|
|
"receives no useful gradient. A reconstruction MSE below ~0.01 indicates good\n",
|
|
"autoencoder performance; the GAN component then refines the latent distribution."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "1dfd9044",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.002591,
|
|
"end_time": "2026-06-13T02:38:26.241855+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.239264+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Generate Synthetic Irregular Sequences"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"id": "91efa7da",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:26.247680Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:26.247566Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:26.355104Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:26.354609Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.111038,
|
|
"end_time": "2026-06-13T02:38:26.355589+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.244551+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"Generated 200 synthetic sequences\n",
|
|
"Shape: (200, 32, 2)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"def generate_synthetic(\n",
|
|
" model: GTGAN, n_samples: int, times: torch.Tensor, device: torch.device\n",
|
|
") -> np.ndarray:\n",
|
|
" \"\"\"Generate synthetic sequences at given time points.\"\"\"\n",
|
|
" model.eval()\n",
|
|
" with torch.no_grad():\n",
|
|
" synthetic = model.generate(n_samples, times, device)\n",
|
|
" model.train()\n",
|
|
" return synthetic.cpu().numpy()\n",
|
|
"\n",
|
|
"\n",
|
|
"N_SYNTHETIC = min(200, len(sequences_norm))\n",
|
|
"sample_times = torch.FloatTensor(seq_times[:N_SYNTHETIC]).to(device)\n",
|
|
"synthetic_sequences = generate_synthetic(model, N_SYNTHETIC, sample_times, device)\n",
|
|
"\n",
|
|
"print(f\"\\nGenerated {len(synthetic_sequences)} synthetic sequences\")\n",
|
|
"print(f\"Shape: {synthetic_sequences.shape}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "815f184d",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.002684,
|
|
"end_time": "2026-06-13T02:38:26.362278+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.359594+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Evaluation\n",
|
|
"\n",
|
|
"### Fidelity: Visual Comparison with PCA and t-SNE\n",
|
|
"\n",
|
|
"We project both real and synthetic sequences into 2D to assess whether the\n",
|
|
"generator covers the same regions of the data manifold."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"id": "d2e01231",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:26.368151Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:26.368080Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:27.018836Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:27.018426Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.654322,
|
|
"end_time": "2026-06-13T02:38:27.019245+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:26.364923+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"findfont: Failed to find font weight semibold, now using 700.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"utils/style.py:764: UserWarning: The figure layout has changed to tight\n",
|
|
" plt.tight_layout()\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 1200x500 with 2 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"fig = plot_fidelity_comparison(\n",
|
|
" sequences_norm[:N_SYNTHETIC],\n",
|
|
" synthetic_sequences,\n",
|
|
" title=\"GT-GAN: Real vs Synthetic Distribution\",\n",
|
|
" n_samples=min(200, N_SYNTHETIC),\n",
|
|
" flatten_method=\"flatten\", # Flatten for irregular sequence comparison\n",
|
|
")\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "147dd88e",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.002937,
|
|
"end_time": "2026-06-13T02:38:27.025471+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:27.022534+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"**Interpretation**: Overlapping point clouds confirm that synthetic sequences occupy\n",
|
|
"similar regions of feature space as real data. GT-GAN's key strength is handling\n",
|
|
"irregular time sampling -- the interpolation metrics below test this capability."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "9634e637",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.003229,
|
|
"end_time": "2026-06-13T02:38:27.031640+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:27.028411+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### Interpolation at Arbitrary Timestamps\n",
|
|
"\n",
|
|
"GT-GAN's key capability: query the model at any timestamp, not just observed ones."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"id": "cc09d9bd",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:27.038949Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:27.038656Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:27.273199Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:27.272348Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.238946,
|
|
"end_time": "2026-06-13T02:38:27.273646+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:27.034700+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"=== Interpolation Evaluation ===\n",
|
|
"Reconstruction MSE: 0.027691\n",
|
|
"Interpolation smoothness: 0.000469\n",
|
|
"Real data smoothness: 0.029203\n",
|
|
"Smoothness ratio (interp/real): 0.02\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"def evaluate_interpolation(\n",
|
|
" model: GTGAN,\n",
|
|
" sequences: np.ndarray,\n",
|
|
" times: np.ndarray,\n",
|
|
" device: torch.device,\n",
|
|
") -> dict:\n",
|
|
" \"\"\"\n",
|
|
" Evaluate model's ability to interpolate at arbitrary timestamps.\n",
|
|
"\n",
|
|
" We encode a sequence, then decode at:\n",
|
|
" 1. Original timestamps (reconstruction)\n",
|
|
" 2. Midpoint timestamps (interpolation)\n",
|
|
" \"\"\"\n",
|
|
" model.eval()\n",
|
|
"\n",
|
|
" n_test = min(50, len(sequences))\n",
|
|
" test_seq = torch.FloatTensor(sequences[:n_test]).to(device)\n",
|
|
" test_time = torch.FloatTensor(times[:n_test]).to(device)\n",
|
|
"\n",
|
|
" with torch.no_grad():\n",
|
|
" mu, logvar = model.encode(test_seq, test_time)\n",
|
|
" z = model.reparameterize(mu, logvar)\n",
|
|
" recon = model.decode(z, test_time)\n",
|
|
"\n",
|
|
" # Interpolate at midpoints\n",
|
|
" midpoint_times = (test_time[:, :-1] + test_time[:, 1:]) / 2\n",
|
|
" interp = model.decode(z, midpoint_times)\n",
|
|
"\n",
|
|
" recon = recon.cpu().numpy()\n",
|
|
" interp = interp.cpu().numpy()\n",
|
|
" test_seq_np = test_seq.cpu().numpy()\n",
|
|
"\n",
|
|
" # Reconstruction error\n",
|
|
" recon_mse = np.mean((recon - test_seq_np) ** 2)\n",
|
|
"\n",
|
|
" # Interpolation should be \"between\" adjacent values (smoothness check)\n",
|
|
" interp_smoothness = np.mean(np.abs(np.diff(interp, axis=1)))\n",
|
|
" real_smoothness = np.mean(np.abs(np.diff(test_seq_np, axis=1)))\n",
|
|
"\n",
|
|
" model.train()\n",
|
|
"\n",
|
|
" return {\n",
|
|
" \"reconstruction_mse\": recon_mse,\n",
|
|
" \"interpolation_smoothness\": interp_smoothness,\n",
|
|
" \"real_smoothness\": real_smoothness,\n",
|
|
" \"smoothness_ratio\": interp_smoothness / (real_smoothness + 1e-8),\n",
|
|
" }\n",
|
|
"\n",
|
|
"\n",
|
|
"interp_results = evaluate_interpolation(model, sequences_norm, seq_times, device)\n",
|
|
"\n",
|
|
"print(\"\\n=== Interpolation Evaluation ===\")\n",
|
|
"print(f\"Reconstruction MSE: {interp_results['reconstruction_mse']:.6f}\")\n",
|
|
"print(f\"Interpolation smoothness: {interp_results['interpolation_smoothness']:.6f}\")\n",
|
|
"print(f\"Real data smoothness: {interp_results['real_smoothness']:.6f}\")\n",
|
|
"print(f\"Smoothness ratio (interp/real): {interp_results['smoothness_ratio']:.2f}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "40b109a1",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.003012,
|
|
"end_time": "2026-06-13T02:38:27.280065+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:27.277053+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"**Interpretation**: A smoothness ratio near 1.0 means the ODE-based interpolation\n",
|
|
"produces trajectories with similar step-to-step variation as the real data -- the model\n",
|
|
"has learned realistic continuous dynamics rather than simply averaging adjacent points.\n",
|
|
"A ratio well below 1.0 indicates over-smoothing (the ODE is too rigid), while a ratio\n",
|
|
"above 1.0 suggests noisy interpolation. The reconstruction MSE measures how faithfully\n",
|
|
"the encode-decode round-trip recovers the input; values below ~0.01 are acceptable."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "83345086",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.002881,
|
|
"end_time": "2026-06-13T02:38:27.285864+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:27.282983+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Statistical Comparison"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 25,
|
|
"id": "43547a2e",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:27.292476Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:27.292336Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:27.299282Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:27.298933Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.011091,
|
|
"end_time": "2026-06-13T02:38:27.299870+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:27.288779+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"=== Statistical Evaluation ===\n",
|
|
"Mean KS statistic: 0.6763\n",
|
|
"Max KS statistic: 0.8920\n",
|
|
"Correlation error: 0.4575\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"def evaluate_statistics(real: np.ndarray, synthetic: np.ndarray) -> dict:\n",
|
|
" \"\"\"Compare statistical properties.\"\"\"\n",
|
|
" real_flat = real.reshape(-1, real.shape[-1])\n",
|
|
" syn_flat = synthetic.reshape(-1, synthetic.shape[-1])\n",
|
|
"\n",
|
|
" # KS test per feature\n",
|
|
" ks_stats = []\n",
|
|
" for i in range(real.shape[-1]):\n",
|
|
" ks, _ = stats.ks_2samp(real_flat[:, i], syn_flat[:, i])\n",
|
|
" ks_stats.append(ks)\n",
|
|
"\n",
|
|
" # Correlation structure (if multiple features)\n",
|
|
" if real.shape[-1] > 1:\n",
|
|
" real_corr = np.corrcoef(real_flat.T)\n",
|
|
" syn_corr = np.corrcoef(syn_flat.T)\n",
|
|
" corr_error = np.mean(np.abs(real_corr - syn_corr))\n",
|
|
" else:\n",
|
|
" corr_error = 0.0\n",
|
|
"\n",
|
|
" return {\n",
|
|
" \"mean_ks\": np.mean(ks_stats),\n",
|
|
" \"max_ks\": np.max(ks_stats),\n",
|
|
" \"correlation_error\": corr_error,\n",
|
|
" }\n",
|
|
"\n",
|
|
"\n",
|
|
"stats_results = evaluate_statistics(sequences_norm[:N_SYNTHETIC], synthetic_sequences)\n",
|
|
"\n",
|
|
"print(\"\\n=== Statistical Evaluation ===\")\n",
|
|
"print(f\"Mean KS statistic: {stats_results['mean_ks']:.4f}\")\n",
|
|
"print(f\"Max KS statistic: {stats_results['max_ks']:.4f}\")\n",
|
|
"print(f\"Correlation error: {stats_results['correlation_error']:.4f}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "a9a3bd66",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.002934,
|
|
"end_time": "2026-06-13T02:38:27.305976+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:27.303042+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"**Interpretation**: The KS statistic measures distributional divergence (0 = identical,\n",
|
|
"1 = completely different). Values around 0.3-0.5 are typical for small-sample generative\n",
|
|
"models and indicate partial distributional match. High KS values (~0.7+) are expected\n",
|
|
"when training on limited data (a few hundred bars) and do not necessarily indicate\n",
|
|
"model failure -- they reflect the difficulty of capturing full distributional structure\n",
|
|
"from short irregular series. The correlation error measures how well the cross-feature\n",
|
|
"covariance is preserved."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "112a9a48",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.0029,
|
|
"end_time": "2026-06-13T02:38:27.311794+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:27.308894+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Visualization: Real vs Synthetic with Irregular Timestamps"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 26,
|
|
"id": "2e3d3ea5",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:27.318255Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:27.318184Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:28.072098Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:28.071673Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.757732,
|
|
"end_time": "2026-06-13T02:38:28.072449+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:27.314717+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"application/vnd.plotly.v1+json": {
|
|
"config": {
|
|
"plotlyServerURL": "https://plot.ly"
|
|
},
|
|
"data": [
|
|
{
|
|
"line": {
|
|
"color": "#0a1628"
|
|
},
|
|
"marker": {
|
|
"size": 4
|
|
},
|
|
"mode": "lines+markers",
|
|
"name": "Real",
|
|
"type": "scatter",
|
|
"x": {
|
|
"bdata": "AAAAAMSAAj4JYnY+9w/pPlqQET/9syo/fJQ0P0/mRT8n+lw/OC9mP94/bT95QXA/ZnRwPz2+cD+eGXE/m2VxP3PecT+5DnI/WTRzP8hWdD/Qv3Q/ta91Py4Adj+QhXY/5nd3P3vGeD9q43k/Urx6Px2Oez8ZwHw/o3R+PwAAgD8=",
|
|
"dtype": "f4"
|
|
},
|
|
"xaxis": "x",
|
|
"y": {
|
|
"bdata": "zLMvPyk2Hj/ShSw/0oUsPzLgEz9W0vw+SS4DP12C7j52yuE+XYLuPu/e9D4/vek+xHX2PmfzBz+Migk/ObIQP3sOFz85shA/o30RP/ZVCj8NpPk+qOPRPqoWsj6bP9g+D9fZPmfzBz8NpPk+oKUYPyD45D5dgu4+aiboPpWP5j4=",
|
|
"dtype": "f4"
|
|
},
|
|
"yaxis": "y"
|
|
},
|
|
{
|
|
"line": {
|
|
"color": "#C87533"
|
|
},
|
|
"marker": {
|
|
"size": 4
|
|
},
|
|
"mode": "lines+markers",
|
|
"name": "Synthetic",
|
|
"type": "scatter",
|
|
"x": {
|
|
"bdata": "AAAAAMSAAj4JYnY+9w/pPlqQET/9syo/fJQ0P0/mRT8n+lw/OC9mP94/bT95QXA/ZnRwPz2+cD+eGXE/m2VxP3PecT+5DnI/WTRzP8hWdD/Qv3Q/ta91Py4Adj+QhXY/5nd3P3vGeD9q43k/Urx6Px2Oez8ZwHw/o3R+PwAAgD8=",
|
|
"dtype": "f4"
|
|
},
|
|
"xaxis": "x2",
|
|
"y": {
|
|
"bdata": "RrICP/8nCT9M0A0/IXcUP4ETFz858Bg/+5QZP3GaGj8Qxhs/ni8cP6V7HD/Amhw/x5wcP7WfHD9Xoxw/WqYcPyCrHD8HrRw/irgcP9DDHD/cxxw/EtEcPybUHD872Rw/aOIcP/buHD+J+Rw/iAEdPzYJHT9TFB0/ACQdPwIyHT8=",
|
|
"dtype": "f4"
|
|
},
|
|
"yaxis": "y2"
|
|
}
|
|
],
|
|
"layout": {
|
|
"annotations": [
|
|
{
|
|
"font": {
|
|
"size": 16
|
|
},
|
|
"showarrow": false,
|
|
"text": "Real (Irregular Timestamps)",
|
|
"x": 0.5,
|
|
"xanchor": "center",
|
|
"xref": "paper",
|
|
"y": 1.0,
|
|
"yanchor": "bottom",
|
|
"yref": "paper"
|
|
},
|
|
{
|
|
"font": {
|
|
"size": 16
|
|
},
|
|
"showarrow": false,
|
|
"text": "Synthetic (Generated)",
|
|
"x": 0.5,
|
|
"xanchor": "center",
|
|
"xref": "paper",
|
|
"y": 0.375,
|
|
"yanchor": "bottom",
|
|
"yref": "paper"
|
|
}
|
|
],
|
|
"height": 500,
|
|
"template": {
|
|
"layout": {
|
|
"colorway": [
|
|
"#0a1628",
|
|
"#D4A84B",
|
|
"#1a2d4a",
|
|
"#C87533",
|
|
"#10b981",
|
|
"#ef4444"
|
|
],
|
|
"font": {
|
|
"color": "#334155",
|
|
"family": "DM Sans, DejaVu Sans, sans-serif",
|
|
"size": 11
|
|
},
|
|
"hoverlabel": {
|
|
"bgcolor": "white",
|
|
"font": {
|
|
"family": "DM Sans, DejaVu Sans, sans-serif",
|
|
"size": 11
|
|
}
|
|
},
|
|
"legend": {
|
|
"bgcolor": "rgba(255,255,255,0.8)",
|
|
"bordercolor": "#e8e8e6",
|
|
"borderwidth": 1,
|
|
"font": {
|
|
"size": 10
|
|
}
|
|
},
|
|
"paper_bgcolor": "#FAFAF9",
|
|
"plot_bgcolor": "white",
|
|
"title": {
|
|
"font": {
|
|
"color": "#0a1628",
|
|
"size": 14
|
|
},
|
|
"x": 0.5,
|
|
"xanchor": "center"
|
|
},
|
|
"xaxis": {
|
|
"gridcolor": "#e8e8e6",
|
|
"gridwidth": 0.5,
|
|
"linecolor": "#e8e8e6",
|
|
"showgrid": true,
|
|
"tickfont": {
|
|
"size": 10
|
|
},
|
|
"title": {
|
|
"font": {
|
|
"size": 11
|
|
}
|
|
}
|
|
},
|
|
"yaxis": {
|
|
"gridcolor": "#e8e8e6",
|
|
"gridwidth": 0.5,
|
|
"linecolor": "#e8e8e6",
|
|
"showgrid": true,
|
|
"tickfont": {
|
|
"size": 10
|
|
},
|
|
"title": {
|
|
"font": {
|
|
"size": 11
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"title": {
|
|
"text": "GT-GAN: Naturally Irregular Time Series Generation"
|
|
},
|
|
"xaxis": {
|
|
"anchor": "y",
|
|
"domain": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"matches": "x2",
|
|
"showticklabels": false
|
|
},
|
|
"xaxis2": {
|
|
"anchor": "y2",
|
|
"domain": [
|
|
0.0,
|
|
1.0
|
|
],
|
|
"title": {
|
|
"text": "Normalized Time"
|
|
}
|
|
},
|
|
"yaxis": {
|
|
"anchor": "x",
|
|
"domain": [
|
|
0.625,
|
|
1.0
|
|
],
|
|
"range": [
|
|
0.330903759598732,
|
|
0.7032626360654831
|
|
],
|
|
"title": {
|
|
"text": "close"
|
|
}
|
|
},
|
|
"yaxis2": {
|
|
"anchor": "x2",
|
|
"domain": [
|
|
0.0,
|
|
0.375
|
|
],
|
|
"range": [
|
|
0.330903759598732,
|
|
0.7032626360654831
|
|
],
|
|
"title": {
|
|
"text": "close"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArwAAAH0CAYAAADfWf7fAAAgAElEQVR4XuydBVRUzxfHv4pgdyc2NnZ3B4gK2N2NqKhYiChYWCgYKIqNrdiBHdjd3d2J8T93+O/+WFhk6+2yu3fO8RzZnfzM7Hvfd9+dOwl+/vzxF5yYABNgAkyACTABJsAEmICJEkjAgtdEZ5aHxQSYABNgAkyACTABJiAIsODlhcAEmAATYAJMgAkwASZg0gRY8Jr09PLgmAATYAJMgAkwASbABFjw8hpgAkyACTABJsAEmAATMGkCLHhNenp5cEyACTABJsAEmAATYAIseHkNMAEmwASYABNgAkyACZg0ARa8Jj29PDgmwASYABNgAkyACTABFry8BpgAE2ACTIAJMAEmwARMmgALXpOeXh4cE2ACTIAJMAEmwASYAAteXgNMgAkwASbABJgAE2ACJk2ABa9JTy8PjgkwASbABJgAE2ACTIAFL68BJsAEmAATYAJMgAkwAZMmwILXpKeXB8cEmAATYAJMgAkwASbAgpfXABNgAkyACTABJsAEmIBJE2DBa9LTy4NjAkyACTABJsAEmAATYMHLa4AJMAEmwASYABNgAkzApAmw4DXp6eXBMQEmwASYABNgAkyACbDg5TXABJgAE2ACTIAJMAEmYNIEWPCa9PTy4JgAE2ACTIAJMAEmwARY8PIaYAJMgAkwASbABJgAEzBpAix4TXp6eXBMgAkwASbABJgAE2ACLHh5DTABJsAEmAATYAJMgAmYNAEWvCY9vTw4JsAEmAATYAJMgAkwARa8vAaYABNgAkyACTABJsAETJoAC16Tnl4eHBNgAkyACTABJsAEmAALXl4DTIAJMAEmwASYABNgAiZNgAWvSU8vD44JMAEmwASYABNgAkyABS+vASbABJgAE2ACTIAJMAGTJsCC16SnlwfHBJgAE2ACTIAJMAEmwIKX1wATYAJMgAkwASbABJiASRNgwWvS08uDYwJMgAkwASbABJgAE2DBy2uACTABJsAEmAATYAJMwKQJsOA16enlwTEBJsAEmAATYAJMgAmw4OU1wASYABNgAkyACTABJmDSBFjwmvT08uCYABNgAkyACTABJsAEWPDyGmACTIAJMAEmwASYABMwaQIseE16enlwTIAJMAEmwASYABNgAix4eQ0wASbABJgAE2ACTIAJmDQB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fRhTePXhbPYoFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIkQAIkYHYCFF6zZ5j9IwESIAESIAESIAGLE6DwWnwAsPskQAIkQAIk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"
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"def plot_irregular_sequences(\n",
|
|
" real_seq: np.ndarray,\n",
|
|
" real_times: np.ndarray,\n",
|
|
" synthetic_seq: np.ndarray,\n",
|
|
" feature_idx: int = 0,\n",
|
|
") -> go.Figure:\n",
|
|
" \"\"\"Visualize sequences with their actual irregular timestamps.\"\"\"\n",
|
|
" fig = make_subplots(\n",
|
|
" rows=2,\n",
|
|
" cols=1,\n",
|
|
" subplot_titles=[\"Real (Irregular Timestamps)\", \"Synthetic (Generated)\"],\n",
|
|
" shared_xaxes=True,\n",
|
|
" )\n",
|
|
"\n",
|
|
" fig.add_trace(\n",
|
|
" go.Scatter(\n",
|
|
" x=real_times,\n",
|
|
" y=real_seq[:, feature_idx],\n",
|
|
" mode=\"lines+markers\",\n",
|
|
" name=\"Real\",\n",
|
|
" line=dict(color=COLORS[\"blue\"]),\n",
|
|
" marker=dict(size=4),\n",
|
|
" ),\n",
|
|
" row=1,\n",
|
|
" col=1,\n",
|
|
" )\n",
|
|
"\n",
|
|
" fig.add_trace(\n",
|
|
" go.Scatter(\n",
|
|
" x=real_times, # Same timestamps for comparison\n",
|
|
" y=synthetic_seq[:, feature_idx],\n",
|
|
" mode=\"lines+markers\",\n",
|
|
" name=\"Synthetic\",\n",
|
|
" line=dict(color=COLORS[\"copper\"]),\n",
|
|
" marker=dict(size=4),\n",
|
|
" ),\n",
|
|
" row=2,\n",
|
|
" col=1,\n",
|
|
" )\n",
|
|
"\n",
|
|
" # Share y-axis between paired panels so visual spread is comparable.\n",
|
|
" real_vals = real_seq[:, feature_idx]\n",
|
|
" synth_vals = synthetic_seq[:, feature_idx]\n",
|
|
" y_lo = float(min(real_vals.min(), synth_vals.min()))\n",
|
|
" y_hi = float(max(real_vals.max(), synth_vals.max()))\n",
|
|
" pad = 0.05 * (y_hi - y_lo if y_hi > y_lo else 1.0)\n",
|
|
" shared_range = [y_lo - pad, y_hi + pad]\n",
|
|
"\n",
|
|
" fig.update_layout(\n",
|
|
" title_text=\"GT-GAN: Naturally Irregular Time Series Generation\",\n",
|
|
" template=\"ml4t\",\n",
|
|
" height=500,\n",
|
|
" xaxis2_title=\"Normalized Time\",\n",
|
|
" yaxis_title=CONFIG[\"features\"][feature_idx],\n",
|
|
" yaxis2_title=CONFIG[\"features\"][feature_idx],\n",
|
|
" yaxis=dict(range=shared_range),\n",
|
|
" yaxis2=dict(range=shared_range),\n",
|
|
" )\n",
|
|
"\n",
|
|
" return fig\n",
|
|
"\n",
|
|
"\n",
|
|
"sample_idx = 0\n",
|
|
"fig = plot_irregular_sequences(\n",
|
|
" sequences_norm[sample_idx],\n",
|
|
" seq_times[sample_idx],\n",
|
|
" synthetic_sequences[sample_idx],\n",
|
|
")\n",
|
|
"if not HEADLESS:\n",
|
|
" fig.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "8068b50f",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.003322,
|
|
"end_time": "2026-06-13T02:38:28.079415+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.076093+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"**Interpretation**: The overlay of real vs synthetic irregular sequences reveals\n",
|
|
"whether GT-GAN preserves both the **values** (return magnitudes) and the\n",
|
|
"**timing** (inter-observation gaps) of information-driven bars. Matching the\n",
|
|
"irregular spacing is critical — unlike fixed-frequency generators, GT-GAN must\n",
|
|
"learn that volatile periods produce more bars and quiet periods fewer. Paths\n",
|
|
"that track closely in both dimensions confirm the Neural ODE dynamics\n",
|
|
"capture the continuous-time evolution between observations."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "3e889507",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.003206,
|
|
"end_time": "2026-06-13T02:38:28.086050+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.082844+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## PCA Visualization"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 27,
|
|
"id": "d756c829",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:28.093307Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:28.093178Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:28.240287Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:28.239817Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.151674,
|
|
"end_time": "2026-06-13T02:38:28.240956+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.089282+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"application/vnd.plotly.v1+json": {
|
|
"config": {
|
|
"plotlyServerURL": "https://plot.ly"
|
|
},
|
|
"data": [
|
|
{
|
|
"marker": {
|
|
"color": "#0a1628",
|
|
"opacity": 0.5
|
|
},
|
|
"mode": "markers",
|
|
"name": "Real",
|
|
"type": "scatter",
|
|
"x": {
|
|
"bdata": "b/HFvoM62r70I/K+aWsHv3FbF78nbCK/jXEqv4F7Nr8wn0S/8YlTv7GwZb9+LXW/u+yDv7XejL8/65i/DZWlv8gvsb/QKbu/nvvDv42DzL+XdtO/SpPZvxXJ3r/va+K/l8Plv/gt6b9tJu6/CC7xvzCy878VAfO/GL/xv7LP8b90WvG/4jPuv6+56b8sQOW/+frdv7ds1r9h7c2/g5rDvyUzuL+BR6u/BDidvwKdj78NZYG/nUFnv+GySr/IbS2/q24TvzL3/L5BONe+wlyxvnIqk74ge22+BEkqvmg8zr2bECq9IKitOg6yJT2DlJQ9V265PaI3xT3LhsQ9B8HYPd9V7T13P/49h1MIPkoHBT7stsw9rN6ZPfInVT2mKMA81c49vCIERL0HVqW9uBngvaXaFr4GpEa+n+B3vmjrjb7Hd6K+ioy4vnRzzr6mR+K+3LbwvjdjAL9RIQe/w0IOvy9NFr+8exy/XeAgv/8DKL8KZy6/A5gwv1y5NL92pDy/I5hEv+2CTb8tJFm/YQhevxEUYb+atWS/pJNnv6dIaL/6k2S/2Ithv5iAYL9Fh1+/GI1fv2a1Xb8ET1a/rTpQv1EwR7/uqjq/dVQtv9R5I7+geBi/ozoOvySnA7+tCfa+Q7ThvgVVyb6DQ7O+uMOWvrsbfb4ZDF++NSE2vr7KCb7g+cS9NReXvfTeJL3JiqS8umnQOm9K0zyqyDQ9g2RUPWoAcj057I898rCuPQNFxj2Umfo9GacVPrwCIT7amCc+sc8wPl6pMz6u6Tc+G+1CPmjmUD4U+2M+KMxyPvrzgz7b6JA+yl6ePv28rD7b5rY+F6bHPpZT3D4EP/E+Xb4EP7+MET8bzSA/jCYvP3gLPj+nsU0/BkFeP8iebj+ieX8/+euHPzKjkD+FWZk//o+hPzYUqT/e/K8/j1e2P5rbuz/ud8A/AW7FP8fnyj9oA9A/Hh/TPw4b1T/SeNc/d3fZP4sX2z+G49w/qSPfP4KR4T+KqeI/YuHjP0d35D8qJOQ/GeniP+ZV4D96GN0/kyLZP1vv0z8jtM0/YJ3HP01Pwj8=",
|
|
"dtype": "f4"
|
|
},
|
|
"y": {
|
|
"bdata": "F0uNvkwmgL4Ptoa+MM+IvsdckL5reJu+Ezurvoaywb72ceO++D8Fv8f7GL8K4Si/Zwc7vwDbRr+FBVW/GfphvydWZr8+NmG/XW5ZvzRUT78HA0K/5jU2v9/zLb9ADiW/nHYSv7By/b53UMq+44STviHAC76MbAe8FygDPpTucD41tq0+DBrpPhTdCj91bRw/x9kvP3a1Rj+vBWA/+45zP2aFgD+NeIY/SlqKP7Rliz+lz4s/11qMP+v8hj9cfIA/XbR0P5MTaD9B7Vk/2QVLP+iROT+rjCU/NuYTP6R5BT8D2vI+2trKPoBWmz5+CWM+mdIVPkbDiz2JECq8ceXXvVioRL5YJnW+A3qRvoZ4tL7KXNa+W9HpvpG6777TcPO+xXX5visW9b6jJOi+tVHdvuz30r4nfs2+0ezPvrDtwr6OLr2+GHjDvuuBy74M+Mq+3hLKvsGNy74JmLm+F3Ohvr7Vi757AYS++351vnSFcb6ysXO+5eNovgS9bb4wFoC+6bmDvuIBe76Uvnu++KtwvqIPfL6Iem6+h/xIvmTlHb658My95MYzvbSBDTyl/Gg9sq+hPZtotT2fte89jTotPv6GXT4oO4U+t9CaPqoFqz7XF8M+6CLRPo2G6z7Hz/w+JY4EP0vQCT/d+A0/GtQOPzGSCj+5QgU/jrL6Pugi3D5Kyrs+55SQPkZIRT6uHgM+L3+CPS83jjy+jZ28GKFtvfywib3sfJu9mI/Avets971afRS+/hQpvnrJIr44/hq++NUAvtCfvb3c7V+90UMBvQ5DRzzgvz89Bjq6PaJq9z0cfiM+fT9UPv8TfD559Y4+cpOcPiaJoT6//ao+breyPt8VuD5MYLM+vIuzPtwztD4wU7g+dC/GPgOM0D7URtI+xHTZPsVb5D5FQ+w+fW7pPhQ26z6dBuc+2j3cPpUrxz7iJbI+PaibPv1SiT4Tp2c+DQAzPuP44D0170s9OxpmvBD0i70K1OW9FkcbvsKiTb4b732+TH+TvjLzpb7dare+vrnKvnC44b56tfe+rN0FvzhLD7+ychW/hYYavy3nHL8=",
|
|
"dtype": "f4"
|
|
}
|
|
},
|
|
{
|
|
"marker": {
|
|
"color": "#C87533",
|
|
"opacity": 0.5
|
|
},
|
|
"mode": "markers",
|
|
"name": "Synthetic",
|
|
"type": "scatter",
|
|
"x": {
|
|
"bdata": "QRYlPlBR3T35rDo+X98SPo8BKD7dX0o+XJO+O48kcD7YNlE+FVRkvRx7Mj7lbmE+749PPuKnsz0plRc+9gF+Pj5xBT4BMJY+izY/PmZE4z3YYuE9tx1LPvsJUT74+So+2MX9PS/AVz5gG9s965Z2PuwMYTygbg4+fX4rPqox3DzEOU0+EhsMPvv5HD5u6zI+1fRfPUz1iD67VU09i4dMPpDaMj4AdA8++TIsPk+COT7bKSI+c4cLPjjUSj5y0Y8+qLZMPsuSPD7+PIU+QLsuPo0nZD6dl0g+zc2hPuZqdz40YY49+IEgPrx1nz18poc96mocPjNRDz4mU5o9ld2WPaL0Nz6tnDw+0a/KPRqtsb1tBwM+KkAnPtxMcj6/0Qw+as1OPgwGDz7UA1I+ZMTgPf3fPz5J2hc+Cmb/PZc2Az7XHPQ94HZqPombfD7aQD0+pMYpPrCqGT6Lvyo+xqChPcHhHD6Ri3s+xQ04Pk+mXz7+m14+tJNoPvD2ez7haxQ+V+M0PsELYT5/Dw4+TC+MPuJCNj71xp89vib+PTWrRT4ZjYI+5oJvPUIsGz7UlAE+JMlXPpAibz5/66k9djIaPvTERD50Ymo+m3hDPubRUj57TT0+jnNOPrH3KD7RujA+kRiQPVkmIT4Ghvw9Qrn1PMueSj5b4C8+z+QfPT3EQj72oBI+cQRWPuAW4j1YdJw9v7pOPiuP9D1aoUE+BhVDPv+1DT6rUTU+irkHPkIKTj7jeUg+hbFYPnwPMT62KlU+ARGJPuhCGD4fch8+/IpRPlKmWj6BWEo+KBcaPRxeNj45ej0+TG9XPjsYTz6mVnE9C7ZRPm/uPz4mKXA+JE1uPrpBdj6NSR4+3vYrPiJIED5f1kI+BaNIPijmGj6HDN09zu9RPsISEj5lHWU+abZVPjVDMD7+9DM+nJkEPpT+Uz4Uc3E+oH0xPsQngT0kyTE+mU9KPuRTDj4tRxw+iOQqPkzGIT6febU92oQbPpap+j2/7go+foZ8Pt9rkD6uJkI+i1g4PiwAJz7zgx8+ZevoPefcwj3yUzM+QTY8PsXGij0=",
|
|
"dtype": "f4"
|
|
},
|
|
"y": {
|
|
"bdata": "p8K0vOKXoryPPNy8+JfmvIOJfrzszYa8ZpACvciSlrzCqq68pD20vHisgrzGrsK8n6xYvBk7Dbxd0Ii8npD/vOoGzLwi7tm8gjdjvD4/qbyOO6m89CeKvGgcjrwFpLC8hja8uxzM67zf20m8TusJvfba+bsZYNS8D7hYvB4sjbwmg9K861PVvK6oyLzCxsC8t7fAvDoc77zRUtu8QY10vIaC2bsbcCW9fUPJvASQhbyKdxy8XeLIvCzixbw64wi93b2ivIZ+o7yJbtO8DhWdvNUac7xTk6S8Oj/FvCsBxbzQIaS8hpGCvHMGVLx9uQ69qHPbu1q/nLypo+28eqVwvMv2bLyAiI28j+GsvGBsYLypPom8f7u3vDHkurz/6LW8swHWvO1yGL3RjYS81E5IvGQYz7z4pcO80AlHvIc7l7ytJp+8f5qJvEcoa7ywgsO8Axh1vAjSbLxtSty8OECRvO3XWbxE5dK89LsYvbNKubxgzUG8lRm6vOVTyrwFx7K8GVKNvCy4TbzNUdq8OtvAvI2ImLzrVQi9zxecvO9K2rw1Jim8hHdevITNtLyiaYq8sFIJvUtr77wks6m8pEF3vCmXtrwbdQO99yAEvUe6orzyPFC8dVzyvMQP47zBRJW8tzMXvLKohrzwWfC8oZ/lvCjZWLzt0c28YDKdvOA7kbzyeZa8kyfGvPXKs7w4g6S8MDm7vFNpjrz3Ndy80d+GvBNxlbz+xcm8x0WxvGOKpryH2aG8teZzvLd+2ryodmy8BmJxvGf6drxWsAq921yZvJyLbLwx7+G84hKOvGIuvrwA21O8fZWavKzntbwK0Mq8tFm0vNVY9bx6oUu8DEXGvPjM2bxnFWa84GGlvDtOn7xrQku8XWIsvErXgrw2yMa7nCVRvCVp1rueyqi8AsrTvNxqj7wUXoO8aI7LvCl8kLvFb/e8W5wqvFxlObyl8r+82IXLvP8/p7yHrfG8HTDbvMyBhLzCgny8RA3WvE3j57sJFDy8DkuNvL0/4bwWKIS81vqnvOId2bwE+4e71ry4vFqaUbxu6968Sbnyu69Fibw=",
|
|
"dtype": "f4"
|
|
}
|
|
}
|
|
],
|
|
"layout": {
|
|
"template": {
|
|
"layout": {
|
|
"colorway": [
|
|
"#0a1628",
|
|
"#D4A84B",
|
|
"#1a2d4a",
|
|
"#C87533",
|
|
"#10b981",
|
|
"#ef4444"
|
|
],
|
|
"font": {
|
|
"color": "#334155",
|
|
"family": "DM Sans, DejaVu Sans, sans-serif",
|
|
"size": 11
|
|
},
|
|
"hoverlabel": {
|
|
"bgcolor": "white",
|
|
"font": {
|
|
"family": "DM Sans, DejaVu Sans, sans-serif",
|
|
"size": 11
|
|
}
|
|
},
|
|
"legend": {
|
|
"bgcolor": "rgba(255,255,255,0.8)",
|
|
"bordercolor": "#e8e8e6",
|
|
"borderwidth": 1,
|
|
"font": {
|
|
"size": 10
|
|
}
|
|
},
|
|
"paper_bgcolor": "#FAFAF9",
|
|
"plot_bgcolor": "white",
|
|
"title": {
|
|
"font": {
|
|
"color": "#0a1628",
|
|
"size": 14
|
|
},
|
|
"x": 0.5,
|
|
"xanchor": "center"
|
|
},
|
|
"xaxis": {
|
|
"gridcolor": "#e8e8e6",
|
|
"gridwidth": 0.5,
|
|
"linecolor": "#e8e8e6",
|
|
"showgrid": true,
|
|
"tickfont": {
|
|
"size": 10
|
|
},
|
|
"title": {
|
|
"font": {
|
|
"size": 11
|
|
}
|
|
}
|
|
},
|
|
"yaxis": {
|
|
"gridcolor": "#e8e8e6",
|
|
"gridwidth": 0.5,
|
|
"linecolor": "#e8e8e6",
|
|
"showgrid": true,
|
|
"tickfont": {
|
|
"size": 10
|
|
},
|
|
"title": {
|
|
"font": {
|
|
"size": 11
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"title": {
|
|
"text": "GT-GAN: PCA Distribution (dollar bars)"
|
|
},
|
|
"xaxis": {
|
|
"title": {
|
|
"text": "PC1"
|
|
}
|
|
},
|
|
"yaxis": {
|
|
"title": {
|
|
"text": "PC2"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArwAAAH0CAYAAADfWf7fAAAgAElEQVR4XuydB3RUVbuG3/RQktBBOkiVpkD4rwgqIAqCgoKgoiggWLBjxYLYG4oFVBALiAqi0kFpKkUlgFSlSQfpJbRUcte34xlnJjPJzJyZOWXes9Zd/5WcXc7z7Ume2efbe0dlZWXmgRcJkAAJkAAJkAAJkAAJ2JRAFIXXppHlY5EACZAACZAACZAACSgCFF4OBBIgARIgARIgARIgAVsToPDaOrx8OBIgARIgARIgARIgAQovxwAJkAAJkAAJkAAJkICtCVB4bR1ePhwJkAAJkAAJkAAJkACFl2OABEiABEiABEiABEjA1gQovLYOLx+OBEiABEiABEiABEiAwssxQAIkQAIkQAIkQAIkYGsCFF5bh5cPRwIkQAIkQAIkQAIkQOHlGCABEiABEiABEiABErA1AQqvrcPLhyMBEiABEiABEiABEqDwcgyQAAmQAAmQAAmQAAnYmgCF19bh5cORAAmQAAmQAAmQAAlQeDkGSIAESIAESIAESIAEbE2Awmvr8PLhSIAESIAESIAESIAEKLwcAyRAAiRAAiRAAiRAArYmQOG1dXj5cCRAAiRAAiRAAiRAAhRejgESIAESIAESIAESIAFbE6Dw2jq8fDgSIAESIAESIAESIAEKL8cACZAACZAACZAACZCArQlQeG0dXj4cCZAACZAACZAACZAAhZdjgARIgARIgARIgARIwNYEKLy2Di8fjgRIgARIgARIgARIgMLLMUACJEACJEACJEACJGBrAhReW4eXD0cCJEACJEACJEACJEDh5RggARIgARIgARIgARKwNQEKr63Dy4cjARIgARIgARIgARKg8HIMkAAJkAAJkAAJkAAJ2JoAhdfW4eXDkQAJkAAJkAAJkAAJUHg5BkiABEiABEiABEiABGxNgMJr6/Dy4UiABEiABEiABEiABCi8HAMkQAIkQAIkQAIkQAK2JkDhtXV4+XAkQAIkQAIkQAIkQAIUXo4BEiABEiABEiABEiABWxOg8No6vHw4EiABEiABEiABEiABCi/HAAmQAAmQAAmQAAmQgK0JUHhtHV4+HAmQAAmQAAmQAAmQAIWXY4AESIAESIAESIAESMDWBCi8tg4vH44ESMAfAtUbXoJ333gO3bt29KdYkfeOHvsFxn/1HX5b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"
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"real_flat = sequences_norm[:N_SYNTHETIC].reshape(N_SYNTHETIC, -1)\n",
|
|
"syn_flat = synthetic_sequences.reshape(len(synthetic_sequences), -1)\n",
|
|
"\n",
|
|
"pca = PCA(n_components=2)\n",
|
|
"combined = pca.fit_transform(np.vstack([real_flat, syn_flat]))\n",
|
|
"pca_real = combined[: len(real_flat)]\n",
|
|
"pca_syn = combined[len(real_flat) :]\n",
|
|
"\n",
|
|
"fig = go.Figure()\n",
|
|
"fig.add_trace(\n",
|
|
" go.Scatter(\n",
|
|
" x=pca_real[:, 0],\n",
|
|
" y=pca_real[:, 1],\n",
|
|
" mode=\"markers\",\n",
|
|
" name=\"Real\",\n",
|
|
" marker=dict(color=COLORS[\"blue\"], opacity=0.5),\n",
|
|
" )\n",
|
|
")\n",
|
|
"fig.add_trace(\n",
|
|
" go.Scatter(\n",
|
|
" x=pca_syn[:, 0],\n",
|
|
" y=pca_syn[:, 1],\n",
|
|
" mode=\"markers\",\n",
|
|
" name=\"Synthetic\",\n",
|
|
" marker=dict(color=COLORS[\"copper\"], opacity=0.5),\n",
|
|
" )\n",
|
|
")\n",
|
|
"\n",
|
|
"fig.update_layout(\n",
|
|
" title=f\"GT-GAN: PCA Distribution ({CONFIG['bar_type']} bars)\",\n",
|
|
" xaxis_title=\"PC1\",\n",
|
|
" yaxis_title=\"PC2\",\n",
|
|
" template=\"ml4t\",\n",
|
|
")\n",
|
|
"if not HEADLESS:\n",
|
|
" fig.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "eb25ba8b",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.003594,
|
|
"end_time": "2026-06-13T02:38:28.248378+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.244784+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Evaluation: GT-GAN Protocol\n",
|
|
"\n",
|
|
"**Reference**: Jeon et al. (2022) \"GT-GAN: General Purpose Time Series Synthesis\" [NeurIPS 2022]\n",
|
|
"\n",
|
|
"GT-GAN's evaluation follows the TimeGAN protocol with additional focus on:\n",
|
|
"1. **Discriminative Score**: Can a classifier distinguish real from synthetic?\n",
|
|
"2. **Predictive Score (TSTR)**: Train on synthetic, predict on real holdout\n",
|
|
"3. **Interpolation Quality**: Unique to GT-GAN - measure reconstruction at irregular timestamps\n",
|
|
"\n",
|
|
"The key GT-GAN advantage is handling naturally irregular data. We evaluate whether\n",
|
|
"the model preserves both statistical properties AND irregular timing patterns."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 28,
|
|
"id": "c8a8e6f7",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:28.256248Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:28.256157Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:28.262555Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:28.262277Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.011138,
|
|
"end_time": "2026-06-13T02:38:28.263035+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.251897+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def gtgan_paper_evaluation(\n",
|
|
" model: GTGAN,\n",
|
|
" train_sequences: np.ndarray,\n",
|
|
" train_times: np.ndarray,\n",
|
|
" holdout_df: pl.DataFrame,\n",
|
|
" holdout_times: np.ndarray,\n",
|
|
" norm_params: dict,\n",
|
|
" config: dict,\n",
|
|
" device: torch.device,\n",
|
|
") -> dict:\n",
|
|
" \"\"\"\n",
|
|
" Evaluation for GT-GAN following Jeon et al. (2022).\n",
|
|
"\n",
|
|
" Evaluates:\n",
|
|
" 1. Discriminative: Real/fake classification accuracy\n",
|
|
" 2. Predictive (TSTR): Train on synthetic, predict on real holdout\n",
|
|
" 3. Interpolation: Reconstruction at irregular timestamps (GT-GAN specific)\n",
|
|
"\n",
|
|
" Returns:\n",
|
|
" Dictionary with all evaluation metrics\n",
|
|
" \"\"\"\n",
|
|
" results = {}\n",
|
|
" model.eval()\n",
|
|
"\n",
|
|
" # Create holdout sequences for evaluation\n",
|
|
" holdout_data = holdout_df.select(config[\"features\"]).to_numpy().astype(np.float32)\n",
|
|
" holdout_seq, holdout_seq_times = create_irregular_sequences(\n",
|
|
" holdout_df, config[\"features\"], config[\"seq_length\"], holdout_times\n",
|
|
" )\n",
|
|
"\n",
|
|
" # Normalize holdout using training normalization params\n",
|
|
" holdout_seq_norm = (holdout_seq - norm_params[\"min\"]) / (\n",
|
|
" norm_params[\"max\"] - norm_params[\"min\"] + 1e-8\n",
|
|
" )\n",
|
|
"\n",
|
|
" # Generate synthetic sequences\n",
|
|
" n_eval = min(len(holdout_seq_norm), len(train_sequences), 100)\n",
|
|
" sample_times_tensor = torch.FloatTensor(train_times[:n_eval]).to(device)\n",
|
|
"\n",
|
|
" with torch.no_grad():\n",
|
|
" synthetic_eval = model.generate(n_eval, sample_times_tensor, device).cpu().numpy()\n",
|
|
"\n",
|
|
" # Flatten for sklearn\n",
|
|
" real_flat = train_sequences[:n_eval].reshape(n_eval, -1)\n",
|
|
" syn_flat = synthetic_eval.reshape(n_eval, -1)\n",
|
|
" holdout_flat = holdout_seq_norm[:n_eval].reshape(min(n_eval, len(holdout_seq_norm)), -1)\n",
|
|
"\n",
|
|
" # --- 1. Discriminative Score ---\n",
|
|
" # Train classifier to distinguish real vs synthetic\n",
|
|
" X_disc = np.vstack([real_flat, syn_flat])\n",
|
|
" y_disc = np.array([1] * len(real_flat) + [0] * len(syn_flat))\n",
|
|
"\n",
|
|
" # Shuffle and split\n",
|
|
" idx = np.random.permutation(len(X_disc))\n",
|
|
" X_disc, y_disc = X_disc[idx], y_disc[idx]\n",
|
|
" split = int(0.8 * len(X_disc))\n",
|
|
"\n",
|
|
" clf = RandomForestClassifier(n_estimators=50, max_depth=5, random_state=42)\n",
|
|
" clf.fit(X_disc[:split], y_disc[:split])\n",
|
|
"\n",
|
|
" disc_acc = accuracy_score(y_disc[split:], clf.predict(X_disc[split:]))\n",
|
|
" disc_auc = roc_auc_score(y_disc[split:], clf.predict_proba(X_disc[split:])[:, 1])\n",
|
|
"\n",
|
|
" results[\"discriminative\"] = {\n",
|
|
" \"accuracy\": float(disc_acc),\n",
|
|
" \"auc\": float(disc_auc),\n",
|
|
" \"interpretation\": \"Closer to 0.5 = better (indistinguishable)\",\n",
|
|
" }\n",
|
|
"\n",
|
|
" print(\"\\n Discriminative Score:\")\n",
|
|
" print(f\" Accuracy: {disc_acc:.3f} (target: ~0.5)\")\n",
|
|
" print(f\" AUC: {disc_auc:.3f} (target: ~0.5)\")\n",
|
|
"\n",
|
|
" # --- 2. Predictive Score (TSTR) ---\n",
|
|
" # Task: Predict next-step value (following TimeGAN protocol)\n",
|
|
" def create_prediction_data(sequences):\n",
|
|
" X = sequences[:, :-1, :].reshape(len(sequences), -1)\n",
|
|
" y = sequences[:, -1, 0] # Predict first feature at last timestep\n",
|
|
" return X, y\n",
|
|
"\n",
|
|
" X_real_train, y_real_train = create_prediction_data(train_sequences[:n_eval])\n",
|
|
" X_syn, y_syn = create_prediction_data(synthetic_eval)\n",
|
|
" X_holdout, y_holdout = create_prediction_data(\n",
|
|
" holdout_seq_norm[: min(n_eval, len(holdout_seq_norm))]\n",
|
|
" )\n",
|
|
"\n",
|
|
" # TRTR: Train Real, Test Real (baseline)\n",
|
|
" reg_trtr = RandomForestRegressor(n_estimators=50, max_depth=5, random_state=42)\n",
|
|
" reg_trtr.fit(X_real_train, y_real_train)\n",
|
|
" pred_trtr = reg_trtr.predict(X_holdout)\n",
|
|
" mae_trtr = np.mean(np.abs(pred_trtr - y_holdout))\n",
|
|
"\n",
|
|
" # TSTR: Train Synthetic, Test Real\n",
|
|
" reg_tstr = RandomForestRegressor(n_estimators=50, max_depth=5, random_state=42)\n",
|
|
" reg_tstr.fit(X_syn, y_syn)\n",
|
|
" pred_tstr = reg_tstr.predict(X_holdout)\n",
|
|
" mae_tstr = np.mean(np.abs(pred_tstr - y_holdout))\n",
|
|
"\n",
|
|
" mae_ratio = mae_tstr / (mae_trtr + 1e-8)\n",
|
|
"\n",
|
|
" results[\"predictive\"] = {\n",
|
|
" \"mae_trtr\": float(mae_trtr),\n",
|
|
" \"mae_tstr\": float(mae_tstr),\n",
|
|
" \"mae_ratio\": float(mae_ratio),\n",
|
|
" \"interpretation\": \"Ratio ~1.0 = good (synthetic preserves predictive patterns)\",\n",
|
|
" }\n",
|
|
"\n",
|
|
" print(\"\\n Predictive Score (TSTR):\")\n",
|
|
" print(f\" MAE (TRTR baseline): {mae_trtr:.4f}\")\n",
|
|
" print(f\" MAE (TSTR): {mae_tstr:.4f}\")\n",
|
|
" print(f\" Ratio: {mae_ratio:.2f}x (target: ~1.0)\")\n",
|
|
"\n",
|
|
" # --- 3. Interpolation Quality (GT-GAN specific) ---\n",
|
|
" # Encode real, decode at same times - measure reconstruction\n",
|
|
" test_seq = torch.FloatTensor(train_sequences[:n_eval]).to(device)\n",
|
|
" test_times = torch.FloatTensor(train_times[:n_eval]).to(device)\n",
|
|
"\n",
|
|
" with torch.no_grad():\n",
|
|
" mu, logvar = model.encode(test_seq, test_times)\n",
|
|
" z = model.reparameterize(mu, logvar)\n",
|
|
" recon = model.decode(z, test_times)\n",
|
|
"\n",
|
|
" recon_mse = float(torch.mean((recon - test_seq) ** 2).cpu())\n",
|
|
"\n",
|
|
" # Interpolation at midpoints (unique to irregular data)\n",
|
|
" midpoint_times = (test_times[:, :-1] + test_times[:, 1:]) / 2\n",
|
|
" with torch.no_grad():\n",
|
|
" interp = model.decode(z, midpoint_times)\n",
|
|
"\n",
|
|
" # Smoothness: interpolated values should be \"between\" adjacent real values\n",
|
|
" interp_np = interp.cpu().numpy()\n",
|
|
" test_np = test_seq.cpu().numpy()\n",
|
|
"\n",
|
|
" # Check if interpolated values are bounded by adjacent real values (soft check)\n",
|
|
" lower = np.minimum(test_np[:, :-1], test_np[:, 1:])\n",
|
|
" upper = np.maximum(test_np[:, :-1], test_np[:, 1:])\n",
|
|
" bounded_fraction = np.mean((interp_np >= lower - 0.1) & (interp_np <= upper + 0.1))\n",
|
|
"\n",
|
|
" results[\"interpolation\"] = {\n",
|
|
" \"reconstruction_mse\": recon_mse,\n",
|
|
" \"bounded_fraction\": float(bounded_fraction),\n",
|
|
" \"interpretation\": \"Higher bounded_fraction = smoother interpolation\",\n",
|
|
" }\n",
|
|
"\n",
|
|
" print(\"\\n Interpolation Quality (GT-GAN specific):\")\n",
|
|
" print(f\" Reconstruction MSE: {recon_mse:.6f}\")\n",
|
|
" print(f\" Bounded fraction: {bounded_fraction:.1%} (interpolations within adjacent bounds)\")\n",
|
|
"\n",
|
|
" model.train()\n",
|
|
" return results"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "e004c013",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.00352,
|
|
"end_time": "2026-06-13T02:38:28.270114+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.266594+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"### Run Evaluation\n",
|
|
"\n",
|
|
"Execute the full GT-GAN evaluation protocol: discriminative score,\n",
|
|
"predictive score (TSTR), and interpolation quality."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 29,
|
|
"id": "55c1878e",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:28.277720Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:28.277651Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:28.556001Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:28.555592Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.282966,
|
|
"end_time": "2026-06-13T02:38:28.556570+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.273604+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"======================================================================\n",
|
|
"EVALUATION (GT-GAN Protocol)\n",
|
|
"======================================================================\n",
|
|
"\n",
|
|
"Reference: Jeon et al. (2022), NeurIPS 2022\n",
|
|
"Following TimeGAN protocol + GT-GAN interpolation metrics\n",
|
|
"\n",
|
|
" Discriminative Score:\n",
|
|
" Accuracy: 1.000 (target: ~0.5)\n",
|
|
" AUC: 1.000 (target: ~0.5)\n",
|
|
"\n",
|
|
" Predictive Score (TSTR):\n",
|
|
" MAE (TRTR baseline): 0.9658\n",
|
|
" MAE (TSTR): 0.8711\n",
|
|
" Ratio: 0.90x (target: ~1.0)\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
" Interpolation Quality (GT-GAN specific):\n",
|
|
" Reconstruction MSE: 0.025782\n",
|
|
" Bounded fraction: 27.6% (interpolations within adjacent bounds)\n",
|
|
"\n",
|
|
"======================================================================\n",
|
|
"EVALUATION SUMMARY\n",
|
|
"======================================================================\n",
|
|
"\n",
|
|
"| Metric | Value | Target | Status |\n",
|
|
"|-----------------------|----------|----------|--------|\n",
|
|
"| Discriminative Acc | 1.000 | ~0.50 | WARNING |\n",
|
|
"| Discriminative AUC | 1.000 | ~0.50 | WARNING |\n",
|
|
"| TSTR MAE Ratio | 0.90x | ~1.0x | [OK] |\n",
|
|
"| Interpolation Bounded | 27.6% | >70% | WARNING |\n",
|
|
"\n",
|
|
"GT-GAN's key advantage: handling naturally irregular timestamps from information bars.\n",
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Run evaluation\n",
|
|
"print(\"=\" * 70)\n",
|
|
"print(\"EVALUATION (GT-GAN Protocol)\")\n",
|
|
"print(\"=\" * 70)\n",
|
|
"print(\"\\nReference: Jeon et al. (2022), NeurIPS 2022\")\n",
|
|
"print(\"Following TimeGAN protocol + GT-GAN interpolation metrics\")\n",
|
|
"\n",
|
|
"paper_results = gtgan_paper_evaluation(\n",
|
|
" model=model,\n",
|
|
" train_sequences=sequences_norm,\n",
|
|
" train_times=seq_times,\n",
|
|
" holdout_df=df_holdout,\n",
|
|
" holdout_times=times_holdout,\n",
|
|
" norm_params=norm_params,\n",
|
|
" config=CONFIG,\n",
|
|
" device=device,\n",
|
|
")\n",
|
|
"\n",
|
|
"# Summary\n",
|
|
"print(\"\\n\" + \"=\" * 70)\n",
|
|
"print(\"EVALUATION SUMMARY\")\n",
|
|
"print(\"=\" * 70)\n",
|
|
"print(f\"\"\"\n",
|
|
"| Metric | Value | Target | Status |\n",
|
|
"|-----------------------|----------|----------|--------|\n",
|
|
"| Discriminative Acc | {paper_results[\"discriminative\"][\"accuracy\"]:.3f} | ~0.50 | {\"[OK]\" if abs(paper_results[\"discriminative\"][\"accuracy\"] - 0.5) < 0.15 else \"WARNING\"} |\n",
|
|
"| Discriminative AUC | {paper_results[\"discriminative\"][\"auc\"]:.3f} | ~0.50 | {\"[OK]\" if abs(paper_results[\"discriminative\"][\"auc\"] - 0.5) < 0.15 else \"WARNING\"} |\n",
|
|
"| TSTR MAE Ratio | {paper_results[\"predictive\"][\"mae_ratio\"]:.2f}x | ~1.0x | {\"[OK]\" if 0.7 < paper_results[\"predictive\"][\"mae_ratio\"] < 1.5 else \"WARNING\"} |\n",
|
|
"| Interpolation Bounded | {paper_results[\"interpolation\"][\"bounded_fraction\"]:.1%} | >70% | {\"[OK]\" if paper_results[\"interpolation\"][\"bounded_fraction\"] > 0.7 else \"WARNING\"} |\n",
|
|
"\n",
|
|
"GT-GAN's key advantage: handling naturally irregular timestamps from information bars.\n",
|
|
"\"\"\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "115cb31f",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.003587,
|
|
"end_time": "2026-06-13T02:38:28.564141+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.560554+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"**Interpretation**: GT-GAN's value proposition is not raw distributional fidelity (where\n",
|
|
"Diffusion-TS or Sig-CWGAN excel on regular grids) but its ability to operate on\n",
|
|
"**naturally irregular** data — the interpolation bounded-fraction metric measures this\n",
|
|
"directly. On this run, the discriminator is degenerate (Discriminative Accuracy = 1.000,\n",
|
|
"AUC = 1.000): the discriminator perfectly separates synthetic from real, which under\n",
|
|
"the GT-GAN evaluation protocol indicates that this short training pass has not yet\n",
|
|
"produced sequences the discriminator finds confusable with real ones. The TSTR MAE\n",
|
|
"ratio and bounded-fraction printed above are the readable signals on this run; the\n",
|
|
"discriminator metric should not be cited until a longer-running retrain is performed\n",
|
|
"(tracked as a deferred retrain follow-up)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "12645593",
|
|
"metadata": {
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.003657,
|
|
"end_time": "2026-06-13T02:38:28.571377+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.567720+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Save Outputs"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 30,
|
|
"id": "ff049f53",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:28.579329Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:28.579222Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:28.587067Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:28.586564Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.012444,
|
|
"end_time": "2026-06-13T02:38:28.587403+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.574959+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"output_dir = get_output_dir(5, \"gtgan\")\n",
|
|
"checkpoint_dir = output_dir / \"checkpoints\" / \"gtgan\" / f\"nvda_{CONFIG['bar_type']}_bars\"\n",
|
|
"checkpoint_dir.mkdir(parents=True, exist_ok=True)\n",
|
|
"\n",
|
|
"# Save model checkpoint\n",
|
|
"checkpoint = {\n",
|
|
" \"model\": model.state_dict(),\n",
|
|
" \"norm_min\": norm_params[\"min\"].tolist(),\n",
|
|
" \"norm_max\": norm_params[\"max\"].tolist(),\n",
|
|
"}\n",
|
|
"torch.save(checkpoint, checkpoint_dir / \"checkpoint.pt\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 31,
|
|
"id": "401d8ece",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:28.595967Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:28.595798Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:28.599106Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:28.598766Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.008209,
|
|
"end_time": "2026-06-13T02:38:28.599540+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.591331+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Build training metadata\n",
|
|
"metadata = {\n",
|
|
" \"version\": \"2.0\",\n",
|
|
" \"generator\": {\n",
|
|
" \"name\": \"gtgan\",\n",
|
|
" \"version\": \"2.0.0\",\n",
|
|
" \"paper\": \"Jeon et al., GT-GAN: General Purpose Time Series Synthesis, NeurIPS 2022\",\n",
|
|
" \"data_type\": \"naturally_irregular\",\n",
|
|
" },\n",
|
|
" \"training\": {\n",
|
|
" \"created_at\": datetime.now(UTC).isoformat(),\n",
|
|
" \"device\": str(device),\n",
|
|
" \"random_seed\": 42,\n",
|
|
" },\n",
|
|
" \"data\": {\n",
|
|
" \"source\": \"chapter3_information_bars\",\n",
|
|
" \"bar_type\": CONFIG[\"bar_type\"],\n",
|
|
" \"symbol\": \"NVDA\",\n",
|
|
" \"features\": CONFIG[\"features\"],\n",
|
|
" \"n_features\": n_features,\n",
|
|
" \"seq_length\": CONFIG[\"seq_length\"],\n",
|
|
" \"n_train_bars\": n_train,\n",
|
|
" \"n_holdout_bars\": n_holdout,\n",
|
|
" \"n_sequences\": len(sequences),\n",
|
|
" \"n_synthetic_samples\": N_SYNTHETIC,\n",
|
|
" },\n",
|
|
" \"hyperparameters\": {\n",
|
|
" \"latent_dim\": CONFIG[\"latent_dim\"],\n",
|
|
" \"hidden_dim\": CONFIG[\"hidden_dim\"],\n",
|
|
" \"max_steps\": CONFIG[\"max_steps\"], # Step-based per Jeon et al.\n",
|
|
" \"batch_size\": CONFIG[\"batch_size\"],\n",
|
|
" \"learning_rate\": CONFIG[\"learning_rate\"],\n",
|
|
" \"ode_method\": CONFIG[\"ode_method\"],\n",
|
|
" },\n",
|
|
"}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 32,
|
|
"id": "255e9351",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:28.608157Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:28.608057Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:28.611044Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:28.610595Z"
|
|
},
|
|
"papermill": {
|
|
"duration": 0.007877,
|
|
"end_time": "2026-06-13T02:38:28.611481+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.603604+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Add evaluation metrics and save metadata\n",
|
|
"metadata[\"evaluation\"] = {\n",
|
|
" \"reconstruction_mse\": float(interp_results[\"reconstruction_mse\"]),\n",
|
|
" \"smoothness_ratio\": float(interp_results[\"smoothness_ratio\"]),\n",
|
|
" \"mean_ks\": float(stats_results[\"mean_ks\"]),\n",
|
|
" \"correlation_error\": float(stats_results[\"correlation_error\"]),\n",
|
|
" # Metrics (GT-GAN protocol)\n",
|
|
" \"discriminative_accuracy\": float(paper_results[\"discriminative\"][\"accuracy\"]),\n",
|
|
" \"discriminative_auc\": float(paper_results[\"discriminative\"][\"auc\"]),\n",
|
|
" \"predictive_mae_ratio\": float(paper_results[\"predictive\"][\"mae_ratio\"]),\n",
|
|
" \"interpolation_bounded_fraction\": float(paper_results[\"interpolation\"][\"bounded_fraction\"]),\n",
|
|
"}\n",
|
|
"\n",
|
|
"with open(checkpoint_dir / \"metadata.json\", \"w\") as f:\n",
|
|
" json.dump(metadata, f, indent=2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 33,
|
|
"id": "dfa3019d",
|
|
"metadata": {
|
|
"execution": {
|
|
"iopub.execute_input": "2026-06-13T02:38:28.620361Z",
|
|
"iopub.status.busy": "2026-06-13T02:38:28.620246Z",
|
|
"iopub.status.idle": "2026-06-13T02:38:28.623122Z",
|
|
"shell.execute_reply": "2026-06-13T02:38:28.622775Z"
|
|
},
|
|
"lines_to_next_cell": 2,
|
|
"papermill": {
|
|
"duration": 0.007977,
|
|
"end_time": "2026-06-13T02:38:28.623549+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.615572+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
"Saved outputs to: 05_synthetic_data/output/gtgan/checkpoints/gtgan/nvda_dollar_bars/\n",
|
|
" - checkpoint.pt (model weights)\n",
|
|
" - metadata.json (training info)\n",
|
|
" - samples.npy (200 synthetic sequences)\n",
|
|
" - sample_times.npy (irregular timestamps)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Save synthetic samples (denormalized)\n",
|
|
"samples_denorm = (\n",
|
|
" synthetic_sequences * (norm_params[\"max\"] - norm_params[\"min\"]) + norm_params[\"min\"]\n",
|
|
")\n",
|
|
"np.save(checkpoint_dir / \"samples.npy\", samples_denorm.astype(np.float32))\n",
|
|
"np.save(checkpoint_dir / \"sample_times.npy\", seq_times[:N_SYNTHETIC].astype(np.float32))\n",
|
|
"\n",
|
|
"print(f\"\\nSaved outputs to: {checkpoint_dir}/\")\n",
|
|
"print(\" - checkpoint.pt (model weights)\")\n",
|
|
"print(\" - metadata.json (training info)\")\n",
|
|
"print(f\" - samples.npy ({N_SYNTHETIC} synthetic sequences)\")\n",
|
|
"print(\" - sample_times.npy (irregular timestamps)\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "3037ebd7",
|
|
"metadata": {
|
|
"papermill": {
|
|
"duration": 0.003679,
|
|
"end_time": "2026-06-13T02:38:28.631454+00:00",
|
|
"exception": false,
|
|
"start_time": "2026-06-13T02:38:28.627775+00:00",
|
|
"status": "completed"
|
|
}
|
|
},
|
|
"source": [
|
|
"## Key Takeaways\n",
|
|
"\n",
|
|
"**What GT-GAN Offers for Irregular Data**:\n",
|
|
"\n",
|
|
"1. **Natural Irregularity**: Uses Chapter 3's information-theoretic bars with genuine\n",
|
|
" variable timestamps (not artificial masking)\n",
|
|
"2. **Continuous Dynamics**: Neural ODEs model evolution between observations\n",
|
|
"3. **Flexible Generation**: Generate at any timestamps, not just training grid\n",
|
|
"4. **Time-Aware Discrimination**: Discriminator accounts for irregular spacing\n",
|
|
"\n",
|
|
"**Comparison with Other Generators**:\n",
|
|
"\n",
|
|
"| Generator | Time Grid | Best For |\n",
|
|
"|-----------|-----------|----------|\n",
|
|
"| TimeGAN | Fixed | Regular daily/hourly data |\n",
|
|
"| Tail-GAN | Fixed | Tail risk scenarios |\n",
|
|
"| Sig-CWGAN | Fixed | Multi-asset correlations |\n",
|
|
"| Diffusion-TS | Fixed | High-dimensional data |\n",
|
|
"| **GT-GAN** | **Variable** | **Naturally irregular** (tick/volume bars) |\n",
|
|
"\n",
|
|
"**Use Cases**:\n",
|
|
"\n",
|
|
"- High-frequency data with variable sampling (tick bars, volume bars)\n",
|
|
"- Multi-asset data with different trading hours\n",
|
|
"- Generating scenarios for backtesting irregularly-sampled strategies"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"jupytext": {
|
|
"cell_metadata_filter": "tags,-all",
|
|
"formats": "ipynb,py:percent"
|
|
},
|
|
"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.14.5"
|
|
},
|
|
"ml4t_provenance": {
|
|
"source_py_blob": "bc5b1252ecb2865d0fa8c8a45f91552b56e3771b",
|
|
"executed_at": "2026-06-16T02:44:00.778419+00:00",
|
|
"executor": "gpu-docker",
|
|
"production": true,
|
|
"parameters": {},
|
|
"notes": "markdown-only header fix over the prior gpu-docker Neural-ODE run; outputs unchanged (re-exec is a stochastic GPU retrain)"
|
|
},
|
|
"papermill": {
|
|
"default_parameters": {},
|
|
"duration": 9.895118,
|
|
"end_time": "2026-06-13T02:38:31.249580+00:00",
|
|
"environment_variables": {},
|
|
"exception": null,
|
|
"input_path": "05_synthetic_data/04_gtgan_irregular.ipynb",
|
|
"output_path": "05_synthetic_data/04_gtgan_irregular.ipynb",
|
|
"parameters": {},
|
|
"start_time": "2026-06-13T02:38:21.354462+00:00",
|
|
"version": "2.7.0"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|