[{"data":1,"prerenderedAt":13049},["ShallowReactive",2],{"projects":3},[4,294,490,849,1337,4178,4371,6520,9486,11212,11435,11643,11815,11905,11996,12109,12184,12945,13009],{"id":5,"title":6,"description":7,"extension":8,"favorite":9,"icon":10,"meta":11,"publishedAt":281,"readingTime":270,"shortDescription":282,"slug":283,"status":284,"stem":285,"tags":286,"type":292,"__hash__":293},"projects\u002Fprojects\u002Fartlab.md","ArtLab - Personal HomeLab","A private R&D sandbox and high-availability infrastructure for deploying MLOps pipelines, managing large-scale data, and experimenting with cloud-native automation.","md",true,"i-ph-flask-duotone",{"body":12},{"type":13,"value":14,"toc":268},"minimark",[15,29,34,49,53,56,61,89,93,119,123,149,153,173,177,262,265],[16,17,18,28],"p",{},[19,20,24],"a",{"href":21,"rel":22},"https:\u002F\u002Fgo.arthurdanjou.fr\u002Fstatus",[23],"nofollow",[25,26,27],"strong",{},"ArtLab"," is my personal homelab: a controlled environment for experimenting with DevOps, distributed systems, and private cloud architecture.",[30,31,33],"h2",{"id":32},"architectural-philosophy","Architectural Philosophy",[16,35,36,37,40,41,44,45,48],{},"The infrastructure follows a ",[25,38,39],{},"Zero Trust"," model. Access is restricted to a private mesh VPN using ",[25,42,43],{},"Tailscale (WireGuard)",", removing the need for open ports. For select public endpoints, ",[25,46,47],{},"Cloudflare Tunnels"," provide a hardened entry point, keeping my public IP hidden while preserving end-to-end encryption from the edge to the origin.",[30,50,52],{"id":51},"service-stack","Service Stack",[16,54,55],{},"Services are grouped by functional domain to keep orchestration clean and scalable:",[57,58,60],"h3",{"id":59},"infrastructure-virtualization","Infrastructure & Virtualization",[62,63,64,71,77,83],"ul",{},[65,66,67,70],"li",{},[25,68,69],{},"Proxmox VE",": Type-1 hypervisor managing LXC containers and VMs for strict resource isolation.",[65,72,73,76],{},[25,74,75],{},"Docker & Portainer",": Container runtime and orchestration for rapid deployment.",[65,78,79,82],{},[25,80,81],{},"Traefik",": Edge router and reverse proxy providing automatic HTTPS via Let's Encrypt.",[65,84,85,88],{},[25,86,87],{},"Tailscale",": Secure networking layer for cross-device connectivity and remote management.",[57,90,92],{"id":91},"data-storage","Data & Storage",[62,94,95,101,107,113],{},[65,96,97,100],{},[25,98,99],{},"Garage",": S3-compatible distributed object storage for backups and static assets.",[65,102,103,106],{},[25,104,105],{},"Immich",": High-performance photo management and AI-powered backup solution.",[65,108,109,112],{},[25,110,111],{},"Jellyfin",": Media server for hardware-accelerated streaming.",[65,114,115,118],{},[25,116,117],{},"Redis",": In-memory data structure store for caching and session management.",[57,120,122],{"id":121},"automation-observability","Automation & Observability",[62,124,125,131,137,143],{},[65,126,127,130],{},[25,128,129],{},"n8n",": Workflow automation platform for orchestrating complex service interactions.",[65,132,133,136],{},[25,134,135],{},"Uptime Kuma",": Real-time status monitoring and incident alerting.",[65,138,139,142],{},[25,140,141],{},"Beszel",": Lightweight agent-based resource monitoring for CPU\u002FRAM\u002FDisk metrics.",[65,144,145,148],{},[25,146,147],{},"AdGuard Home",": Network-wide DNS sinkhole for ad-blocking and privacy.",[57,150,152],{"id":151},"home-intelligence","Home Intelligence",[62,154,155,161,167],{},[65,156,157,160],{},[25,158,159],{},"Home Assistant",": Centralized hub for IoT integration and automation logic.",[65,162,163,166],{},[25,164,165],{},"MQTT Broker",": Low-latency message bus for device-to-service communication.",[65,168,169,172],{},[25,170,171],{},"Zigbee2MQTT",": Bridge for local Zigbee device control without cloud dependencies.",[30,174,176],{"id":175},"hardware-specifications","Hardware Specifications",[178,179,180,197],"table",{},[181,182,183],"thead",{},[184,185,186,191,194],"tr",{},[187,188,190],"th",{"align":189},"left","Component",[187,192,193],{"align":189},"Hardware",[187,195,196],{"align":189},"Role",[198,199,200,217,232,247],"tbody",{},[184,201,202,208,214],{},[203,204,205],"td",{"align":189},[25,206,207],{},"Main Host",[203,209,210,213],{"align":189},[25,211,212],{},"Beelink EQR6"," (AMD Ryzen)",[203,215,216],{"align":189},"Compute, Containers & VMs",[184,218,219,224,229],{},[203,220,221],{"align":189},[25,222,223],{},"Storage",[203,225,226],{"align":189},[25,227,228],{},"UGREEN NASync DXP4800 Plus",[203,230,231],{"align":189},"4-bay NAS, 16TB ZFS \u002F Backups",[184,233,234,239,244],{},[203,235,236],{"align":189},[25,237,238],{},"Networking",[203,240,241],{"align":189},[25,242,243],{},"TP-Link 5-port Gigabit Switch",[203,245,246],{"align":189},"Local Backbone",[184,248,249,254,259],{},[203,250,251],{"align":189},[25,252,253],{},"Zigbee",[203,255,256],{"align":189},[25,257,258],{},"SLZB-MR4 Coordinator",[203,260,261],{"align":189},"Home Automation Mesh",[263,264],"hr",{},[16,266,267],{},"This homelab is a sandbox for DevOps experimentation, infrastructure reliability, and privacy-respecting digital autonomy.",{"title":269,"searchDepth":270,"depth":270,"links":271},"",2,[272,273,280],{"id":32,"depth":270,"text":33},{"id":51,"depth":270,"text":52,"children":274},[275,277,278,279],{"id":59,"depth":276,"text":60},3,{"id":91,"depth":276,"text":92},{"id":121,"depth":276,"text":122},{"id":151,"depth":276,"text":152},{"id":175,"depth":270,"text":176},"2025-09-04","A professional-grade homelab for self-hosting, MLOps, and network security.","artlab","Active","projects\u002Fartlab",[287,288,289,290,291,238],"Docker","Proxmox","HomeLab","Self-Hosted","Infrastructure","Personal Project","poGf_u4F9-pC4hDcnhOFDVGRi3hfF5aYzEeoxvGGYPA",{"id":295,"title":296,"description":297,"extension":8,"favorite":9,"icon":298,"meta":299,"publishedAt":483,"readingTime":270,"shortDescription":484,"slug":485,"status":284,"stem":486,"tags":487,"type":292,"__hash__":489},"projects\u002Fprojects\u002Fartsite.md","ArtSite - Personal Research Hub","My digital headquarters. A high-performance portfolio built on the Edge using the full Nuxt ecosystem, deployed to Cloudflare Workers via Wrangler.","i-ph-globe-hemisphere-west-duotone",{"body":300},{"type":13,"value":301,"toc":474},[302,312,319,323,330,334,356,360,396,400,422,426,448,452],[16,303,304,311],{},[19,305,308],{"href":306,"rel":307},"https:\u002F\u002Fgo.arthurdanjou.fr\u002Fwebsite",[23],[25,309,310],{},"ArtSite"," is my digital headquarters: a unified platform that serves as my engineering portfolio and experimental lab.",[16,313,314,315,318],{},"More than a static site, it is a modern ",[25,316,317],{},"Portfolio"," designed to be fast, accessible, and type-safe. It also acts as a live production environment where I test the latest frontend technologies and Edge computing paradigms.",[30,320,322],{"id":321},"the-nuxt-stack-architecture","The Nuxt Stack Architecture",[16,324,325,326,329],{},"This project is built entirely on the ",[25,327,328],{},"Nuxt ecosystem",", leveraging module synergy for strong developer experience and performance.",[57,331,333],{"id":332},"core-engine","Core Engine",[62,335,336,346],{},[65,337,338,345],{},[25,339,340],{},[19,341,344],{"href":342,"rel":343},"https:\u002F\u002Fnuxt.com\u002F",[23],"Nuxt 3",": The meta-framework providing the backbone (SSR, auto-imports, modules).",[65,347,348,355],{},[25,349,350],{},[19,351,354],{"href":352,"rel":353},"https:\u002F\u002Fnitro.unjs.io\u002F",[23],"Nitro",": The high-performance server engine powering API routes and Edge rendering.",[57,357,359],{"id":358},"infrastructure-deployment","Infrastructure & Deployment",[62,361,362,372,382],{},[65,363,364,371],{},[25,365,366],{},[19,367,370],{"href":368,"rel":369},"https:\u002F\u002Fworkers.cloudflare.com\u002F",[23],"Cloudflare Workers",": The application runs entirely on Cloudflare's global serverless network (SSR), delivering low latency and high resilience.",[65,373,374,381],{},[25,375,376],{},[19,377,380],{"href":378,"rel":379},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers\u002Fwrangler\u002F",[23],"Wrangler",": The command-line tool used for deployment pipelines and worker configuration.",[65,383,384,391,392,395],{},[25,385,386],{},[19,387,390],{"href":388,"rel":389},"https:\u002F\u002Fhub.nuxt.com\u002F",[23],"NuxtHub",": Integrated for ",[25,393,394],{},"advanced cache management"," and to unify Cloudflare platform features (KV, D1, Blob) within the Nuxt runtime.",[57,397,399],{"id":398},"content-data","Content & Data",[62,401,402,412],{},[65,403,404,411],{},[25,405,406],{},[19,407,410],{"href":408,"rel":409},"https:\u002F\u002Fcontent.nuxtjs.org\u002F",[23],"Nuxt Content",": A Git-based headless CMS that treats Markdown as a database.",[65,413,414,421],{},[25,415,416],{},[19,417,420],{"href":418,"rel":419},"https:\u002F\u002Fnuxt.studio",[23],"Nuxt Studio",": A live visual editor for seamless content management directly from the browser.",[57,423,425],{"id":424},"interface-design","Interface & Design",[62,427,428,438],{},[65,429,430,437],{},[25,431,432],{},[19,433,436],{"href":434,"rel":435},"https:\u002F\u002Fnuxtui.com\u002F",[23],"Nuxt UI",": A comprehensive component library built on Headless UI and Tailwind CSS.",[65,439,440,447],{},[25,441,442],{},[19,443,446],{"href":444,"rel":445},"https:\u002F\u002Ftailwindcss.com\u002F",[23],"Tailwind CSS",": Utility-first styling for rapid, responsive design.",[57,449,451],{"id":450},"quality-assurance","Quality Assurance",[62,453,454,464],{},[65,455,456,463],{},[25,457,458],{},[19,459,462],{"href":460,"rel":461},"https:\u002F\u002Fwww.typescriptlang.org\u002F",[23],"TypeScript",": Strict type safety across the entire stack (frontend and backend).",[65,465,466,473],{},[25,467,468],{},[19,469,472],{"href":470,"rel":471},"https:\u002F\u002Fzod.dev\u002F",[23],"Zod",": Runtime schema validation for API inputs and environment variables.",{"title":269,"searchDepth":270,"depth":270,"links":475},[476],{"id":321,"depth":270,"text":322,"children":477},[478,479,480,481,482],{"id":332,"depth":276,"text":333},{"id":358,"depth":276,"text":359},{"id":398,"depth":276,"text":399},{"id":424,"depth":276,"text":425},{"id":450,"depth":276,"text":451},"2024-06-01","A modern portfolio and experimental lab built on the Nuxt ecosystem and deployed to Cloudflare Workers.","artsite","projects\u002Fartsite",[488,390,370,462],"Nuxt","zhyAEqq_MD5sGQmyvnmvDCKTrntHZCvcFC39JRZ9-wg",{"id":491,"title":492,"description":493,"extension":8,"favorite":9,"icon":494,"meta":495,"publishedAt":838,"readingTime":839,"shortDescription":840,"slug":841,"status":842,"stem":843,"tags":844,"type":847,"__hash__":848},"projects\u002Fprojects\u002Fartstudies.md","ArtStudies - Academic Projects Collection","A curated collection of mathematics and data science projects developed during my academic journey, spanning Bachelor's and Master's studies.","i-ph-book-duotone",{"body":496},{"type":13,"value":497,"toc":834},[498,517,520,540,544,670,674],[16,499,500,507,508,512,513,516],{},[19,501,504],{"href":502,"rel":503},"https:\u002F\u002Fgithub.com\u002FArthurDanjou\u002Fartstudies",[23],[25,505,506],{},"ArtStudies Projects"," is a curated collection of academic projects completed throughout my mathematics studies. The repository showcases work in both ",[509,510,511],"em",{},"Python"," and ",[509,514,515],{},"R",", with a focus on mathematical modeling, data analysis, and numerical methods.",[16,518,519],{},"The projects are organized into three main sections:",[62,521,522,528,534],{},[65,523,524,527],{},[25,525,526],{},"L3"," – Third year of the Bachelor's degree in Mathematics",[65,529,530,533],{},[25,531,532],{},"M1"," – First year of the Master's degree in Mathematics",[65,535,536,539],{},[25,537,538],{},"M2"," – Second year of the Master's degree in Mathematics",[30,541,543],{"id":542},"file-structure","File Structure",[62,545,546,593,634],{},[65,547,548,551],{},[549,550,526],"code",{},[62,552,553,558,563,568,573,578,583,588],{},[65,554,555],{},[549,556,557],{},"Analyse Matricielle",[65,559,560],{},[549,561,562],{},"Analyse Multidimensionnelle",[65,564,565],{},[549,566,567],{},"Calculs Numériques",[65,569,570],{},[549,571,572],{},"Équations Différentielles",[65,574,575],{},[549,576,577],{},"Méthodes Numériques",[65,579,580],{},[549,581,582],{},"Probabilités",[65,584,585],{},[549,586,587],{},"Projet Numérique",[65,589,590],{},[549,591,592],{},"Statistiques",[65,594,595,597],{},[549,596,532],{},[62,598,599,604,609,614,619,624,629],{},[65,600,601],{},[549,602,603],{},"Data Analysis",[65,605,606],{},[549,607,608],{},"General Linear Models",[65,610,611],{},[549,612,613],{},"Monte Carlo Methods",[65,615,616],{},[549,617,618],{},"Numerical Methods",[65,620,621],{},[549,622,623],{},"Numerical Optimization",[65,625,626],{},[549,627,628],{},"Portfolio Management",[65,630,631],{},[549,632,633],{},"Statistical Learning",[65,635,636,638],{},[549,637,538],{},[62,639,640,645,650,655,660,665],{},[65,641,642],{},[549,643,644],{},"Data Visualisation",[65,646,647],{},[549,648,649],{},"Deep Learning",[65,651,652],{},[549,653,654],{},"Linear Models",[65,656,657],{},[549,658,659],{},"Machine Learning",[65,661,662],{},[549,663,664],{},"VBA",[65,666,667],{},[549,668,669],{},"SQL",[30,671,673],{"id":672},"technologies-tools","Technologies & Tools",[62,675,676,685,694,704,714,724,734,744,754,764,774,784,794,804,814,824],{},[65,677,678,684],{},[25,679,680],{},[19,681,511],{"href":682,"rel":683},"https:\u002F\u002Fwww.python.org",[23],": A high-level, interpreted programming language, widely used for data science, machine learning, and scientific computing.",[65,686,687,693],{},[25,688,689],{},[19,690,515],{"href":691,"rel":692},"https:\u002F\u002Fwww.r-project.org",[23],": A statistical computing environment, perfect for data analysis and visualization.",[65,695,696,703],{},[25,697,698],{},[19,699,702],{"href":700,"rel":701},"https:\u002F\u002Fjupyter.org",[23],"Jupyter",": Interactive notebooks combining code, results, and rich text for reproducible research.",[65,705,706,713],{},[25,707,708],{},[19,709,712],{"href":710,"rel":711},"https:\u002F\u002Fpandas.pydata.org",[23],"Pandas",": A data manipulation library providing data structures and operations for manipulating numerical tables and time series.",[65,715,716,723],{},[25,717,718],{},[19,719,722],{"href":720,"rel":721},"https:\u002F\u002Fnumpy.org",[23],"NumPy",": Core package for numerical computing with support for large, multi-dimensional arrays and matrices.",[65,725,726,733],{},[25,727,728],{},[19,729,732],{"href":730,"rel":731},"https:\u002F\u002Fwww.scipy.org",[23],"SciPy",": A library for advanced scientific computations including optimization, integration, and signal processing.",[65,735,736,743],{},[25,737,738],{},[19,739,742],{"href":740,"rel":741},"https:\u002F\u002Fscikit-learn.org",[23],"Scikit-learn",": A robust library offering simple and efficient tools for machine learning and statistical modeling, including classification, regression, and clustering.",[65,745,746,753],{},[25,747,748],{},[19,749,752],{"href":750,"rel":751},"https:\u002F\u002Fwww.tensorflow.org",[23],"TensorFlow",": A comprehensive open-source framework for building and deploying machine learning and deep learning models.",[65,755,756,763],{},[25,757,758],{},[19,759,762],{"href":760,"rel":761},"https:\u002F\u002Fkeras.io",[23],"Keras",": A high-level neural networks API, running on top of TensorFlow, designed for fast experimentation.",[65,765,766,773],{},[25,767,768],{},[19,769,772],{"href":770,"rel":771},"https:\u002F\u002Fmatplotlib.org",[23],"Matplotlib",": A versatile plotting library for creating high-quality static, animated, and interactive visualizations in Python.",[65,775,776,783],{},[25,777,778],{},[19,779,782],{"href":780,"rel":781},"https:\u002F\u002Fplotly.com",[23],"Plotly",": An interactive graphing library for creating dynamic visualizations in Python and R.",[65,785,786,793],{},[25,787,788],{},[19,789,792],{"href":790,"rel":791},"https:\u002F\u002Fseaborn.pydata.org",[23],"Seaborn",": A statistical data visualization library built on top of Matplotlib, providing a high-level interface for drawing attractive and informative graphics.",[65,795,796,803],{},[25,797,798],{},[19,799,802],{"href":800,"rel":801},"https:\u002F\u002Frmarkdown.rstudio.com",[23],"RMarkdown",": A dynamic tool for combining code, results, and narrative into high-quality documents and presentations.",[65,805,806,813],{},[25,807,808],{},[19,809,812],{"href":810,"rel":811},"https:\u002F\u002Ffactominer.free.fr\u002F",[23],"FactoMineR",": An R package focused on multivariate exploratory data analysis (e.g., PCA, MCA, CA).",[65,815,816,823],{},[25,817,818],{},[19,819,822],{"href":820,"rel":821},"https:\u002F\u002Fggplot2.tidyverse.org",[23],"ggplot2",": A grammar-based graphics package for creating complex and elegant visualizations in R.",[65,825,826,833],{},[25,827,828],{},[19,829,832],{"href":830,"rel":831},"https:\u002F\u002Fshiny.rstudio.com",[23],"RShiny",": A web application framework for building interactive web apps directly from R.",{"title":269,"searchDepth":270,"depth":270,"links":835},[836,837],{"id":542,"depth":270,"text":543},{"id":672,"depth":270,"text":673},"2023-09-01",1,"A collection of academic projects in mathematics and data science from my university studies.","artstudies","In progress","projects\u002Fartstudies",[511,515,845,846],"Data Science","Mathematics","Academic Project","mFDxM_hCDUUMP-vQ2Uruc06wGq7pWnw8C0LKlGellXs",{"id":850,"title":851,"description":852,"extension":8,"favorite":853,"icon":854,"meta":855,"publishedAt":1328,"readingTime":276,"shortDescription":1329,"slug":1330,"status":1331,"stem":1332,"tags":1333,"type":847,"__hash__":1336},"projects\u002Fprojects\u002Fnlp-hr-onboarding.md","Intelligent HR Onboarding Assistant","Intelligent HR onboarding assistant using RAG, LangChain agents, and MistralAI embeddings to help new employees navigate company policies, employee directory, and administrative tasks.",false,"i-ph-robot-duotone",{"body":856},{"type":13,"value":857,"toc":1312},[858,869,873,883,886,890,928,932,941,945,953,957,1060,1064,1068,1084,1087,1108,1112,1118,1122,1206,1210,1251,1255,1261,1265,1282,1286,1303,1308],[16,859,860,863,866],{},[25,861,862],{},"NLP Project — Master M2",[864,865],"br",{},[509,867,868],{},"Authors: Arthur DANJOU, Axelle MERIC, Moritz von SIEMENS",[30,870,872],{"id":871},"project-overview","Project Overview",[16,874,875,876,878,879,882],{},"The ",[25,877,851],{}," is a conversational AI system designed to guide new employees during their first week at ",[25,880,881],{},"TechCorp",". It combines retrieval-augmented generation, tool-using agents, and conversational memory to provide accurate and actionable HR support.",[16,884,885],{},"The assistant can answer policy questions, retrieve employee information, schedule internal meetings, and prepare leave requests from natural-language prompts.",[30,887,889],{"id":888},"key-features","Key Features",[62,891,892,898,904,910,916,922],{},[65,893,894,897],{},[25,895,896],{},"Semantic HR policy search"," powered by a RAG pipeline.",[65,899,900,903],{},[25,901,902],{},"Employee directory lookup"," from structured JSON records.",[65,905,906,909],{},[25,907,908],{},"Meeting scheduling tools"," integrated through LangChain.",[65,911,912,915],{},[25,913,914],{},"Automated leave request workflow"," from chat instructions.",[65,917,918,921],{},[25,919,920],{},"Sliding-window memory"," to keep multi-turn context coherent.",[65,923,924,927],{},[25,925,926],{},"Interactive Gradio UI"," with visible agent actions and tool calls.",[30,929,931],{"id":930},"architecture","Architecture",[933,934,939],"pre",{"className":935,"code":937,"language":938},[936],"language-text","┌──────────────────────────────────────────────────────────┐\n│           HR Onboarding Assistant — TechCorp            │\n│                                                         │\n│  📝 System prompts (LangChain LCEL)                     │\n│  🧠 Sliding window conversational memory                │\n│  🔧 Tools:                                              │\n│     ├── 🔍 Knowledge base search (RAG)                  │\n│     ├── 👤 Employee directory                           │\n│     ├── 📅 Meeting scheduling                           │\n│     ├── 🏖️ Leave request submission                     │\n│     └── 🕐 Current date and time                        │\n│  🔄 ReAct loop: reason → act → observe                  │\n│  📊 MistralAI Embeddings + Qdrant Vector Store          │\n└──────────────────────────────────────────────────────────┘\n","text",[549,940,937],{"__ignoreMap":269},[30,942,944],{"id":943},"prerequisites","Prerequisites",[62,946,947,950],{},[65,948,949],{},"Python ≥ 3.13",[65,951,952],{},"MistralAI API key",[30,954,956],{"id":955},"installation","Installation",[958,959,960,1007,1025],"ol",{},[65,961,962,965],{},[25,963,964],{},"Clone the repository",[933,966,970],{"className":967,"code":968,"language":969,"meta":269,"style":269},"language-bash shiki shiki-themes material-theme-lighter catppuccin-latte catppuccin-macchiato","git clone \u003Crepository-url>\ncd NLP-Intelligent-HR-Onboarding-Assistant-with-RAG-and-LangChain\n","bash",[549,971,972,998],{"__ignoreMap":269},[973,974,976,980,984,988,991,995],"span",{"class":975,"line":839},"line",[973,977,979],{"class":978},"sqbHp","git",[973,981,983],{"class":982},"sJlHP"," clone",[973,985,987],{"class":986},"sn2um"," \u003C",[973,989,990],{"class":982},"repository-ur",[973,992,994],{"class":993},"s0g_q","l",[973,996,997],{"class":986},">\n",[973,999,1000,1004],{"class":975,"line":270},[973,1001,1003],{"class":1002},"sMj0x","cd",[973,1005,1006],{"class":982}," NLP-Intelligent-HR-Onboarding-Assistant-with-RAG-and-LangChain\n",[65,1008,1009,1012],{},[25,1010,1011],{},"Install dependencies",[933,1013,1015],{"className":967,"code":1014,"language":969,"meta":269,"style":269},"uv sync\n",[549,1016,1017],{"__ignoreMap":269},[973,1018,1019,1022],{"class":975,"line":839},[973,1020,1021],{"class":978},"uv",[973,1023,1024],{"class":982}," sync\n",[65,1026,1027,1030,1032,1033],{},[25,1028,1029],{},"Configure MistralAI API key",[864,1031],{},"Set the environment variable:",[933,1034,1036],{"className":967,"code":1035,"language":969,"meta":269,"style":269},"export MISTRAL_API_KEY=\"your_api_key\"\n",[549,1037,1038],{"__ignoreMap":269},[973,1039,1040,1044,1047,1050,1054,1057],{"class":975,"line":839},[973,1041,1043],{"class":1042},"s_I8y","export",[973,1045,1046],{"class":993}," MISTRAL_API_KEY",[973,1048,1049],{"class":986},"=",[973,1051,1053],{"class":1052},"srDDN","\"",[973,1055,1056],{"class":982},"your_api_key",[973,1058,1059],{"class":1052},"\"\n",[30,1061,1063],{"id":1062},"usage","Usage",[57,1065,1067],{"id":1066},"run-the-jupyter-notebook","Run the Jupyter notebook",[933,1069,1071],{"className":967,"code":1070,"language":969,"meta":269,"style":269},"jupyter notebook projet.ipynb\n",[549,1072,1073],{"__ignoreMap":269},[973,1074,1075,1078,1081],{"class":975,"line":839},[973,1076,1077],{"class":978},"jupyter",[973,1079,1080],{"class":982}," notebook",[973,1082,1083],{"class":982}," projet.ipynb\n",[16,1085,1086],{},"Execute cells sequentially to:",[958,1088,1089,1092,1095,1098,1101],{},[65,1090,1091],{},"Analyze tokenization of HR documents",[65,1093,1094],{},"Create the Qdrant vector database",[65,1096,1097],{},"Initialize the ReAct agent",[65,1099,1100],{},"Run demonstrations",[65,1102,1103,1104,1107],{},"Launch the Gradio interface (runs on ",[549,1105,1106],{},"http:\u002F\u002F127.0.0.1:7860",")",[57,1109,1111],{"id":1110},"data-structure","Data structure",[933,1113,1116],{"className":1114,"code":1115,"language":938},[936],"data\u002F\n├── entreprise.md    # HR knowledge base (leave policy, remote work, etc.)\n└── employés.json    # TechCorp employee directory\n",[549,1117,1115],{"__ignoreMap":269},[30,1119,1121],{"id":1120},"learning-modules","Learning Modules",[178,1123,1124,1136],{},[181,1125,1126],{},[184,1127,1128,1131,1134],{},[187,1129,1130],{"align":189},"TP",[187,1132,1133],{"align":189},"Concept",[187,1135,1063],{"align":189},[198,1137,1138,1151,1164,1177,1193],{},[184,1139,1140,1145,1148],{},[203,1141,1142],{"align":189},[25,1143,1144],{},"TP1",[203,1146,1147],{"align":189},"Embeddings",[203,1149,1150],{"align":189},"Document vectorization and cosine similarity retrieval",[184,1152,1153,1158,1161],{},[203,1154,1155],{"align":189},[25,1156,1157],{},"TP2",[203,1159,1160],{"align":189},"BPE Tokenization",[203,1162,1163],{"align":189},"Token-cost analysis with FR\u002FEN comparison",[184,1165,1166,1171,1174],{},[203,1167,1168],{"align":189},[25,1169,1170],{},"TP3",[203,1172,1173],{"align":189},"LLM + LangChain",[203,1175,1176],{"align":189},"ChatMistralAI setup, prompts, and LCEL chains",[184,1178,1179,1184,1187],{},[203,1180,1181],{"align":189},[25,1182,1183],{},"TP4",[203,1185,1186],{"align":189},"Agents + Memory",[203,1188,1189,1192],{"align":189},[549,1190,1191],{},"@tool"," usage, ReAct orchestration, sliding-window memory",[184,1194,1195,1200,1203],{},[203,1196,1197],{"align":189},[25,1198,1199],{},"TP5",[203,1201,1202],{"align":189},"RAG + Gradio",[203,1204,1205],{"align":189},"Qdrant indexing, semantic retrieval, interactive UI",[30,1207,1209],{"id":1208},"technologies","Technologies",[62,1211,1212,1218,1227,1233,1239,1245],{},[65,1213,1214,1217],{},[25,1215,1216],{},"LangChain",": LLM orchestration framework",[65,1219,1220,1223,1224,1107],{},[25,1221,1222],{},"MistralAI",": LLM inference and embeddings (",[549,1225,1226],{},"mistral-embed",[65,1228,1229,1232],{},[25,1230,1231],{},"Qdrant",": In-memory vector database",[65,1234,1235,1238],{},[25,1236,1237],{},"Gradio",": Interactive web interface",[65,1240,1241,1244],{},[25,1242,1243],{},"tiktoken",": BPE tokenization analysis",[65,1246,1247,1250],{},[25,1248,1249],{},"pandas",": Employee data manipulation",[30,1252,1254],{"id":1253},"main-dependencies","Main Dependencies",[933,1256,1259],{"className":1257,"code":1258,"language":938},[936],"langchain>=1.2.11\nlangchain-mistralai>=1.1.1\nlangchain-qdrant>=1.1.0\ngradio>=6.9.0\ntiktoken>=0.12.0\npandas>=3.0.1\n",[549,1260,1258],{"__ignoreMap":269},[30,1262,1264],{"id":1263},"example-prompts","Example Prompts",[62,1266,1267,1270,1273,1276,1279],{},[65,1268,1269],{},"\"How many days of annual leave do I have?\"",[65,1271,1272],{},"\"What is the remote work policy?\"",[65,1274,1275],{},"\"Give me Claire Petit's contact information\"",[65,1277,1278],{},"\"Schedule a meeting with the Data Science team tomorrow at 2pm\"",[65,1280,1281],{},"\"I want to request leave from January 15th to 20th\"",[30,1283,1285],{"id":1284},"authors","Authors",[62,1287,1288,1293,1298],{},[65,1289,1290],{},[25,1291,1292],{},"Arthur DANJOU",[65,1294,1295],{},[25,1296,1297],{},"Axelle MERIC",[65,1299,1300],{},[25,1301,1302],{},"Moritz von SIEMENS",[16,1304,1305],{},[509,1306,1307],{},"Project completed as part of the Natural Language Processing course — Master M2",[1309,1310,1311],"style",{},"html pre.shiki code .sqbHp, html code.shiki .sqbHp{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#1E66F5;--shiki-default-font-style:italic;--shiki-dark:#8AADF4;--shiki-dark-font-style:italic}html pre.shiki code .sJlHP, html code.shiki .sJlHP{--shiki-light:#91B859;--shiki-default:#40A02B;--shiki-dark:#A6DA95}html pre.shiki code .sn2um, html code.shiki .sn2um{--shiki-light:#39ADB5;--shiki-default:#179299;--shiki-dark:#8BD5CA}html pre.shiki code .s0g_q, html code.shiki .s0g_q{--shiki-light:#90A4AE;--shiki-default:#4C4F69;--shiki-dark:#CAD3F5}html pre.shiki code .sMj0x, html code.shiki .sMj0x{--shiki-light:#6182B8;--shiki-light-font-style:inherit;--shiki-default:#D20F39;--shiki-default-font-style:italic;--shiki-dark:#ED8796;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s_I8y, html code.shiki .s_I8y{--shiki-light:#9C3EDA;--shiki-default:#8839EF;--shiki-dark:#C6A0F6}html pre.shiki code .srDDN, html code.shiki .srDDN{--shiki-light:#39ADB5;--shiki-default:#40A02B;--shiki-dark:#A6DA95}",{"title":269,"searchDepth":270,"depth":270,"links":1313},[1314,1315,1316,1317,1318,1319,1323,1324,1325,1326,1327],{"id":871,"depth":270,"text":872},{"id":888,"depth":270,"text":889},{"id":930,"depth":270,"text":931},{"id":943,"depth":270,"text":944},{"id":955,"depth":270,"text":956},{"id":1062,"depth":270,"text":1063,"children":1320},[1321,1322],{"id":1066,"depth":276,"text":1067},{"id":1110,"depth":276,"text":1111},{"id":1120,"depth":270,"text":1121},{"id":1208,"depth":270,"text":1209},{"id":1253,"depth":270,"text":1254},{"id":1263,"depth":270,"text":1264},{"id":1284,"depth":270,"text":1285},"2026-03-13","An AI-powered assistant for streamlining HR onboarding processes and improving new hire experience.","nlp-hr-onboarding","Completed","projects\u002Fnlp-hr-onboarding",[511,1334,1216,1335],"NLP","RAG","QPGNgildBBYmWgNT8evTqzK-DJYN8C71LMgJx_bYw9E",{"id":1338,"title":1339,"description":1340,"extension":8,"favorite":853,"icon":1341,"meta":1342,"publishedAt":4166,"readingTime":4167,"shortDescription":4168,"slug":4169,"status":1331,"stem":4170,"tags":4171,"type":4176,"__hash__":4177},"projects\u002Fprojects\u002Flt-two-layers-neural-networks.md","Generalization Bounds for Two-Layer Neural Networks with ReLU","A rigorous mathematical examination of generalization bounds for two-layer neural networks with ReLU activation. This project derives tight, width-independent complexity bounds by exploiting the scale-invariant properties of ReLU networks, moving beyond traditional empirical Rademacher complexity measures that fail for overparameterized models.","i-ph-function-duotone",{"body":1343},{"type":13,"value":1344,"toc":4157},[1345,1349,1352,1530,1534,1850,2196,2200,2620,2707,2711,2892,3085,3088,3092,3829,4079,4111,4115,4147,4151],[30,1346,1348],{"id":1347},"overview","Overview",[16,1350,1351],{},"This rigorous mathematical exercise derives and analyzes generalization bounds for two-layer neural networks with ReLU activation, progressively building from naive bounds to tight, width-independent complexity measures:",[62,1353,1354,1360,1518,1524],{},[65,1355,1356,1359],{},[25,1357,1358],{},"Naive bound",": Classical empirical Rademacher complexity approach (demonstrates why standard bounds fail for overparameterized models)",[65,1361,1362,1365,1366,1517],{},[25,1363,1364],{},"Symmetrization inequality",": Specialized for ReLU networks, exploiting ",[973,1367,1370,1427],{"className":1368},[1369],"katex",[973,1371,1374],{"className":1372},[1373],"katex-mathml",[1375,1376,1378],"math",{"xmlns":1377},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[1379,1380,1381,1422],"semantics",{},[1382,1383,1384,1389,1392,1394,1397,1400,1404,1406,1408,1411,1413,1415,1418,1420],"mrow",{},[1385,1386,1388],"mi",{"mathvariant":1387},"normal","∣",[1385,1390,1391],{},"z",[1385,1393,1388],{"mathvariant":1387},[1395,1396,1049],"mo",{},[1385,1398,1399],{},"ϕ",[1395,1401,1403],{"stretchy":1402},"false","(",[1385,1405,1391],{},[1395,1407,1107],{"stretchy":1402},[1395,1409,1410],{},"+",[1385,1412,1399],{},[1395,1414,1403],{"stretchy":1402},[1395,1416,1417],{},"−",[1385,1419,1391],{},[1395,1421,1107],{"stretchy":1402},[1423,1424,1426],"annotation",{"encoding":1425},"application\u002Fx-tex","|z| = \\phi(z) + \\phi(-z)",[973,1428,1432,1465,1496],{"className":1429,"ariaHidden":1431},[1430],"katex-html","true",[973,1433,1436,1441,1445,1450,1453,1458,1462],{"className":1434},[1435],"base",[973,1437],{"className":1438,"style":1440},[1439],"strut","height:1em;vertical-align:-0.25em;",[973,1442,1388],{"className":1443},[1444],"mord",[973,1446,1391],{"className":1447,"style":1449},[1444,1448],"mathnormal","margin-right:0.044em;",[973,1451,1388],{"className":1452},[1444],[973,1454],{"className":1455,"style":1457},[1456],"mspace","margin-right:0.2778em;",[973,1459,1049],{"className":1460},[1461],"mrel",[973,1463],{"className":1464,"style":1457},[1456],[973,1466,1468,1471,1474,1478,1481,1485,1489,1493],{"className":1467},[1435],[973,1469],{"className":1470,"style":1440},[1439],[973,1472,1399],{"className":1473},[1444,1448],[973,1475,1403],{"className":1476},[1477],"mopen",[973,1479,1391],{"className":1480,"style":1449},[1444,1448],[973,1482,1107],{"className":1483},[1484],"mclose",[973,1486],{"className":1487,"style":1488},[1456],"margin-right:0.2222em;",[973,1490,1410],{"className":1491},[1492],"mbin",[973,1494],{"className":1495,"style":1488},[1456],[973,1497,1499,1502,1505,1508,1511,1514],{"className":1498},[1435],[973,1500],{"className":1501,"style":1440},[1439],[973,1503,1399],{"className":1504},[1444,1448],[973,1506,1403],{"className":1507},[1477],[973,1509,1417],{"className":1510},[1444],[973,1512,1391],{"className":1513,"style":1449},[1444,1448],[973,1515,1107],{"className":1516},[1484]," structure",[65,1519,1520,1523],{},[25,1521,1522],{},"Scale-invariant complexity measure",": Leverages ReLU positive homogeneity property",[65,1525,1526,1529],{},[25,1527,1528],{},"Width-independent bound",": Final tight generalization bound that holds regardless of network width",[30,1531,1533],{"id":1532},"theoretical-foundation","Theoretical Foundation",[16,1535,1536,1537],{},"Two-layer neural networks computing functions of the form:\n",[973,1538,1540,1611],{"className":1539},[1369],[973,1541,1543],{"className":1542},[1373],[1375,1544,1545],{"xmlns":1377},[1379,1546,1547,1608],{},[1382,1548,1549,1552,1554,1557,1559,1561,1581,1589,1592,1594,1604,1606],{},[1385,1550,1551],{},"f",[1395,1553,1403],{"stretchy":1402},[1385,1555,1556],{},"x",[1395,1558,1107],{"stretchy":1402},[1395,1560,1049],{},[1562,1563,1564,1567,1578],"msubsup",{},[1395,1565,1566],{},"∑",[1382,1568,1569,1572,1574],{},[1385,1570,1571],{},"j",[1395,1573,1049],{},[1575,1576,1577],"mn",{},"1",[1385,1579,1580],{},"m",[1582,1583,1584,1587],"msub",{},[1385,1585,1586],{},"u",[1385,1588,1571],{},[1385,1590,1591],{},"σ",[1395,1593,1403],{"stretchy":1402},[1562,1595,1596,1599,1601],{},[1385,1597,1598],{},"w",[1385,1600,1571],{},[1385,1602,1603],{"mathvariant":1387},"⊤",[1385,1605,1556],{},[1395,1607,1107],{"stretchy":1402},[1423,1609,1610],{"encoding":1425},"f(x) = \\sum_{j=1}^{m} u_j \\sigma(w_j^\\top x)",[973,1612,1614,1642],{"className":1613,"ariaHidden":1431},[1430],[973,1615,1617,1620,1624,1627,1630,1633,1636,1639],{"className":1616},[1435],[973,1618],{"className":1619,"style":1440},[1439],[973,1621,1551],{"className":1622,"style":1623},[1444,1448],"margin-right:0.1076em;",[973,1625,1403],{"className":1626},[1477],[973,1628,1556],{"className":1629},[1444,1448],[973,1631,1107],{"className":1632},[1484],[973,1634],{"className":1635,"style":1457},[1456],[973,1637,1049],{"className":1638},[1461],[973,1640],{"className":1641,"style":1457},[1456],[973,1643,1645,1649,1734,1738,1781,1785,1788,1844,1847],{"className":1644},[1435],[973,1646],{"className":1647,"style":1648},[1439],"height:1.2849em;vertical-align:-0.4358em;",[973,1650,1653,1659],{"className":1651},[1652],"mop",[973,1654,1566],{"className":1655,"style":1658},[1652,1656,1657],"op-symbol","small-op","position:relative;top:0em;",[973,1660,1663],{"className":1661},[1662],"msupsub",[973,1664,1668,1725],{"className":1665},[1666,1667],"vlist-t","vlist-t2",[973,1669,1672,1720],{"className":1670},[1671],"vlist-r",[973,1673,1677,1705],{"className":1674,"style":1676},[1675],"vlist","height:0.8043em;",[973,1678,1680,1685],{"style":1679},"top:-2.4003em;margin-left:0em;margin-right:0.05em;",[973,1681],{"className":1682,"style":1684},[1683],"pstrut","height:2.7em;",[973,1686,1692],{"className":1687},[1688,1689,1690,1691],"sizing","reset-size6","size3","mtight",[973,1693,1695,1699,1702],{"className":1694},[1444,1691],[973,1696,1571],{"className":1697,"style":1698},[1444,1448,1691],"margin-right:0.0572em;",[973,1700,1049],{"className":1701},[1461,1691],[973,1703,1577],{"className":1704},[1444,1691],[973,1706,1708,1711],{"style":1707},"top:-3.2029em;margin-right:0.05em;",[973,1709],{"className":1710,"style":1684},[1683],[973,1712,1714],{"className":1713},[1688,1689,1690,1691],[973,1715,1717],{"className":1716},[1444,1691],[973,1718,1580],{"className":1719},[1444,1448,1691],[973,1721,1724],{"className":1722},[1723],"vlist-s","​",[973,1726,1728],{"className":1727},[1671],[973,1729,1732],{"className":1730,"style":1731},[1675],"height:0.4358em;",[973,1733],{},[973,1735],{"className":1736,"style":1737},[1456],"margin-right:0.1667em;",[973,1739,1741,1744],{"className":1740},[1444],[973,1742,1586],{"className":1743},[1444,1448],[973,1745,1747],{"className":1746},[1662],[973,1748,1750,1772],{"className":1749},[1666,1667],[973,1751,1753,1769],{"className":1752},[1671],[973,1754,1757],{"className":1755,"style":1756},[1675],"height:0.3117em;",[973,1758,1760,1763],{"style":1759},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[973,1761],{"className":1762,"style":1684},[1683],[973,1764,1766],{"className":1765},[1688,1689,1690,1691],[973,1767,1571],{"className":1768,"style":1698},[1444,1448,1691],[973,1770,1724],{"className":1771},[1723],[973,1773,1775],{"className":1774},[1671],[973,1776,1779],{"className":1777,"style":1778},[1675],"height:0.2861em;",[973,1780],{},[973,1782,1591],{"className":1783,"style":1784},[1444,1448],"margin-right:0.0359em;",[973,1786,1403],{"className":1787},[1477],[973,1789,1791,1795],{"className":1790},[1444],[973,1792,1598],{"className":1793,"style":1794},[1444,1448],"margin-right:0.0269em;",[973,1796,1798],{"className":1797},[1662],[973,1799,1801,1835],{"className":1800},[1666,1667],[973,1802,1804,1832],{"className":1803},[1671],[973,1805,1808,1820],{"className":1806,"style":1807},[1675],"height:0.8491em;",[973,1809,1811,1814],{"style":1810},"top:-2.4413em;margin-left:-0.0269em;margin-right:0.05em;",[973,1812],{"className":1813,"style":1684},[1683],[973,1815,1817],{"className":1816},[1688,1689,1690,1691],[973,1818,1571],{"className":1819,"style":1698},[1444,1448,1691],[973,1821,1823,1826],{"style":1822},"top:-3.063em;margin-right:0.05em;",[973,1824],{"className":1825,"style":1684},[1683],[973,1827,1829],{"className":1828},[1688,1689,1690,1691],[973,1830,1603],{"className":1831},[1444,1691],[973,1833,1724],{"className":1834},[1723],[973,1836,1838],{"className":1837},[1671],[973,1839,1842],{"className":1840,"style":1841},[1675],"height:0.3948em;",[973,1843],{},[973,1845,1556],{"className":1846},[1444,1448],[973,1848,1107],{"className":1849},[1484],[16,1851,1852,1853,1898,1899,512,2052,2195],{},"where ",[973,1854,1856,1877],{"className":1855},[1369],[973,1857,1859],{"className":1858},[1373],[1375,1860,1861],{"xmlns":1377},[1379,1862,1863,1874],{},[1382,1864,1865,1867,1869,1872],{},[1385,1866,1591],{},[1395,1868,1403],{"stretchy":1402},[1395,1870,1871],{},"⋅",[1395,1873,1107],{"stretchy":1402},[1423,1875,1876],{"encoding":1425},"\\sigma(\\cdot)",[973,1878,1880],{"className":1879,"ariaHidden":1431},[1430],[973,1881,1883,1886,1889,1892,1895],{"className":1882},[1435],[973,1884],{"className":1885,"style":1440},[1439],[973,1887,1591],{"className":1888,"style":1784},[1444,1448],[973,1890,1403],{"className":1891},[1477],[973,1893,1871],{"className":1894},[1444],[973,1896,1107],{"className":1897},[1484]," is the ReLU activation function and parameters are bounded by ",[973,1900,1902,1935],{"className":1901},[1369],[973,1903,1905],{"className":1904},[1373],[1375,1906,1907],{"xmlns":1377},[1379,1908,1909,1932],{},[1382,1910,1911,1914,1920,1922,1925],{},[1385,1912,1913],{"mathvariant":1387},"∥",[1582,1915,1916,1918],{},[1385,1917,1598],{},[1385,1919,1571],{},[1385,1921,1913],{"mathvariant":1387},[1395,1923,1924],{},"≤",[1582,1926,1927,1930],{},[1385,1928,1929],{},"B",[1385,1931,1598],{},[1423,1933,1934],{"encoding":1425},"\\|w_j\\| \\leq B_w",[973,1936,1938,2001],{"className":1937,"ariaHidden":1431},[1430],[973,1939,1941,1945,1948,1989,1992,1995,1998],{"className":1940},[1435],[973,1942],{"className":1943,"style":1944},[1439],"height:1.0361em;vertical-align:-0.2861em;",[973,1946,1913],{"className":1947},[1444],[973,1949,1951,1954],{"className":1950},[1444],[973,1952,1598],{"className":1953,"style":1794},[1444,1448],[973,1955,1957],{"className":1956},[1662],[973,1958,1960,1981],{"className":1959},[1666,1667],[973,1961,1963,1978],{"className":1962},[1671],[973,1964,1966],{"className":1965,"style":1756},[1675],[973,1967,1969,1972],{"style":1968},"top:-2.55em;margin-left:-0.0269em;margin-right:0.05em;",[973,1970],{"className":1971,"style":1684},[1683],[973,1973,1975],{"className":1974},[1688,1689,1690,1691],[973,1976,1571],{"className":1977,"style":1698},[1444,1448,1691],[973,1979,1724],{"className":1980},[1723],[973,1982,1984],{"className":1983},[1671],[973,1985,1987],{"className":1986,"style":1778},[1675],[973,1988],{},[973,1990,1913],{"className":1991},[1444],[973,1993],{"className":1994,"style":1457},[1456],[973,1996,1924],{"className":1997},[1461],[973,1999],{"className":2000,"style":1457},[1456],[973,2002,2004,2008],{"className":2003},[1435],[973,2005],{"className":2006,"style":2007},[1439],"height:0.8333em;vertical-align:-0.15em;",[973,2009,2011,2015],{"className":2010},[1444],[973,2012,1929],{"className":2013,"style":2014},[1444,1448],"margin-right:0.0502em;",[973,2016,2018],{"className":2017},[1662],[973,2019,2021,2043],{"className":2020},[1666,1667],[973,2022,2024,2040],{"className":2023},[1671],[973,2025,2028],{"className":2026,"style":2027},[1675],"height:0.1514em;",[973,2029,2031,2034],{"style":2030},"top:-2.55em;margin-left:-0.0502em;margin-right:0.05em;",[973,2032],{"className":2033,"style":1684},[1683],[973,2035,2037],{"className":2036},[1688,1689,1690,1691],[973,2038,1598],{"className":2039,"style":1794},[1444,1448,1691],[973,2041,1724],{"className":2042},[1723],[973,2044,2046],{"className":2045},[1671],[973,2047,2050],{"className":2048,"style":2049},[1675],"height:0.15em;",[973,2051],{},[973,2053,2055,2085],{"className":2054},[1369],[973,2056,2058],{"className":2057},[1373],[1375,2059,2060],{"xmlns":1377},[1379,2061,2062,2082],{},[1382,2063,2064,2066,2072,2074,2076],{},[1385,2065,1388],{"mathvariant":1387},[1582,2067,2068,2070],{},[1385,2069,1586],{},[1385,2071,1571],{},[1385,2073,1388],{"mathvariant":1387},[1395,2075,1924],{},[1582,2077,2078,2080],{},[1385,2079,1929],{},[1385,2081,1586],{},[1423,2083,2084],{"encoding":1425},"|u_j| \\leq B_u",[973,2086,2088,2149],{"className":2087,"ariaHidden":1431},[1430],[973,2089,2091,2094,2097,2137,2140,2143,2146],{"className":2090},[1435],[973,2092],{"className":2093,"style":1944},[1439],[973,2095,1388],{"className":2096},[1444],[973,2098,2100,2103],{"className":2099},[1444],[973,2101,1586],{"className":2102},[1444,1448],[973,2104,2106],{"className":2105},[1662],[973,2107,2109,2129],{"className":2108},[1666,1667],[973,2110,2112,2126],{"className":2111},[1671],[973,2113,2115],{"className":2114,"style":1756},[1675],[973,2116,2117,2120],{"style":1759},[973,2118],{"className":2119,"style":1684},[1683],[973,2121,2123],{"className":2122},[1688,1689,1690,1691],[973,2124,1571],{"className":2125,"style":1698},[1444,1448,1691],[973,2127,1724],{"className":2128},[1723],[973,2130,2132],{"className":2131},[1671],[973,2133,2135],{"className":2134,"style":1778},[1675],[973,2136],{},[973,2138,1388],{"className":2139},[1444],[973,2141],{"className":2142,"style":1457},[1456],[973,2144,1924],{"className":2145},[1461],[973,2147],{"className":2148,"style":1457},[1456],[973,2150,2152,2155],{"className":2151},[1435],[973,2153],{"className":2154,"style":2007},[1439],[973,2156,2158,2161],{"className":2157},[1444],[973,2159,1929],{"className":2160,"style":2014},[1444,1448],[973,2162,2164],{"className":2163},[1662],[973,2165,2167,2187],{"className":2166},[1666,1667],[973,2168,2170,2184],{"className":2169},[1671],[973,2171,2173],{"className":2172,"style":2027},[1675],[973,2174,2175,2178],{"style":2030},[973,2176],{"className":2177,"style":1684},[1683],[973,2179,2181],{"className":2180},[1688,1689,1690,1691],[973,2182,1586],{"className":2183},[1444,1448,1691],[973,2185,1724],{"className":2186},[1723],[973,2188,2190],{"className":2189},[1671],[973,2191,2193],{"className":2192,"style":2049},[1675],[973,2194],{},".",[30,2197,2199],{"id":2198},"part-a-naive-width-dependent-bound","Part A: Naive Width-Dependent Bound",[16,2201,2202,2203],{},"Starting with standard empirical Rademacher complexity analysis: ",[973,2204,2206,2268],{"className":2205},[1369],[973,2207,2209],{"className":2208},[1373],[1375,2210,2211],{"xmlns":1377},[1379,2212,2213,2265],{},[1382,2214,2215,2228,2230,2233,2235,2237,2240,2246,2252,2255],{},[1582,2216,2217,2220],{},[1385,2218,515],{"mathvariant":2219},"script",[1582,2221,2222,2225],{},[1385,2223,2224],{},"S",[1385,2226,2227],{},"n",[1395,2229,1403],{"stretchy":1402},[1385,2231,2232],{"mathvariant":2219},"H",[1395,2234,1107],{"stretchy":1402},[1395,2236,1924],{},[1575,2238,2239],{},"2",[1582,2241,2242,2244],{},[1385,2243,1929],{},[1385,2245,1598],{},[1582,2247,2248,2250],{},[1385,2249,1929],{},[1385,2251,1586],{},[1385,2253,2254],{},"C",[2256,2257,2258],"msqrt",{},[2259,2260,2261,2263],"mfrac",{},[1385,2262,1580],{},[1385,2264,2227],{},[1423,2266,2267],{"encoding":1425},"\\mathcal{R}_{S_n}(\\mathcal{H}) \\leq 2 B_w B_u C \\sqrt{\\frac{m}{n}}",[973,2269,2271,2387],{"className":2270,"ariaHidden":1431},[1430],[973,2272,2274,2278,2368,2371,2375,2378,2381,2384],{"className":2273},[1435],[973,2275],{"className":2276,"style":2277},[1439],"height:1.0001em;vertical-align:-0.2501em;",[973,2279,2281,2285],{"className":2280},[1444],[973,2282,515],{"className":2283},[1444,2284],"mathcal",[973,2286,2288],{"className":2287},[1662],[973,2289,2291,2359],{"className":2290},[1666,1667],[973,2292,2294,2356],{"className":2293},[1671],[973,2295,2298],{"className":2296,"style":2297},[1675],"height:0.3283em;",[973,2299,2300,2303],{"style":1759},[973,2301],{"className":2302,"style":1684},[1683],[973,2304,2306],{"className":2305},[1688,1689,1690,1691],[973,2307,2309],{"className":2308},[1444,1691],[973,2310,2312,2316],{"className":2311},[1444,1691],[973,2313,2224],{"className":2314,"style":2315},[1444,1448,1691],"margin-right:0.0576em;",[973,2317,2319],{"className":2318},[1662],[973,2320,2322,2347],{"className":2321},[1666,1667],[973,2323,2325,2344],{"className":2324},[1671],[973,2326,2329],{"className":2327,"style":2328},[1675],"height:0.1645em;",[973,2330,2332,2336],{"style":2331},"top:-2.357em;margin-left:-0.0576em;margin-right:0.0714em;",[973,2333],{"className":2334,"style":2335},[1683],"height:2.5em;",[973,2337,2341],{"className":2338},[1688,2339,2340,1691],"reset-size3","size1",[973,2342,2227],{"className":2343},[1444,1448,1691],[973,2345,1724],{"className":2346},[1723],[973,2348,2350],{"className":2349},[1671],[973,2351,2354],{"className":2352,"style":2353},[1675],"height:0.143em;",[973,2355],{},[973,2357,1724],{"className":2358},[1723],[973,2360,2362],{"className":2361},[1671],[973,2363,2366],{"className":2364,"style":2365},[1675],"height:0.2501em;",[973,2367],{},[973,2369,1403],{"className":2370},[1477],[973,2372,2232],{"className":2373,"style":2374},[1444,2284],"margin-right:0.0097em;",[973,2376,1107],{"className":2377},[1484],[973,2379],{"className":2380,"style":1457},[1456],[973,2382,1924],{"className":2383},[1461],[973,2385],{"className":2386,"style":1457},[1456],[973,2388,2390,2394,2397,2437,2477,2481],{"className":2389},[1435],[973,2391],{"className":2392,"style":2393},[1439],"height:1.24em;vertical-align:-0.3798em;",[973,2395,2239],{"className":2396},[1444],[973,2398,2400,2403],{"className":2399},[1444],[973,2401,1929],{"className":2402,"style":2014},[1444,1448],[973,2404,2406],{"className":2405},[1662],[973,2407,2409,2429],{"className":2408},[1666,1667],[973,2410,2412,2426],{"className":2411},[1671],[973,2413,2415],{"className":2414,"style":2027},[1675],[973,2416,2417,2420],{"style":2030},[973,2418],{"className":2419,"style":1684},[1683],[973,2421,2423],{"className":2422},[1688,1689,1690,1691],[973,2424,1598],{"className":2425,"style":1794},[1444,1448,1691],[973,2427,1724],{"className":2428},[1723],[973,2430,2432],{"className":2431},[1671],[973,2433,2435],{"className":2434,"style":2049},[1675],[973,2436],{},[973,2438,2440,2443],{"className":2439},[1444],[973,2441,1929],{"className":2442,"style":2014},[1444,1448],[973,2444,2446],{"className":2445},[1662],[973,2447,2449,2469],{"className":2448},[1666,1667],[973,2450,2452,2466],{"className":2451},[1671],[973,2453,2455],{"className":2454,"style":2027},[1675],[973,2456,2457,2460],{"style":2030},[973,2458],{"className":2459,"style":1684},[1683],[973,2461,2463],{"className":2462},[1688,1689,1690,1691],[973,2464,1586],{"className":2465},[1444,1448,1691],[973,2467,1724],{"className":2468},[1723],[973,2470,2472],{"className":2471},[1671],[973,2473,2475],{"className":2474,"style":2049},[1675],[973,2476],{},[973,2478,2254],{"className":2479,"style":2480},[1444,1448],"margin-right:0.0715em;",[973,2482,2485],{"className":2483},[1444,2484],"sqrt",[973,2486,2488,2611],{"className":2487},[1666,1667],[973,2489,2491,2608],{"className":2490},[1671],[973,2492,2495,2585],{"className":2493,"style":2494},[1675],"height:0.8602em;",[973,2496,2500,2504],{"className":2497,"style":2499},[2498],"svg-align","top:-3.2em;",[973,2501],{"className":2502,"style":2503},[1683],"height:3.2em;",[973,2505,2508],{"className":2506,"style":2507},[1444],"padding-left:1em;",[973,2509,2511,2515,2582],{"className":2510},[1444],[973,2512],{"className":2513},[1477,2514],"nulldelimiter",[973,2516,2518],{"className":2517},[2259],[973,2519,2521,2573],{"className":2520},[1666,1667],[973,2522,2524,2570],{"className":2523},[1671],[973,2525,2528,2544,2555],{"className":2526,"style":2527},[1675],"height:0.6954em;",[973,2529,2531,2535],{"style":2530},"top:-2.655em;",[973,2532],{"className":2533,"style":2534},[1683],"height:3em;",[973,2536,2538],{"className":2537},[1688,1689,1690,1691],[973,2539,2541],{"className":2540},[1444,1691],[973,2542,2227],{"className":2543},[1444,1448,1691],[973,2545,2547,2550],{"style":2546},"top:-3.23em;",[973,2548],{"className":2549,"style":2534},[1683],[973,2551],{"className":2552,"style":2554},[2553],"frac-line","border-bottom-width:0.04em;",[973,2556,2558,2561],{"style":2557},"top:-3.394em;",[973,2559],{"className":2560,"style":2534},[1683],[973,2562,2564],{"className":2563},[1688,1689,1690,1691],[973,2565,2567],{"className":2566},[1444,1691],[973,2568,1580],{"className":2569},[1444,1448,1691],[973,2571,1724],{"className":2572},[1723],[973,2574,2576],{"className":2575},[1671],[973,2577,2580],{"className":2578,"style":2579},[1675],"height:0.345em;",[973,2581],{},[973,2583],{"className":2584},[1484,2514],[973,2586,2588,2591],{"style":2587},"top:-2.8202em;",[973,2589],{"className":2590,"style":2503},[1683],[973,2592,2596],{"className":2593,"style":2595},[2594],"hide-tail","min-width:1.02em;height:1.28em;",[2597,2598,2604],"svg",{"xmlns":2599,"width":2600,"height":2601,"viewBox":2602,"preserveAspectRatio":2603},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","400em","1.28em","0 0 400000 1296","xMinYMin slice",[2605,2606],"path",{"d":2607},"M263,681c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl0 -0\nc4.7,-7.3,11,-11,19,-11\nH40000v40H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM1001 80h400000v40h-400000z",[973,2609,1724],{"className":2610},[1723],[973,2612,2614],{"className":2613},[1671],[973,2615,2618],{"className":2616,"style":2617},[1675],"height:0.3798em;",[973,2619],{},[16,2621,2622,2623,2652,2653,2706],{},"This bound demonstrates the fundamental problem: it depends linearly on network width ",[973,2624,2626,2639],{"className":2625},[1369],[973,2627,2629],{"className":2628},[1373],[1375,2630,2631],{"xmlns":1377},[1379,2632,2633,2637],{},[1382,2634,2635],{},[1385,2636,1580],{},[1423,2638,1580],{"encoding":1425},[973,2640,2642],{"className":2641,"ariaHidden":1431},[1430],[973,2643,2645,2649],{"className":2644},[1435],[973,2646],{"className":2647,"style":2648},[1439],"height:0.4306em;",[973,2650,1580],{"className":2651},[1444,1448],", making it vacuous for overparameterized networks where ",[973,2654,2656,2675],{"className":2655},[1369],[973,2657,2659],{"className":2658},[1373],[1375,2660,2661],{"xmlns":1377},[1379,2662,2663,2672],{},[1382,2664,2665,2667,2670],{},[1385,2666,1580],{},[1395,2668,2669],{},"≫",[1385,2671,2227],{},[1423,2673,2674],{"encoding":1425},"m \\gg n",[973,2676,2678,2697],{"className":2677,"ariaHidden":1431},[1430],[973,2679,2681,2685,2688,2691,2694],{"className":2680},[1435],[973,2682],{"className":2683,"style":2684},[1439],"height:0.5782em;vertical-align:-0.0391em;",[973,2686,1580],{"className":2687},[1444,1448],[973,2689],{"className":2690,"style":1457},[1456],[973,2692,2669],{"className":2693},[1461],[973,2695],{"className":2696,"style":1457},[1456],[973,2698,2700,2703],{"className":2699},[1435],[973,2701],{"className":2702,"style":2648},[1439],[973,2704,2227],{"className":2705},[1444,1448],". This gap between theory and practice motivated the subsequent refinements.",[30,2708,2710],{"id":2709},"part-b-symmetrization-inequality-for-relu","Part B: Symmetrization Inequality for ReLU",[16,2712,2713,2714,2891],{},"Key insight exploiting ReLU structure: ",[973,2715,2717,2780],{"className":2716},[1369],[973,2718,2720],{"className":2719},[1373],[1375,2721,2722],{"xmlns":1377},[1379,2723,2724,2777],{},[1382,2725,2726,2730,2751,2753,2755,2757,2759],{},[1385,2727,2729],{"mathvariant":2728},"double-struck","E",[1382,2731,2732,2735,2738,2741,2743,2746,2748],{},[1395,2733,2734],{"fence":1431},"[",[1385,2736,2737],{},"sup",[1395,2739,2740],{},"⁡",[1385,2742,1388],{"mathvariant":1387},[1385,2744,2745],{"mathvariant":2219},"Z",[1385,2747,1388],{"mathvariant":1387},[1395,2749,2750],{"fence":1431},"]",[1395,2752,1924],{},[1575,2754,2239],{},[1395,2756,1871],{},[1385,2758,2729],{"mathvariant":2728},[1382,2760,2761,2763,2765,2767,2769,2771,2773,2775],{},[1395,2762,2734],{"fence":1431},[1385,2764,2737],{},[1395,2766,2740],{},[1385,2768,1399],{},[1395,2770,1403],{"stretchy":1402},[1385,2772,2745],{"mathvariant":2219},[1395,2774,1107],{"stretchy":1402},[1395,2776,2750],{"fence":1431},[1423,2778,2779],{"encoding":1425},"\\mathbb{E}\\left[\\sup |\\mathcal{Z}|\\right] \\leq 2 \\cdot \\mathbb{E}\\left[\\sup \\phi(\\mathcal{Z})\\right]",[973,2781,2783,2833,2852],{"className":2782,"ariaHidden":1431},[1430],[973,2784,2786,2789,2793,2796,2824,2827,2830],{"className":2785},[1435],[973,2787],{"className":2788,"style":1440},[1439],[973,2790,2729],{"className":2791},[1444,2792],"mathbb",[973,2794],{"className":2795,"style":1737},[1456],[973,2797,2800,2805,2808,2811,2814,2818,2821],{"className":2798},[2799],"minner",[973,2801,2734],{"className":2802,"style":2804},[1477,2803],"delimcenter","top:0em;",[973,2806,2737],{"className":2807},[1652],[973,2809],{"className":2810,"style":1737},[1456],[973,2812,1388],{"className":2813},[1444],[973,2815,2745],{"className":2816,"style":2817},[1444,2284],"margin-right:0.0794em;",[973,2819,1388],{"className":2820},[1444],[973,2822,2750],{"className":2823,"style":2804},[1484,2803],[973,2825],{"className":2826,"style":1457},[1456],[973,2828,1924],{"className":2829},[1461],[973,2831],{"className":2832,"style":1457},[1456],[973,2834,2836,2840,2843,2846,2849],{"className":2835},[1435],[973,2837],{"className":2838,"style":2839},[1439],"height:0.6444em;",[973,2841,2239],{"className":2842},[1444],[973,2844],{"className":2845,"style":1488},[1456],[973,2847,1871],{"className":2848},[1492],[973,2850],{"className":2851,"style":1488},[1456],[973,2853,2855,2858,2861,2864],{"className":2854},[1435],[973,2856],{"className":2857,"style":1440},[1439],[973,2859,2729],{"className":2860},[1444,2792],[973,2862],{"className":2863,"style":1737},[1456],[973,2865,2867,2870,2873,2876,2879,2882,2885,2888],{"className":2866},[2799],[973,2868,2734],{"className":2869,"style":2804},[1477,2803],[973,2871,2737],{"className":2872},[1652],[973,2874],{"className":2875,"style":1737},[1456],[973,2877,1399],{"className":2878},[1444,1448],[973,2880,1403],{"className":2881},[1477],[973,2883,2745],{"className":2884,"style":2817},[1444,2284],[973,2886,1107],{"className":2887},[1484],[973,2889,2750],{"className":2890,"style":2804},[1484,2803],"\nDerivation uses:",[62,2893,2894,3014,3082],{},[65,2895,2896,2897],{},"ReLU decomposition: ",[973,2898,2900,2939],{"className":2899},[1369],[973,2901,2903],{"className":2902},[1373],[1375,2904,2905],{"xmlns":1377},[1379,2906,2907,2937],{},[1382,2908,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935],{},[1385,2910,1388],{"mathvariant":1387},[1385,2912,1391],{},[1385,2914,1388],{"mathvariant":1387},[1395,2916,1049],{},[1385,2918,1399],{},[1395,2920,1403],{"stretchy":1402},[1385,2922,1391],{},[1395,2924,1107],{"stretchy":1402},[1395,2926,1410],{},[1385,2928,1399],{},[1395,2930,1403],{"stretchy":1402},[1395,2932,1417],{},[1385,2934,1391],{},[1395,2936,1107],{"stretchy":1402},[1423,2938,1426],{"encoding":1425},[973,2940,2942,2966,2993],{"className":2941,"ariaHidden":1431},[1430],[973,2943,2945,2948,2951,2954,2957,2960,2963],{"className":2944},[1435],[973,2946],{"className":2947,"style":1440},[1439],[973,2949,1388],{"className":2950},[1444],[973,2952,1391],{"className":2953,"style":1449},[1444,1448],[973,2955,1388],{"className":2956},[1444],[973,2958],{"className":2959,"style":1457},[1456],[973,2961,1049],{"className":2962},[1461],[973,2964],{"className":2965,"style":1457},[1456],[973,2967,2969,2972,2975,2978,2981,2984,2987,2990],{"className":2968},[1435],[973,2970],{"className":2971,"style":1440},[1439],[973,2973,1399],{"className":2974},[1444,1448],[973,2976,1403],{"className":2977},[1477],[973,2979,1391],{"className":2980,"style":1449},[1444,1448],[973,2982,1107],{"className":2983},[1484],[973,2985],{"className":2986,"style":1488},[1456],[973,2988,1410],{"className":2989},[1492],[973,2991],{"className":2992,"style":1488},[1456],[973,2994,2996,2999,3002,3005,3008,3011],{"className":2995},[1435],[973,2997],{"className":2998,"style":1440},[1439],[973,3000,1399],{"className":3001},[1444,1448],[973,3003,1403],{"className":3004},[1477],[973,3006,1417],{"className":3007},[1444],[973,3009,1391],{"className":3010,"style":1449},[1444,1448],[973,3012,1107],{"className":3013},[1484],[65,3015,3016,3017,512,3046,3081],{},"Distributional symmetry: ",[973,3018,3020,3034],{"className":3019},[1369],[973,3021,3023],{"className":3022},[1373],[1375,3024,3025],{"xmlns":1377},[1379,3026,3027,3031],{},[1382,3028,3029],{},[1385,3030,1591],{},[1423,3032,3033],{"encoding":1425},"\\sigma",[973,3035,3037],{"className":3036,"ariaHidden":1431},[1430],[973,3038,3040,3043],{"className":3039},[1435],[973,3041],{"className":3042,"style":2648},[1439],[973,3044,1591],{"className":3045,"style":1784},[1444,1448],[973,3047,3049,3065],{"className":3048},[1369],[973,3050,3052],{"className":3051},[1373],[1375,3053,3054],{"xmlns":1377},[1379,3055,3056,3062],{},[1382,3057,3058,3060],{},[1395,3059,1417],{},[1385,3061,1591],{},[1423,3063,3064],{"encoding":1425},"-\\sigma",[973,3066,3068],{"className":3067,"ariaHidden":1431},[1430],[973,3069,3071,3075,3078],{"className":3070},[1435],[973,3072],{"className":3073,"style":3074},[1439],"height:0.6667em;vertical-align:-0.0833em;",[973,3076,1417],{"className":3077},[1444],[973,3079,1591],{"className":3080,"style":1784},[1444,1448]," are identically distributed",[65,3083,3084],{},"Rademacher averaging: Cancellation of terms through symmetry arguments",[16,3086,3087],{},"This establishes tighter bounds by leveraging the activation function's inherent structure.",[30,3089,3091],{"id":3090},"part-c-scale-invariant-complexity-measure","Part C: Scale-Invariant Complexity Measure",[16,3093,3094,3095,3098,3099,3189,3190,3244,3245],{},"Leveraging the ",[25,3096,3097],{},"positive homogeneity"," of ReLU (",[973,3100,3102,3137],{"className":3101},[1369],[973,3103,3105],{"className":3104},[1373],[1375,3106,3107],{"xmlns":1377},[1379,3108,3109,3134],{},[1382,3110,3111,3113,3115,3118,3120,3122,3124,3126,3128,3130,3132],{},[1385,3112,1591],{},[1395,3114,1403],{"stretchy":1402},[1385,3116,3117],{},"λ",[1385,3119,1391],{},[1395,3121,1107],{"stretchy":1402},[1395,3123,1049],{},[1385,3125,3117],{},[1385,3127,1591],{},[1395,3129,1403],{"stretchy":1402},[1385,3131,1391],{},[1395,3133,1107],{"stretchy":1402},[1423,3135,3136],{"encoding":1425},"\\sigma(\\lambda z) = \\lambda \\sigma(z)",[973,3138,3140,3170],{"className":3139,"ariaHidden":1431},[1430],[973,3141,3143,3146,3149,3152,3155,3158,3161,3164,3167],{"className":3142},[1435],[973,3144],{"className":3145,"style":1440},[1439],[973,3147,1591],{"className":3148,"style":1784},[1444,1448],[973,3150,1403],{"className":3151},[1477],[973,3153,3117],{"className":3154},[1444,1448],[973,3156,1391],{"className":3157,"style":1449},[1444,1448],[973,3159,1107],{"className":3160},[1484],[973,3162],{"className":3163,"style":1457},[1456],[973,3165,1049],{"className":3166},[1461],[973,3168],{"className":3169,"style":1457},[1456],[973,3171,3173,3176,3180,3183,3186],{"className":3172},[1435],[973,3174],{"className":3175,"style":1440},[1439],[973,3177,3179],{"className":3178,"style":1784},[1444,1448],"λσ",[973,3181,1403],{"className":3182},[1477],[973,3184,1391],{"className":3185,"style":1449},[1444,1448],[973,3187,1107],{"className":3188},[1484]," for ",[973,3191,3193,3213],{"className":3192},[1369],[973,3194,3196],{"className":3195},[1373],[1375,3197,3198],{"xmlns":1377},[1379,3199,3200,3210],{},[1382,3201,3202,3204,3207],{},[1385,3203,3117],{},[1395,3205,3206],{},">",[1575,3208,3209],{},"0",[1423,3211,3212],{"encoding":1425},"\\lambda > 0",[973,3214,3216,3235],{"className":3215,"ariaHidden":1431},[1430],[973,3217,3219,3223,3226,3229,3232],{"className":3218},[1435],[973,3220],{"className":3221,"style":3222},[1439],"height:0.7335em;vertical-align:-0.0391em;",[973,3224,3117],{"className":3225},[1444,1448],[973,3227],{"className":3228,"style":1457},[1456],[973,3230,3206],{"className":3231},[1461],[973,3233],{"className":3234,"style":1457},[1456],[973,3236,3238,3241],{"className":3237},[1435],[973,3239],{"className":3240,"style":2839},[1439],[973,3242,3209],{"className":3243},[1444],"), we introduce scale-invariant parameterization: ",[973,3246,3248,3332],{"className":3247},[1369],[973,3249,3251],{"className":3250},[1373],[1375,3252,3253],{"xmlns":1377},[1379,3254,3255,3329],{},[1382,3256,3257,3269,3271,3291,3294,3297,3307,3309],{},[1582,3258,3259,3267],{},[3260,3261,3262,3264],"mover",{"accent":1431},[1385,3263,1586],{},[1395,3265,3266],{},"^",[1385,3268,1571],{},[1395,3270,1049],{},[2259,3272,3273,3279],{},[1582,3274,3275,3277],{},[1385,3276,1586],{},[1385,3278,1571],{},[1382,3280,3281,3283,3289],{},[1385,3282,1913],{"mathvariant":1387},[1582,3284,3285,3287],{},[1385,3286,1598],{},[1385,3288,1571],{},[1385,3290,1913],{"mathvariant":1387},[1395,3292,3293],{"separator":1431},",",[1456,3295],{"width":3296},"1em",[1582,3298,3299,3305],{},[3260,3300,3301,3303],{"accent":1431},[1385,3302,1598],{},[1395,3304,3266],{},[1385,3306,1571],{},[1395,3308,1049],{},[2259,3310,3311,3317],{},[1582,3312,3313,3315],{},[1385,3314,1598],{},[1385,3316,1571],{},[1382,3318,3319,3321,3327],{},[1385,3320,1913],{"mathvariant":1387},[1582,3322,3323,3325],{},[1385,3324,1598],{},[1385,3326,1571],{},[1385,3328,1913],{"mathvariant":1387},[1423,3330,3331],{"encoding":1425},"\\hat{u}_j = \\frac{u_j}{\\|w_j\\|}, \\quad \\hat{w}_j = \\frac{w_j}{\\|w_j\\|}",[973,3333,3335,3424,3675],{"className":3334,"ariaHidden":1431},[1430],[973,3336,3338,3342,3415,3418,3421],{"className":3337},[1435],[973,3339],{"className":3340,"style":3341},[1439],"height:0.9805em;vertical-align:-0.2861em;",[973,3343,3345,3381],{"className":3344},[1444],[973,3346,3349],{"className":3347},[1444,3348],"accent",[973,3350,3352],{"className":3351},[1666],[973,3353,3355],{"className":3354},[1671],[973,3356,3359,3368],{"className":3357,"style":3358},[1675],"height:0.6944em;",[973,3360,3362,3365],{"style":3361},"top:-3em;",[973,3363],{"className":3364,"style":2534},[1683],[973,3366,1586],{"className":3367},[1444,1448],[973,3369,3370,3373],{"style":3361},[973,3371],{"className":3372,"style":2534},[1683],[973,3374,3378],{"className":3375,"style":3377},[3376],"accent-body","left:-0.2222em;",[973,3379,3266],{"className":3380},[1444],[973,3382,3384],{"className":3383},[1662],[973,3385,3387,3407],{"className":3386},[1666,1667],[973,3388,3390,3404],{"className":3389},[1671],[973,3391,3393],{"className":3392,"style":1756},[1675],[973,3394,3395,3398],{"style":1759},[973,3396],{"className":3397,"style":1684},[1683],[973,3399,3401],{"className":3400},[1688,1689,1690,1691],[973,3402,1571],{"className":3403,"style":1698},[1444,1448,1691],[973,3405,1724],{"className":3406},[1723],[973,3408,3410],{"className":3409},[1671],[973,3411,3413],{"className":3412,"style":1778},[1675],[973,3414],{},[973,3416],{"className":3417,"style":1457},[1456],[973,3419,1049],{"className":3420},[1461],[973,3422],{"className":3423,"style":1457},[1456],[973,3425,3427,3431,3586,3590,3594,3597,3666,3669,3672],{"className":3426},[1435],[973,3428],{"className":3429,"style":3430},[1439],"height:1.351em;vertical-align:-0.5423em;",[973,3432,3434,3437,3583],{"className":3433},[1444],[973,3435],{"className":3436},[1477,2514],[973,3438,3440],{"className":3439},[2259],[973,3441,3443,3574],{"className":3442},[1666,1667],[973,3444,3446,3571],{"className":3445},[1671],[973,3447,3450,3510,3518],{"className":3448,"style":3449},[1675],"height:0.8087em;",[973,3451,3452,3455],{"style":2530},[973,3453],{"className":3454,"style":2534},[1683],[973,3456,3458],{"className":3457},[1688,1689,1690,1691],[973,3459,3461,3464,3507],{"className":3460},[1444,1691],[973,3462,1913],{"className":3463},[1444,1691],[973,3465,3467,3470],{"className":3466},[1444,1691],[973,3468,1598],{"className":3469,"style":1794},[1444,1448,1691],[973,3471,3473],{"className":3472},[1662],[973,3474,3476,3498],{"className":3475},[1666,1667],[973,3477,3479,3495],{"className":3478},[1671],[973,3480,3483],{"className":3481,"style":3482},[1675],"height:0.3281em;",[973,3484,3486,3489],{"style":3485},"top:-2.357em;margin-left:-0.0269em;margin-right:0.0714em;",[973,3487],{"className":3488,"style":2335},[1683],[973,3490,3492],{"className":3491},[1688,2339,2340,1691],[973,3493,1571],{"className":3494,"style":1698},[1444,1448,1691],[973,3496,1724],{"className":3497},[1723],[973,3499,3501],{"className":3500},[1671],[973,3502,3505],{"className":3503,"style":3504},[1675],"height:0.2819em;",[973,3506],{},[973,3508,1913],{"className":3509},[1444,1691],[973,3511,3512,3515],{"style":2546},[973,3513],{"className":3514,"style":2534},[1683],[973,3516],{"className":3517,"style":2554},[2553],[973,3519,3521,3524],{"style":3520},"top:-3.5073em;",[973,3522],{"className":3523,"style":2534},[1683],[973,3525,3527],{"className":3526},[1688,1689,1690,1691],[973,3528,3530],{"className":3529},[1444,1691],[973,3531,3533,3536],{"className":3532},[1444,1691],[973,3534,1586],{"className":3535},[1444,1448,1691],[973,3537,3539],{"className":3538},[1662],[973,3540,3542,3563],{"className":3541},[1666,1667],[973,3543,3545,3560],{"className":3544},[1671],[973,3546,3548],{"className":3547,"style":3482},[1675],[973,3549,3551,3554],{"style":3550},"top:-2.357em;margin-left:0em;margin-right:0.0714em;",[973,3552],{"className":3553,"style":2335},[1683],[973,3555,3557],{"className":3556},[1688,2339,2340,1691],[973,3558,1571],{"className":3559,"style":1698},[1444,1448,1691],[973,3561,1724],{"className":3562},[1723],[973,3564,3566],{"className":3565},[1671],[973,3567,3569],{"className":3568,"style":3504},[1675],[973,3570],{},[973,3572,1724],{"className":3573},[1723],[973,3575,3577],{"className":3576},[1671],[973,3578,3581],{"className":3579,"style":3580},[1675],"height:0.5423em;",[973,3582],{},[973,3584],{"className":3585},[1484,2514],[973,3587,3293],{"className":3588},[3589],"mpunct",[973,3591],{"className":3592,"style":3593},[1456],"margin-right:1em;",[973,3595],{"className":3596,"style":1737},[1456],[973,3598,3600,3632],{"className":3599},[1444],[973,3601,3603],{"className":3602},[1444,3348],[973,3604,3606],{"className":3605},[1666],[973,3607,3609],{"className":3608},[1671],[973,3610,3612,3620],{"className":3611,"style":3358},[1675],[973,3613,3614,3617],{"style":3361},[973,3615],{"className":3616,"style":2534},[1683],[973,3618,1598],{"className":3619,"style":1794},[1444,1448],[973,3621,3622,3625],{"style":3361},[973,3623],{"className":3624,"style":2534},[1683],[973,3626,3629],{"className":3627,"style":3628},[3376],"left:-0.1667em;",[973,3630,3266],{"className":3631},[1444],[973,3633,3635],{"className":3634},[1662],[973,3636,3638,3658],{"className":3637},[1666,1667],[973,3639,3641,3655],{"className":3640},[1671],[973,3642,3644],{"className":3643,"style":1756},[1675],[973,3645,3646,3649],{"style":1968},[973,3647],{"className":3648,"style":1684},[1683],[973,3650,3652],{"className":3651},[1688,1689,1690,1691],[973,3653,1571],{"className":3654,"style":1698},[1444,1448,1691],[973,3656,1724],{"className":3657},[1723],[973,3659,3661],{"className":3660},[1671],[973,3662,3664],{"className":3663,"style":1778},[1675],[973,3665],{},[973,3667],{"className":3668,"style":1457},[1456],[973,3670,1049],{"className":3671},[1461],[973,3673],{"className":3674,"style":1457},[1456],[973,3676,3678,3681],{"className":3677},[1435],[973,3679],{"className":3680,"style":3430},[1439],[973,3682,3684,3687,3826],{"className":3683},[1444],[973,3685],{"className":3686},[1477,2514],[973,3688,3690],{"className":3689},[2259],[973,3691,3693,3818],{"className":3692},[1666,1667],[973,3694,3696,3815],{"className":3695},[1671],[973,3697,3699,3756,3764],{"className":3698,"style":3449},[1675],[973,3700,3701,3704],{"style":2530},[973,3702],{"className":3703,"style":2534},[1683],[973,3705,3707],{"className":3706},[1688,1689,1690,1691],[973,3708,3710,3713,3753],{"className":3709},[1444,1691],[973,3711,1913],{"className":3712},[1444,1691],[973,3714,3716,3719],{"className":3715},[1444,1691],[973,3717,1598],{"className":3718,"style":1794},[1444,1448,1691],[973,3720,3722],{"className":3721},[1662],[973,3723,3725,3745],{"className":3724},[1666,1667],[973,3726,3728,3742],{"className":3727},[1671],[973,3729,3731],{"className":3730,"style":3482},[1675],[973,3732,3733,3736],{"style":3485},[973,3734],{"className":3735,"style":2335},[1683],[973,3737,3739],{"className":3738},[1688,2339,2340,1691],[973,3740,1571],{"className":3741,"style":1698},[1444,1448,1691],[973,3743,1724],{"className":3744},[1723],[973,3746,3748],{"className":3747},[1671],[973,3749,3751],{"className":3750,"style":3504},[1675],[973,3752],{},[973,3754,1913],{"className":3755},[1444,1691],[973,3757,3758,3761],{"style":2546},[973,3759],{"className":3760,"style":2534},[1683],[973,3762],{"className":3763,"style":2554},[2553],[973,3765,3766,3769],{"style":3520},[973,3767],{"className":3768,"style":2534},[1683],[973,3770,3772],{"className":3771},[1688,1689,1690,1691],[973,3773,3775],{"className":3774},[1444,1691],[973,3776,3778,3781],{"className":3777},[1444,1691],[973,3779,1598],{"className":3780,"style":1794},[1444,1448,1691],[973,3782,3784],{"className":3783},[1662],[973,3785,3787,3807],{"className":3786},[1666,1667],[973,3788,3790,3804],{"className":3789},[1671],[973,3791,3793],{"className":3792,"style":3482},[1675],[973,3794,3795,3798],{"style":3485},[973,3796],{"className":3797,"style":2335},[1683],[973,3799,3801],{"className":3800},[1688,2339,2340,1691],[973,3802,1571],{"className":3803,"style":1698},[1444,1448,1691],[973,3805,1724],{"className":3806},[1723],[973,3808,3810],{"className":3809},[1671],[973,3811,3813],{"className":3812,"style":3504},[1675],[973,3814],{},[973,3816,1724],{"className":3817},[1723],[973,3819,3821],{"className":3820},[1671],[973,3822,3824],{"className":3823,"style":3580},[1675],[973,3825],{},[973,3827],{"className":3828},[1484,2514],[16,3830,3831,3832],{},"This transformation yields a width-independent bound: ",[973,3833,3835,3878],{"className":3834},[1369],[973,3836,3838],{"className":3837},[1373],[1375,3839,3840],{"xmlns":1377},[1379,3841,3842,3875],{},[1382,3843,3844,3846,3848,3850,3852,3854,3856,3858,3860],{},[1385,3845,515],{"mathvariant":2219},[1395,3847,1403],{"stretchy":1402},[1385,3849,2232],{"mathvariant":2219},[1395,3851,1107],{"stretchy":1402},[1395,3853,1924],{},[1385,3855,2254],{},[1395,3857,1871],{},[1385,3859,1929],{},[2256,3861,3862],{},[2259,3863,3864,3873],{},[1382,3865,3866,3869,3871],{},[1385,3867,3868],{},"log",[1395,3870,2740],{},[1385,3872,1580],{},[1385,3874,2227],{},[1423,3876,3877],{"encoding":1425},"\\mathcal{R}(\\mathcal{H}) \\leq C \\cdot B \\sqrt{\\frac{\\log m}{n}}",[973,3879,3881,3908,3927],{"className":3880,"ariaHidden":1431},[1430],[973,3882,3884,3887,3890,3893,3896,3899,3902,3905],{"className":3883},[1435],[973,3885],{"className":3886,"style":1440},[1439],[973,3888,515],{"className":3889},[1444,2284],[973,3891,1403],{"className":3892},[1477],[973,3894,2232],{"className":3895,"style":2374},[1444,2284],[973,3897,1107],{"className":3898},[1484],[973,3900],{"className":3901,"style":1457},[1456],[973,3903,1924],{"className":3904},[1461],[973,3906],{"className":3907,"style":1457},[1456],[973,3909,3911,3915,3918,3921,3924],{"className":3910},[1435],[973,3912],{"className":3913,"style":3914},[1439],"height:0.6833em;",[973,3916,2254],{"className":3917,"style":2480},[1444,1448],[973,3919],{"className":3920,"style":1488},[1456],[973,3922,1871],{"className":3923},[1492],[973,3925],{"className":3926,"style":1488},[1456],[973,3928,3930,3934,3937],{"className":3929},[1435],[973,3931],{"className":3932,"style":3933},[1439],"height:1.84em;vertical-align:-0.5614em;",[973,3935,1929],{"className":3936,"style":2014},[1444,1448],[973,3938,3940],{"className":3939},[1444,2484],[973,3941,3943,4070],{"className":3942},[1666,1667],[973,3944,3946,4067],{"className":3945},[1671],[973,3947,3950,4050],{"className":3948,"style":3949},[1675],"height:1.2786em;",[973,3951,3954,3958],{"className":3952,"style":3953},[2498],"top:-3.8em;",[973,3955],{"className":3956,"style":3957},[1683],"height:3.8em;",[973,3959,3961],{"className":3960,"style":2507},[1444],[973,3962,3964,3967,4047],{"className":3963},[1444],[973,3965],{"className":3966},[1477,2514],[973,3968,3970],{"className":3969},[2259],[973,3971,3973,4039],{"className":3972},[1666,1667],[973,3974,3976,4036],{"className":3975},[1671],[973,3977,3980,3994,4002],{"className":3978,"style":3979},[1675],"height:0.9322em;",[973,3981,3982,3985],{"style":2530},[973,3983],{"className":3984,"style":2534},[1683],[973,3986,3988],{"className":3987},[1688,1689,1690,1691],[973,3989,3991],{"className":3990},[1444,1691],[973,3992,2227],{"className":3993},[1444,1448,1691],[973,3995,3996,3999],{"style":2546},[973,3997],{"className":3998,"style":2534},[1683],[973,4000],{"className":4001,"style":2554},[2553],[973,4003,4005,4008],{"style":4004},"top:-3.4461em;",[973,4006],{"className":4007,"style":2534},[1683],[973,4009,4011],{"className":4010},[1688,1689,1690,1691],[973,4012,4014,4029,4033],{"className":4013},[1444,1691],[973,4015,4017,4020,4024],{"className":4016},[1652,1691],[973,4018,994],{"className":4019},[1691],[973,4021,4023],{"className":4022},[1691],"o",[973,4025,4028],{"className":4026,"style":4027},[1691],"margin-right:0.0139em;","g",[973,4030],{"className":4031,"style":4032},[1456,1691],"margin-right:0.1952em;",[973,4034,1580],{"className":4035},[1444,1448,1691],[973,4037,1724],{"className":4038},[1723],[973,4040,4042],{"className":4041},[1671],[973,4043,4045],{"className":4044,"style":2579},[1675],[973,4046],{},[973,4048],{"className":4049},[1484,2514],[973,4051,4053,4056],{"style":4052},"top:-3.2386em;",[973,4054],{"className":4055,"style":3957},[1683],[973,4057,4060],{"className":4058,"style":4059},[2594],"min-width:1.02em;height:1.88em;",[2597,4061,4064],{"xmlns":2599,"width":2600,"height":4062,"viewBox":4063,"preserveAspectRatio":2603},"1.88em","0 0 400000 1944",[2605,4065],{"d":4066},"M983 90\nl0 -0\nc4,-6.7,10,-10,18,-10 H400000v40\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM1001 80h400000v40h-400000z",[973,4068,1724],{"className":4069},[1723],[973,4071,4073],{"className":4072},[1671],[973,4074,4077],{"className":4075,"style":4076},[1675],"height:0.5614em;",[973,4078],{},[16,4080,4081,4082,4110],{},"where the complexity no longer scales linearly with ",[973,4083,4085,4098],{"className":4084},[1369],[973,4086,4088],{"className":4087},[1373],[1375,4089,4090],{"xmlns":1377},[1379,4091,4092,4096],{},[1382,4093,4094],{},[1385,4095,1580],{},[1423,4097,1580],{"encoding":1425},[973,4099,4101],{"className":4100,"ariaHidden":1431},[1430],[973,4102,4104,4107],{"className":4103},[1435],[973,4105],{"className":4106,"style":2648},[1439],[973,4108,1580],{"className":4109},[1444,1448],", making it meaningful for overparameterized networks.",[30,4112,4114],{"id":4113},"course-academic-context","Course & Academic Context",[62,4116,4117,4123,4129,4135,4141],{},[65,4118,4119,4122],{},[25,4120,4121],{},"Course",": Learning Theory: Two-Layer Neural Networks (Exam)",[65,4124,4125,4128],{},[25,4126,4127],{},"Institution",": Université Paris-Dauphine -- PSL, Department of MIDO",[65,4130,4131,4134],{},[25,4132,4133],{},"Supervisor",": Katia Meziani",[65,4136,4137,4140],{},[25,4138,4139],{},"Program",": Master 2 ISF (Initial Track)",[65,4142,4143,4146],{},[25,4144,4145],{},"Academic Year",": 2025\u002F2026",[30,4148,4150],{"id":4149},"detailed-report","Detailed Report",[4152,4153],"iframe",{"src":4154,"width":4155,"height":4156},"\u002Fprojects\u002Flt-two-layer-neural-networks.pdf","100%","1000px",{"title":269,"searchDepth":270,"depth":270,"links":4158},[4159,4160,4161,4162,4163,4164,4165],{"id":1347,"depth":270,"text":1348},{"id":1532,"depth":270,"text":1533},{"id":2198,"depth":270,"text":2199},{"id":2709,"depth":270,"text":2710},{"id":3090,"depth":270,"text":3091},{"id":4113,"depth":270,"text":4114},{"id":4149,"depth":270,"text":4150},"2026-04-12",4,"Derivation of tight generalization bounds for two-layer ReLU networks using scale-invariance and symmetrization inequalities.","lt-two-layers-neural-networks","projects\u002Flt-two-layers-neural-networks",[4172,4173,4174,4175],"Neural Networks","Generalization Bounds","ReLU Activation","Rademacher Complexity","Research Project","X6UvozyXN16DAhoamf-82JXbmRyj4FXZmT0xK8q_2ds",{"id":4179,"title":4180,"description":4181,"extension":8,"favorite":853,"icon":4182,"meta":4183,"publishedAt":4363,"readingTime":270,"shortDescription":4364,"slug":4365,"status":1331,"stem":4366,"tags":4367,"type":847,"__hash__":4370},"projects\u002Fprojects\u002Fn8n-automations.md","n8n Automations","An academic project exploring the automation of GenAI workflows using n8n and Ollama for self-hosted AI applications, including personalized research agents and productivity hubs.","i-ph-plugs-connected-duotone",{"body":4184},{"type":13,"value":4185,"toc":4352},[4186,4188,4197,4201,4205,4219,4233,4237,4240,4282,4286,4289,4293,4321,4325,4345,4347],[30,4187,1348],{"id":1347},[16,4189,4190,4191,4196],{},"This project focuses on designing and implementing autonomous workflows that leverage Large Language Models (LLMs) to streamline productivity and academic research. By orchestrating Generative AI through a self-hosted infrastructure on my ",[25,4192,4193],{},[19,4194,27],{"href":4195},"\u002Fprojects\u002Fartlab",", I built a private ecosystem that acts as both a personal assistant and a specialized research agent.",[30,4198,4200],{"id":4199},"key-workflows","Key Workflows",[57,4202,4204],{"id":4203},"_1-centralized-productivity-hub","1. Centralized Productivity Hub",[16,4206,4207,4208,4211,4212,4215,4216,2195],{},"I developed a synchronization engine that bridges ",[25,4209,4210],{},"Notion",", ",[25,4213,4214],{},"Google Calendar",", and ",[25,4217,4218],{},"Todoist",[62,4220,4221,4227],{},[65,4222,4223,4226],{},[25,4224,4225],{},"Contextual Sync:"," Academic events, such as course schedules and exam dates, are pulled from Notion and reflected in my calendar and task manager.",[65,4228,4229,4232],{},[25,4230,4231],{},"Daily Briefing:"," Every morning, the system triggers a workflow that compiles my schedule, pending tasks, and a local weather report into a single, centralized email summary. This ensures a frictionless start to the day with all critical information in one place.",[57,4234,4236],{"id":4235},"_2-intelligent-research-engine-rss-rag","2. Intelligent Research Engine (RSS & RAG)",[16,4238,4239],{},"To stay at the forefront of AI research, I built an automated pipeline for academic and technical monitoring.",[62,4241,4242,4261,4270,4276],{},[65,4243,4244,4247,4248,4211,4251,4211,4254,4211,4257,4260],{},[25,4245,4246],{},"Multi-Source Fetching:"," The system monitors RSS feeds from ",[25,4249,4250],{},"arXiv",[25,4252,4253],{},"Hugging Face",[25,4255,4256],{},"Hacker News",[25,4258,4259],{},"selfho.st",", and major industry blogs (OpenAI, Google Research, Meta).",[65,4262,4263,4266,4267,2195],{},[25,4264,4265],{},"Semantic Filtering:"," Using LLMs, articles are filtered and ranked based on my specific research profile, with a focus on ",[25,4268,4269],{},"robust distributed learning",[65,4271,4272,4275],{},[25,4273,4274],{},"Knowledge Base:"," Relevant papers and posts are automatically stored in a structured Notion database.",[65,4277,4278,4281],{},[25,4279,4280],{},"Interactive Research Agent:"," I integrated a chat interface within n8n that allows me to query this collected data. I can request summaries, ask specific technical questions about a paper, or extract the most relevant insights for my current thesis work.",[30,4283,4285],{"id":4284},"technical-architecture","Technical Architecture",[16,4287,4288],{},"The environment is built to handle complex multi-step chains, moving beyond simple API calls to create context-aware agents.",[57,4290,4292],{"id":4291},"integrated-ecosystem","Integrated Ecosystem",[62,4294,4295,4309,4315],{},[65,4296,4297,4300,4301,4304,4305,4308],{},[25,4298,4299],{},"Intelligence Layer:"," Integration with ",[25,4302,4303],{},"Gemini"," (API) and ",[25,4306,4307],{},"Ollama"," (local) for summarization and semantic sorting.",[65,4310,4311,4314],{},[25,4312,4313],{},"Data Sources:"," RSS feeds and Notion databases.",[65,4316,4317,4320],{},[25,4318,4319],{},"Notifications & UI:"," Gmail for briefings and Discord for real-time system alerts.",[30,4322,4324],{"id":4323},"key-objectives","Key Objectives",[958,4326,4327,4333,4339],{},[65,4328,4329,4332],{},[25,4330,4331],{},"Privacy-Centric AI:"," Ensuring that sensitive academic data and personal schedules remain within a self-hosted or controlled environment.",[65,4334,4335,4338],{},[25,4336,4337],{},"Academic Efficiency:"," Reducing the \"noise\" of information overload by using AI to surface only the most relevant research papers.",[65,4340,4341,4344],{},[25,4342,4343],{},"Low-Code Orchestration:"," Utilizing n8n to manage complex logic and API interactions without the overhead of maintaining a massive custom codebase.",[263,4346],{},[16,4348,4349],{},[509,4350,4351],{},"This project is currently under active development as I refine the RAG (Retrieval-Augmented Generation) logic and optimize the filtering prompts for my research.",{"title":269,"searchDepth":270,"depth":270,"links":4353},[4354,4355,4359,4362],{"id":1347,"depth":270,"text":1348},{"id":4199,"depth":270,"text":4200,"children":4356},[4357,4358],{"id":4203,"depth":276,"text":4204},{"id":4235,"depth":276,"text":4236},{"id":4284,"depth":270,"text":4285,"children":4360},[4361],{"id":4291,"depth":276,"text":4292},{"id":4323,"depth":270,"text":4324},"2026-03-15","Automating GenAI workflows with n8n and Ollama in a self-hosted environment.","n8n-automations","projects\u002Fn8n-automations",[129,4303,290,4368,1335,4369],"Automation","Productivity","0jNlaD4_SOxnIVjrIU6HFylXXtwvcfxznrOtnJforgI",{"id":4372,"title":4373,"description":4374,"extension":8,"favorite":853,"icon":4375,"meta":4376,"publishedAt":1328,"readingTime":276,"shortDescription":6511,"slug":6512,"status":1331,"stem":6513,"tags":6514,"type":847,"__hash__":6519},"projects\u002Fprojects\u002Frl-tennis-atari-game.md","Reinforcement Learning for Tennis Strategy Optimization","An academic project exploring the application of reinforcement learning to optimize tennis strategies. The project involves training RL agents on Atari Tennis (ALE) to evaluate strategic decision-making through competitive self-play and baseline benchmarking.","i-ph-lightning-duotone",{"body":4377},{"type":13,"value":4378,"toc":6496},[4379,4386,4399,4401,4404,4408,5933,5935,6268,6272,6307,6311,6317,6321,6325,6366,6370,6373,6377,6435,6439,6447,6451,6487,6489],[16,4380,4381,4382,4385],{},"Comparison of Reinforcement Learning algorithms on Atari Tennis (",[549,4383,4384],{},"ALE\u002FTennis-v5"," via Gymnasium\u002FPettingZoo).",[62,4387,4388],{},[65,4389,4390,4393,4394],{},[25,4391,4392],{},"GitHub Repository:"," ",[19,4395,4398],{"href":4396,"rel":4397},"https:\u002F\u002Fgithub.com\u002FArthurDanjou\u002FTennis-Atari-Game",[23],"Tennis-Atari-Game",[30,4400,1348],{"id":1347},[16,4402,4403],{},"This project implements and compares five RL agents playing Atari Tennis against the built-in AI and in head-to-head tournaments.",[30,4405,4407],{"id":4406},"algorithms","Algorithms",[178,4409,4410,4426],{},[181,4411,4412],{},[184,4413,4414,4417,4420,4423],{},[187,4415,4416],{},"Agent",[187,4418,4419],{},"Type",[187,4421,4422],{},"Policy",[187,4424,4425],{},"Update Rule",[198,4427,4428,4444,4957,5546,5918],{},[184,4429,4430,4435,4438,4441],{},[203,4431,4432],{},[25,4433,4434],{},"Random",[203,4436,4437],{},"Baseline",[203,4439,4440],{},"Uniform random",[203,4442,4443],{},"None",[184,4445,4446,4451,4454,4457],{},[203,4447,4448],{},[25,4449,4450],{},"SARSA",[203,4452,4453],{},"TD(0), on-policy",[203,4455,4456],{},"ε-greedy",[203,4458,4459],{},[973,4460,4462,4566],{"className":4461},[1369],[973,4463,4465],{"className":4464},[1373],[1375,4466,4467],{"xmlns":1377},[1379,4468,4469,4563],{},[1382,4470,4471,4478,4481,4487,4489,4492,4494,4496,4499,4501,4504,4511,4513,4523,4525,4531,4533,4535,4541,4543,4545,4547,4549,4551,4553,4555,4557,4559,4561],{},[1582,4472,4473,4476],{},[1385,4474,4475],{},"W",[1385,4477,19],{},[1395,4479,4480],{},"←",[1582,4482,4483,4485],{},[1385,4484,4475],{},[1385,4486,19],{},[1395,4488,1410],{},[1385,4490,4491],{},"α",[1395,4493,1871],{},[1395,4495,1403],{"stretchy":1402},[1385,4497,4498],{},"r",[1395,4500,1410],{},[1385,4502,4503],{},"γ",[3260,4505,4506,4509],{"accent":1431},[1385,4507,4508],{},"q",[1395,4510,3266],{},[1395,4512,1403],{"stretchy":1402},[4514,4515,4516,4519],"msup",{},[1385,4517,4518],{},"s",[1395,4520,4522],{"mathvariant":1387,"lspace":4521,"rspace":4521},"0em","′",[1395,4524,3293],{"separator":1431},[4514,4526,4527,4529],{},[1385,4528,19],{},[1395,4530,4522],{"mathvariant":1387,"lspace":4521,"rspace":4521},[1395,4532,1107],{"stretchy":1402},[1395,4534,1417],{},[3260,4536,4537,4539],{"accent":1431},[1385,4538,4508],{},[1395,4540,3266],{},[1395,4542,1403],{"stretchy":1402},[1385,4544,4518],{},[1395,4546,3293],{"separator":1431},[1385,4548,19],{},[1395,4550,1107],{"stretchy":1402},[1395,4552,1107],{"stretchy":1402},[1395,4554,1871],{},[1385,4556,1399],{},[1395,4558,1403],{"stretchy":1402},[1385,4560,4518],{},[1395,4562,1107],{"stretchy":1402},[1423,4564,4565],{"encoding":1425},"W_a \\leftarrow W_a + \\alpha \\cdot (r + \\gamma \\hat{q}(s', a') - \\hat{q}(s, a)) \\cdot \\phi(s)",[973,4567,4569,4626,4681,4701,4723,4863,4939],{"className":4568,"ariaHidden":1431},[1430],[973,4570,4572,4575,4617,4620,4623],{"className":4571},[1435],[973,4573],{"className":4574,"style":2007},[1439],[973,4576,4578,4582],{"className":4577},[1444],[973,4579,4475],{"className":4580,"style":4581},[1444,1448],"margin-right:0.1389em;",[973,4583,4585],{"className":4584},[1662],[973,4586,4588,4609],{"className":4587},[1666,1667],[973,4589,4591,4606],{"className":4590},[1671],[973,4592,4594],{"className":4593,"style":2027},[1675],[973,4595,4597,4600],{"style":4596},"top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;",[973,4598],{"className":4599,"style":1684},[1683],[973,4601,4603],{"className":4602},[1688,1689,1690,1691],[973,4604,19],{"className":4605},[1444,1448,1691],[973,4607,1724],{"className":4608},[1723],[973,4610,4612],{"className":4611},[1671],[973,4613,4615],{"className":4614,"style":2049},[1675],[973,4616],{},[973,4618],{"className":4619,"style":1457},[1456],[973,4621,4480],{"className":4622},[1461],[973,4624],{"className":4625,"style":1457},[1456],[973,4627,4629,4632,4672,4675,4678],{"className":4628},[1435],[973,4630],{"className":4631,"style":2007},[1439],[973,4633,4635,4638],{"className":4634},[1444],[973,4636,4475],{"className":4637,"style":4581},[1444,1448],[973,4639,4641],{"className":4640},[1662],[973,4642,4644,4664],{"className":4643},[1666,1667],[973,4645,4647,4661],{"className":4646},[1671],[973,4648,4650],{"className":4649,"style":2027},[1675],[973,4651,4652,4655],{"style":4596},[973,4653],{"className":4654,"style":1684},[1683],[973,4656,4658],{"className":4657},[1688,1689,1690,1691],[973,4659,19],{"className":4660},[1444,1448,1691],[973,4662,1724],{"className":4663},[1723],[973,4665,4667],{"className":4666},[1671],[973,4668,4670],{"className":4669,"style":2049},[1675],[973,4671],{},[973,4673],{"className":4674,"style":1488},[1456],[973,4676,1410],{"className":4677},[1492],[973,4679],{"className":4680,"style":1488},[1456],[973,4682,4684,4688,4692,4695,4698],{"className":4683},[1435],[973,4685],{"className":4686,"style":4687},[1439],"height:0.4445em;",[973,4689,4491],{"className":4690,"style":4691},[1444,1448],"margin-right:0.0037em;",[973,4693],{"className":4694,"style":1488},[1456],[973,4696,1871],{"className":4697},[1492],[973,4699],{"className":4700,"style":1488},[1456],[973,4702,4704,4707,4710,4714,4717,4720],{"className":4703},[1435],[973,4705],{"className":4706,"style":1440},[1439],[973,4708,1403],{"className":4709},[1477],[973,4711,4498],{"className":4712,"style":4713},[1444,1448],"margin-right:0.0278em;",[973,4715],{"className":4716,"style":1488},[1456],[973,4718,1410],{"className":4719},[1492],[973,4721],{"className":4722,"style":1488},[1456],[973,4724,4726,4730,4734,4777,4780,4813,4816,4819,4851,4854,4857,4860],{"className":4725},[1435],[973,4727],{"className":4728,"style":4729},[1439],"height:1.0019em;vertical-align:-0.25em;",[973,4731,4503],{"className":4732,"style":4733},[1444,1448],"margin-right:0.0556em;",[973,4735,4737],{"className":4736},[1444,3348],[973,4738,4740,4768],{"className":4739},[1666,1667],[973,4741,4743,4765],{"className":4742},[1671],[973,4744,4746,4754],{"className":4745,"style":3358},[1675],[973,4747,4748,4751],{"style":3361},[973,4749],{"className":4750,"style":2534},[1683],[973,4752,4508],{"className":4753,"style":1784},[1444,1448],[973,4755,4756,4759],{"style":3361},[973,4757],{"className":4758,"style":2534},[1683],[973,4760,4762],{"className":4761,"style":3628},[3376],[973,4763,3266],{"className":4764},[1444],[973,4766,1724],{"className":4767},[1723],[973,4769,4771],{"className":4770},[1671],[973,4772,4775],{"className":4773,"style":4774},[1675],"height:0.1944em;",[973,4776],{},[973,4778,1403],{"className":4779},[1477],[973,4781,4783,4786],{"className":4782},[1444],[973,4784,4518],{"className":4785},[1444,1448],[973,4787,4789],{"className":4788},[1662],[973,4790,4792],{"className":4791},[1666],[973,4793,4795],{"className":4794},[1671],[973,4796,4799],{"className":4797,"style":4798},[1675],"height:0.7519em;",[973,4800,4801,4804],{"style":1822},[973,4802],{"className":4803,"style":1684},[1683],[973,4805,4807],{"className":4806},[1688,1689,1690,1691],[973,4808,4810],{"className":4809},[1444,1691],[973,4811,4522],{"className":4812},[1444,1691],[973,4814,3293],{"className":4815},[3589],[973,4817],{"className":4818,"style":1737},[1456],[973,4820,4822,4825],{"className":4821},[1444],[973,4823,19],{"className":4824},[1444,1448],[973,4826,4828],{"className":4827},[1662],[973,4829,4831],{"className":4830},[1666],[973,4832,4834],{"className":4833},[1671],[973,4835,4837],{"className":4836,"style":4798},[1675],[973,4838,4839,4842],{"style":1822},[973,4840],{"className":4841,"style":1684},[1683],[973,4843,4845],{"className":4844},[1688,1689,1690,1691],[973,4846,4848],{"className":4847},[1444,1691],[973,4849,4522],{"className":4850},[1444,1691],[973,4852,1107],{"className":4853},[1484],[973,4855],{"className":4856,"style":1488},[1456],[973,4858,1417],{"className":4859},[1492],[973,4861],{"className":4862,"style":1488},[1456],[973,4864,4866,4869,4911,4914,4917,4920,4923,4926,4930,4933,4936],{"className":4865},[1435],[973,4867],{"className":4868,"style":1440},[1439],[973,4870,4872],{"className":4871},[1444,3348],[973,4873,4875,4903],{"className":4874},[1666,1667],[973,4876,4878,4900],{"className":4877},[1671],[973,4879,4881,4889],{"className":4880,"style":3358},[1675],[973,4882,4883,4886],{"style":3361},[973,4884],{"className":4885,"style":2534},[1683],[973,4887,4508],{"className":4888,"style":1784},[1444,1448],[973,4890,4891,4894],{"style":3361},[973,4892],{"className":4893,"style":2534},[1683],[973,4895,4897],{"className":4896,"style":3628},[3376],[973,4898,3266],{"className":4899},[1444],[973,4901,1724],{"className":4902},[1723],[973,4904,4906],{"className":4905},[1671],[973,4907,4909],{"className":4908,"style":4774},[1675],[973,4910],{},[973,4912,1403],{"className":4913},[1477],[973,4915,4518],{"className":4916},[1444,1448],[973,4918,3293],{"className":4919},[3589],[973,4921],{"className":4922,"style":1737},[1456],[973,4924,19],{"className":4925},[1444,1448],[973,4927,4929],{"className":4928},[1484],"))",[973,4931],{"className":4932,"style":1488},[1456],[973,4934,1871],{"className":4935},[1492],[973,4937],{"className":4938,"style":1488},[1456],[973,4940,4942,4945,4948,4951,4954],{"className":4941},[1435],[973,4943],{"className":4944,"style":1440},[1439],[973,4946,1399],{"className":4947},[1444,1448],[973,4949,1403],{"className":4950},[1477],[973,4952,4518],{"className":4953},[1444,1448],[973,4955,1107],{"className":4956},[1484],[184,4958,4959,4964,4967,4969],{},[203,4960,4961],{},[25,4962,4963],{},"Q-Learning",[203,4965,4966],{},"TD(0), off-policy",[203,4968,4456],{},[203,4970,4971],{},[973,4972,4974,5083],{"className":4973},[1369],[973,4975,4977],{"className":4976},[1373],[1375,4978,4979],{"xmlns":1377},[1379,4980,4981,5080],{},[1382,4982,4983,4989,4991,4997,4999,5001,5003,5005,5007,5009,5011,5026,5032,5034,5040,5042,5048,5050,5052,5058,5060,5062,5064,5066,5068,5070,5072,5074,5076,5078],{},[1582,4984,4985,4987],{},[1385,4986,4475],{},[1385,4988,19],{},[1395,4990,4480],{},[1582,4992,4993,4995],{},[1385,4994,4475],{},[1385,4996,19],{},[1395,4998,1410],{},[1385,5000,4491],{},[1395,5002,1871],{},[1395,5004,1403],{"stretchy":1402},[1385,5006,4498],{},[1395,5008,1410],{},[1385,5010,4503],{},[1582,5012,5013,5020],{},[1382,5014,5015,5018],{},[1385,5016,5017],{},"max",[1395,5019,2740],{},[4514,5021,5022,5024],{},[1385,5023,19],{},[1395,5025,4522],{"mathvariant":1387,"lspace":4521,"rspace":4521},[3260,5027,5028,5030],{"accent":1431},[1385,5029,4508],{},[1395,5031,3266],{},[1395,5033,1403],{"stretchy":1402},[4514,5035,5036,5038],{},[1385,5037,4518],{},[1395,5039,4522],{"mathvariant":1387,"lspace":4521,"rspace":4521},[1395,5041,3293],{"separator":1431},[4514,5043,5044,5046],{},[1385,5045,19],{},[1395,5047,4522],{"mathvariant":1387,"lspace":4521,"rspace":4521},[1395,5049,1107],{"stretchy":1402},[1395,5051,1417],{},[3260,5053,5054,5056],{"accent":1431},[1385,5055,4508],{},[1395,5057,3266],{},[1395,5059,1403],{"stretchy":1402},[1385,5061,4518],{},[1395,5063,3293],{"separator":1431},[1385,5065,19],{},[1395,5067,1107],{"stretchy":1402},[1395,5069,1107],{"stretchy":1402},[1395,5071,1871],{},[1385,5073,1399],{},[1395,5075,1403],{"stretchy":1402},[1385,5077,4518],{},[1395,5079,1107],{"stretchy":1402},[1423,5081,5082],{"encoding":1425},"W_a \\leftarrow W_a + \\alpha \\cdot (r + \\gamma \\max_{a'} \\hat{q}(s', a') - \\hat{q}(s, a)) \\cdot \\phi(s)",[973,5084,5086,5141,5196,5214,5235,5453,5528],{"className":5085,"ariaHidden":1431},[1430],[973,5087,5089,5092,5132,5135,5138],{"className":5088},[1435],[973,5090],{"className":5091,"style":2007},[1439],[973,5093,5095,5098],{"className":5094},[1444],[973,5096,4475],{"className":5097,"style":4581},[1444,1448],[973,5099,5101],{"className":5100},[1662],[973,5102,5104,5124],{"className":5103},[1666,1667],[973,5105,5107,5121],{"className":5106},[1671],[973,5108,5110],{"className":5109,"style":2027},[1675],[973,5111,5112,5115],{"style":4596},[973,5113],{"className":5114,"style":1684},[1683],[973,5116,5118],{"className":5117},[1688,1689,1690,1691],[973,5119,19],{"className":5120},[1444,1448,1691],[973,5122,1724],{"className":5123},[1723],[973,5125,5127],{"className":5126},[1671],[973,5128,5130],{"className":5129,"style":2049},[1675],[973,5131],{},[973,5133],{"className":5134,"style":1457},[1456],[973,5136,4480],{"className":5137},[1461],[973,5139],{"className":5140,"style":1457},[1456],[973,5142,5144,5147,5187,5190,5193],{"className":5143},[1435],[973,5145],{"className":5146,"style":2007},[1439],[973,5148,5150,5153],{"className":5149},[1444],[973,5151,4475],{"className":5152,"style":4581},[1444,1448],[973,5154,5156],{"className":5155},[1662],[973,5157,5159,5179],{"className":5158},[1666,1667],[973,5160,5162,5176],{"className":5161},[1671],[973,5163,5165],{"className":5164,"style":2027},[1675],[973,5166,5167,5170],{"style":4596},[973,5168],{"className":5169,"style":1684},[1683],[973,5171,5173],{"className":5172},[1688,1689,1690,1691],[973,5174,19],{"className":5175},[1444,1448,1691],[973,5177,1724],{"className":5178},[1723],[973,5180,5182],{"className":5181},[1671],[973,5183,5185],{"className":5184,"style":2049},[1675],[973,5186],{},[973,5188],{"className":5189,"style":1488},[1456],[973,5191,1410],{"className":5192},[1492],[973,5194],{"className":5195,"style":1488},[1456],[973,5197,5199,5202,5205,5208,5211],{"className":5198},[1435],[973,5200],{"className":5201,"style":4687},[1439],[973,5203,4491],{"className":5204,"style":4691},[1444,1448],[973,5206],{"className":5207,"style":1488},[1456],[973,5209,1871],{"className":5210},[1492],[973,5212],{"className":5213,"style":1488},[1456],[973,5215,5217,5220,5223,5226,5229,5232],{"className":5216},[1435],[973,5218],{"className":5219,"style":1440},[1439],[973,5221,1403],{"className":5222},[1477],[973,5224,4498],{"className":5225,"style":4713},[1444,1448],[973,5227],{"className":5228,"style":1488},[1456],[973,5230,1410],{"className":5231},[1492],[973,5233],{"className":5234,"style":1488},[1456],[973,5236,5238,5241,5244,5247,5323,5326,5368,5371,5403,5406,5409,5441,5444,5447,5450],{"className":5237},[1435],[973,5239],{"className":5240,"style":4729},[1439],[973,5242,4503],{"className":5243,"style":4733},[1444,1448],[973,5245],{"className":5246,"style":1737},[1456],[973,5248,5250,5253],{"className":5249},[1652],[973,5251,5017],{"className":5252},[1652],[973,5254,5256],{"className":5255},[1662],[973,5257,5259,5315],{"className":5258},[1666,1667],[973,5260,5262,5312],{"className":5261},[1671],[973,5263,5266],{"className":5264,"style":5265},[1675],"height:0.328em;",[973,5267,5269,5272],{"style":5268},"top:-2.55em;margin-right:0.05em;",[973,5270],{"className":5271,"style":1684},[1683],[973,5273,5275],{"className":5274},[1688,1689,1690,1691],[973,5276,5278],{"className":5277},[1444,1691],[973,5279,5281,5284],{"className":5280},[1444,1691],[973,5282,19],{"className":5283},[1444,1448,1691],[973,5285,5287],{"className":5286},[1662],[973,5288,5290],{"className":5289},[1666],[973,5291,5293],{"className":5292},[1671],[973,5294,5297],{"className":5295,"style":5296},[1675],"height:0.6828em;",[973,5298,5300,5303],{"style":5299},"top:-2.786em;margin-right:0.0714em;",[973,5301],{"className":5302,"style":2335},[1683],[973,5304,5306],{"className":5305},[1688,2339,2340,1691],[973,5307,5309],{"className":5308},[1444,1691],[973,5310,4522],{"className":5311},[1444,1691],[973,5313,1724],{"className":5314},[1723],[973,5316,5318],{"className":5317},[1671],[973,5319,5321],{"className":5320,"style":2049},[1675],[973,5322],{},[973,5324],{"className":5325,"style":1737},[1456],[973,5327,5329],{"className":5328},[1444,3348],[973,5330,5332,5360],{"className":5331},[1666,1667],[973,5333,5335,5357],{"className":5334},[1671],[973,5336,5338,5346],{"className":5337,"style":3358},[1675],[973,5339,5340,5343],{"style":3361},[973,5341],{"className":5342,"style":2534},[1683],[973,5344,4508],{"className":5345,"style":1784},[1444,1448],[973,5347,5348,5351],{"style":3361},[973,5349],{"className":5350,"style":2534},[1683],[973,5352,5354],{"className":5353,"style":3628},[3376],[973,5355,3266],{"className":5356},[1444],[973,5358,1724],{"className":5359},[1723],[973,5361,5363],{"className":5362},[1671],[973,5364,5366],{"className":5365,"style":4774},[1675],[973,5367],{},[973,5369,1403],{"className":5370},[1477],[973,5372,5374,5377],{"className":5373},[1444],[973,5375,4518],{"className":5376},[1444,1448],[973,5378,5380],{"className":5379},[1662],[973,5381,5383],{"className":5382},[1666],[973,5384,5386],{"className":5385},[1671],[973,5387,5389],{"className":5388,"style":4798},[1675],[973,5390,5391,5394],{"style":1822},[973,5392],{"className":5393,"style":1684},[1683],[973,5395,5397],{"className":5396},[1688,1689,1690,1691],[973,5398,5400],{"className":5399},[1444,1691],[973,5401,4522],{"className":5402},[1444,1691],[973,5404,3293],{"className":5405},[3589],[973,5407],{"className":5408,"style":1737},[1456],[973,5410,5412,5415],{"className":5411},[1444],[973,5413,19],{"className":5414},[1444,1448],[973,5416,5418],{"className":5417},[1662],[973,5419,5421],{"className":5420},[1666],[973,5422,5424],{"className":5423},[1671],[973,5425,5427],{"className":5426,"style":4798},[1675],[973,5428,5429,5432],{"style":1822},[973,5430],{"className":5431,"style":1684},[1683],[973,5433,5435],{"className":5434},[1688,1689,1690,1691],[973,5436,5438],{"className":5437},[1444,1691],[973,5439,4522],{"className":5440},[1444,1691],[973,5442,1107],{"className":5443},[1484],[973,5445],{"className":5446,"style":1488},[1456],[973,5448,1417],{"className":5449},[1492],[973,5451],{"className":5452,"style":1488},[1456],[973,5454,5456,5459,5501,5504,5507,5510,5513,5516,5519,5522,5525],{"className":5455},[1435],[973,5457],{"className":5458,"style":1440},[1439],[973,5460,5462],{"className":5461},[1444,3348],[973,5463,5465,5493],{"className":5464},[1666,1667],[973,5466,5468,5490],{"className":5467},[1671],[973,5469,5471,5479],{"className":5470,"style":3358},[1675],[973,5472,5473,5476],{"style":3361},[973,5474],{"className":5475,"style":2534},[1683],[973,5477,4508],{"className":5478,"style":1784},[1444,1448],[973,5480,5481,5484],{"style":3361},[973,5482],{"className":5483,"style":2534},[1683],[973,5485,5487],{"className":5486,"style":3628},[3376],[973,5488,3266],{"className":5489},[1444],[973,5491,1724],{"className":5492},[1723],[973,5494,5496],{"className":5495},[1671],[973,5497,5499],{"className":5498,"style":4774},[1675],[973,5500],{},[973,5502,1403],{"className":5503},[1477],[973,5505,4518],{"className":5506},[1444,1448],[973,5508,3293],{"className":5509},[3589],[973,5511],{"className":5512,"style":1737},[1456],[973,5514,19],{"className":5515},[1444,1448],[973,5517,4929],{"className":5518},[1484],[973,5520],{"className":5521,"style":1488},[1456],[973,5523,1871],{"className":5524},[1492],[973,5526],{"className":5527,"style":1488},[1456],[973,5529,5531,5534,5537,5540,5543],{"className":5530},[1435],[973,5532],{"className":5533,"style":1440},[1439],[973,5535,1399],{"className":5536},[1444,1448],[973,5538,1403],{"className":5539},[1477],[973,5541,4518],{"className":5542},[1444,1448],[973,5544,1107],{"className":5545},[1484],[184,5547,5548,5553,5556,5558],{},[203,5549,5550],{},[25,5551,5552],{},"Monte Carlo",[203,5554,5555],{},"First-visit MC",[203,5557,4456],{},[203,5559,5560],{},[973,5561,5563,5635],{"className":5562},[1369],[973,5564,5566],{"className":5565},[1373],[1375,5567,5568],{"xmlns":1377},[1379,5569,5570,5632],{},[1382,5571,5572,5578,5580,5586,5588,5590,5592,5594,5602,5604,5610,5612,5614,5616,5618,5620,5622,5624,5626,5628,5630],{},[1582,5573,5574,5576],{},[1385,5575,4475],{},[1385,5577,19],{},[1395,5579,4480],{},[1582,5581,5582,5584],{},[1385,5583,4475],{},[1385,5585,19],{},[1395,5587,1410],{},[1385,5589,4491],{},[1395,5591,1871],{},[1395,5593,1403],{"stretchy":1402},[1582,5595,5596,5599],{},[1385,5597,5598],{},"G",[1385,5600,5601],{},"t",[1395,5603,1417],{},[3260,5605,5606,5608],{"accent":1431},[1385,5607,4508],{},[1395,5609,3266],{},[1395,5611,1403],{"stretchy":1402},[1385,5613,4518],{},[1395,5615,3293],{"separator":1431},[1385,5617,19],{},[1395,5619,1107],{"stretchy":1402},[1395,5621,1107],{"stretchy":1402},[1395,5623,1871],{},[1385,5625,1399],{},[1395,5627,1403],{"stretchy":1402},[1385,5629,4518],{},[1395,5631,1107],{"stretchy":1402},[1423,5633,5634],{"encoding":1425},"W_a \\leftarrow W_a + \\alpha \\cdot (G_t - \\hat{q}(s, a)) \\cdot \\phi(s)",[973,5636,5638,5693,5748,5766,5825,5900],{"className":5637,"ariaHidden":1431},[1430],[973,5639,5641,5644,5684,5687,5690],{"className":5640},[1435],[973,5642],{"className":5643,"style":2007},[1439],[973,5645,5647,5650],{"className":5646},[1444],[973,5648,4475],{"className":5649,"style":4581},[1444,1448],[973,5651,5653],{"className":5652},[1662],[973,5654,5656,5676],{"className":5655},[1666,1667],[973,5657,5659,5673],{"className":5658},[1671],[973,5660,5662],{"className":5661,"style":2027},[1675],[973,5663,5664,5667],{"style":4596},[973,5665],{"className":5666,"style":1684},[1683],[973,5668,5670],{"className":5669},[1688,1689,1690,1691],[973,5671,19],{"className":5672},[1444,1448,1691],[973,5674,1724],{"className":5675},[1723],[973,5677,5679],{"className":5678},[1671],[973,5680,5682],{"className":5681,"style":2049},[1675],[973,5683],{},[973,5685],{"className":5686,"style":1457},[1456],[973,5688,4480],{"className":5689},[1461],[973,5691],{"className":5692,"style":1457},[1456],[973,5694,5696,5699,5739,5742,5745],{"className":5695},[1435],[973,5697],{"className":5698,"style":2007},[1439],[973,5700,5702,5705],{"className":5701},[1444],[973,5703,4475],{"className":5704,"style":4581},[1444,1448],[973,5706,5708],{"className":5707},[1662],[973,5709,5711,5731],{"className":5710},[1666,1667],[973,5712,5714,5728],{"className":5713},[1671],[973,5715,5717],{"className":5716,"style":2027},[1675],[973,5718,5719,5722],{"style":4596},[973,5720],{"className":5721,"style":1684},[1683],[973,5723,5725],{"className":5724},[1688,1689,1690,1691],[973,5726,19],{"className":5727},[1444,1448,1691],[973,5729,1724],{"className":5730},[1723],[973,5732,5734],{"className":5733},[1671],[973,5735,5737],{"className":5736,"style":2049},[1675],[973,5738],{},[973,5740],{"className":5741,"style":1488},[1456],[973,5743,1410],{"className":5744},[1492],[973,5746],{"className":5747,"style":1488},[1456],[973,5749,5751,5754,5757,5760,5763],{"className":5750},[1435],[973,5752],{"className":5753,"style":4687},[1439],[973,5755,4491],{"className":5756,"style":4691},[1444,1448],[973,5758],{"className":5759,"style":1488},[1456],[973,5761,1871],{"className":5762},[1492],[973,5764],{"className":5765,"style":1488},[1456],[973,5767,5769,5772,5775,5816,5819,5822],{"className":5768},[1435],[973,5770],{"className":5771,"style":1440},[1439],[973,5773,1403],{"className":5774},[1477],[973,5776,5778,5781],{"className":5777},[1444],[973,5779,5598],{"className":5780},[1444,1448],[973,5782,5784],{"className":5783},[1662],[973,5785,5787,5808],{"className":5786},[1666,1667],[973,5788,5790,5805],{"className":5789},[1671],[973,5791,5794],{"className":5792,"style":5793},[1675],"height:0.2806em;",[973,5795,5796,5799],{"style":1759},[973,5797],{"className":5798,"style":1684},[1683],[973,5800,5802],{"className":5801},[1688,1689,1690,1691],[973,5803,5601],{"className":5804},[1444,1448,1691],[973,5806,1724],{"className":5807},[1723],[973,5809,5811],{"className":5810},[1671],[973,5812,5814],{"className":5813,"style":2049},[1675],[973,5815],{},[973,5817],{"className":5818,"style":1488},[1456],[973,5820,1417],{"className":5821},[1492],[973,5823],{"className":5824,"style":1488},[1456],[973,5826,5828,5831,5873,5876,5879,5882,5885,5888,5891,5894,5897],{"className":5827},[1435],[973,5829],{"className":5830,"style":1440},[1439],[973,5832,5834],{"className":5833},[1444,3348],[973,5835,5837,5865],{"className":5836},[1666,1667],[973,5838,5840,5862],{"className":5839},[1671],[973,5841,5843,5851],{"className":5842,"style":3358},[1675],[973,5844,5845,5848],{"style":3361},[973,5846],{"className":5847,"style":2534},[1683],[973,5849,4508],{"className":5850,"style":1784},[1444,1448],[973,5852,5853,5856],{"style":3361},[973,5854],{"className":5855,"style":2534},[1683],[973,5857,5859],{"className":5858,"style":3628},[3376],[973,5860,3266],{"className":5861},[1444],[973,5863,1724],{"className":5864},[1723],[973,5866,5868],{"className":5867},[1671],[973,5869,5871],{"className":5870,"style":4774},[1675],[973,5872],{},[973,5874,1403],{"className":5875},[1477],[973,5877,4518],{"className":5878},[1444,1448],[973,5880,3293],{"className":5881},[3589],[973,5883],{"className":5884,"style":1737},[1456],[973,5886,19],{"className":5887},[1444,1448],[973,5889,4929],{"className":5890},[1484],[973,5892],{"className":5893,"style":1488},[1456],[973,5895,1871],{"className":5896},[1492],[973,5898],{"className":5899,"style":1488},[1456],[973,5901,5903,5906,5909,5912,5915],{"className":5902},[1435],[973,5904],{"className":5905,"style":1440},[1439],[973,5907,1399],{"className":5908},[1444,1448],[973,5910,1403],{"className":5911},[1477],[973,5913,4518],{"className":5914},[1444,1448],[973,5916,1107],{"className":5917},[1484],[184,5919,5920,5925,5928,5930],{},[203,5921,5922],{},[25,5923,5924],{},"DQN",[203,5926,5927],{},"Deep Q-Network",[203,5929,4456],{},[203,5931,5932],{},"MLP (256→256) with experience replay & target network",[30,5934,931],{"id":930},[62,5936,5937,6263],{},[65,5938,5939,5942,5943,6159,6160,6262],{},[25,5940,5941],{},"Linear agents"," (SARSA, Q-Learning, Monte Carlo): ",[973,5944,5946,5998],{"className":5945},[1369],[973,5947,5949],{"className":5948},[1373],[1375,5950,5951],{"xmlns":1377},[1379,5952,5953,5995],{},[1382,5954,5955,5961,5963,5965,5967,5969,5972,5975,5977,5979,5987,5989,5991,5993],{},[3260,5956,5957,5959],{"accent":1431},[1385,5958,4508],{},[1395,5960,3266],{},[1395,5962,1403],{"stretchy":1402},[1385,5964,4518],{},[1395,5966,3293],{"separator":1431},[1385,5968,19],{},[1395,5970,5971],{"separator":1431},";",[1385,5973,4475],{"mathvariant":5974},"bold",[1395,5976,1107],{"stretchy":1402},[1395,5978,1049],{},[1562,5980,5981,5983,5985],{},[1385,5982,4475],{"mathvariant":5974},[1385,5984,19],{},[1385,5986,1603],{"mathvariant":1387},[1385,5988,1399],{},[1395,5990,1403],{"stretchy":1402},[1385,5992,4518],{},[1395,5994,1107],{"stretchy":1402},[1423,5996,5997],{"encoding":1425},"\\hat{q}(s, a; \\mathbf{W}) = \\mathbf{W}_a^\\top \\phi(s)",[973,5999,6001,6087],{"className":6000,"ariaHidden":1431},[1430],[973,6002,6004,6007,6049,6052,6055,6058,6061,6064,6067,6070,6075,6078,6081,6084],{"className":6003},[1435],[973,6005],{"className":6006,"style":1440},[1439],[973,6008,6010],{"className":6009},[1444,3348],[973,6011,6013,6041],{"className":6012},[1666,1667],[973,6014,6016,6038],{"className":6015},[1671],[973,6017,6019,6027],{"className":6018,"style":3358},[1675],[973,6020,6021,6024],{"style":3361},[973,6022],{"className":6023,"style":2534},[1683],[973,6025,4508],{"className":6026,"style":1784},[1444,1448],[973,6028,6029,6032],{"style":3361},[973,6030],{"className":6031,"style":2534},[1683],[973,6033,6035],{"className":6034,"style":3628},[3376],[973,6036,3266],{"className":6037},[1444],[973,6039,1724],{"className":6040},[1723],[973,6042,6044],{"className":6043},[1671],[973,6045,6047],{"className":6046,"style":4774},[1675],[973,6048],{},[973,6050,1403],{"className":6051},[1477],[973,6053,4518],{"className":6054},[1444,1448],[973,6056,3293],{"className":6057},[3589],[973,6059],{"className":6060,"style":1737},[1456],[973,6062,19],{"className":6063},[1444,1448],[973,6065,5971],{"className":6066},[3589],[973,6068],{"className":6069,"style":1737},[1456],[973,6071,4475],{"className":6072,"style":6074},[1444,6073],"mathbf","margin-right:0.016em;",[973,6076,1107],{"className":6077},[1484],[973,6079],{"className":6080,"style":1457},[1456],[973,6082,1049],{"className":6083},[1461],[973,6085],{"className":6086,"style":1457},[1456],[973,6088,6090,6094,6147,6150,6153,6156],{"className":6089},[1435],[973,6091],{"className":6092,"style":6093},[1439],"height:1.0991em;vertical-align:-0.25em;",[973,6095,6097,6100],{"className":6096},[1444],[973,6098,4475],{"className":6099,"style":6074},[1444,6073],[973,6101,6103],{"className":6102},[1662],[973,6104,6106,6138],{"className":6105},[1666,1667],[973,6107,6109,6135],{"className":6108},[1671],[973,6110,6112,6124],{"className":6111,"style":1807},[1675],[973,6113,6115,6118],{"style":6114},"top:-2.453em;margin-left:-0.016em;margin-right:0.05em;",[973,6116],{"className":6117,"style":1684},[1683],[973,6119,6121],{"className":6120},[1688,1689,1690,1691],[973,6122,19],{"className":6123},[1444,1448,1691],[973,6125,6126,6129],{"style":1822},[973,6127],{"className":6128,"style":1684},[1683],[973,6130,6132],{"className":6131},[1688,1689,1690,1691],[973,6133,1603],{"className":6134},[1444,1691],[973,6136,1724],{"className":6137},[1723],[973,6139,6141],{"className":6140},[1671],[973,6142,6145],{"className":6143,"style":6144},[1675],"height:0.247em;",[973,6146],{},[973,6148,1399],{"className":6149},[1444,1448],[973,6151,1403],{"className":6152},[1477],[973,6154,4518],{"className":6155},[1444,1448],[973,6157,1107],{"className":6158},[1484]," with ",[973,6161,6163,6193],{"className":6162},[1369],[973,6164,6166],{"className":6165},[1373],[1375,6167,6168],{"xmlns":1377},[1379,6169,6170,6190],{},[1382,6171,6172,6174,6176,6178,6180,6183],{},[1385,6173,1399],{},[1395,6175,1403],{"stretchy":1402},[1385,6177,4518],{},[1395,6179,1107],{"stretchy":1402},[1395,6181,6182],{},"∈",[4514,6184,6185,6187],{},[1385,6186,515],{"mathvariant":2728},[1575,6188,6189],{},"128",[1423,6191,6192],{"encoding":1425},"\\phi(s) \\in \\mathbb{R}^{128}",[973,6194,6196,6223],{"className":6195,"ariaHidden":1431},[1430],[973,6197,6199,6202,6205,6208,6211,6214,6217,6220],{"className":6198},[1435],[973,6200],{"className":6201,"style":1440},[1439],[973,6203,1399],{"className":6204},[1444,1448],[973,6206,1403],{"className":6207},[1477],[973,6209,4518],{"className":6210},[1444,1448],[973,6212,1107],{"className":6213},[1484],[973,6215],{"className":6216,"style":1457},[1456],[973,6218,6182],{"className":6219},[1461],[973,6221],{"className":6222,"style":1457},[1456],[973,6224,6226,6230],{"className":6225},[1435],[973,6227],{"className":6228,"style":6229},[1439],"height:0.8141em;",[973,6231,6233,6236],{"className":6232},[1444],[973,6234,515],{"className":6235},[1444,2792],[973,6237,6239],{"className":6238},[1662],[973,6240,6242],{"className":6241},[1666],[973,6243,6245],{"className":6244},[1671],[973,6246,6248],{"className":6247,"style":6229},[1675],[973,6249,6250,6253],{"style":1822},[973,6251],{"className":6252,"style":1684},[1683],[973,6254,6256],{"className":6255},[1688,1689,1690,1691],[973,6257,6259],{"className":6258},[1444,1691],[973,6260,6189],{"className":6261},[1444,1691]," (RAM observation)",[65,6264,6265,6267],{},[25,6266,5924],{},": MLP network (128 → 128 → 64 → 18) trained with Adam optimizer, Huber loss, and periodic target network sync",[30,6269,6271],{"id":6270},"environment","Environment",[62,6273,6274,6283,6289,6295],{},[65,6275,6276,6279,6280,1107],{},[25,6277,6278],{},"Game",": Atari Tennis via PettingZoo (",[549,6281,6282],{},"tennis_v3",[65,6284,6285,6288],{},[25,6286,6287],{},"Observation",": RAM state (128 features)",[65,6290,6291,6294],{},[25,6292,6293],{},"Action Space",": 18 discrete actions",[65,6296,6297,6300,6301,512,6304,1107],{},[25,6298,6299],{},"Agents",": 2 players (",[549,6302,6303],{},"first_0",[549,6305,6306],{},"second_0",[30,6308,6310],{"id":6309},"project-structure","Project Structure",[933,6312,6315],{"className":6313,"code":6314,"language":938},[936],".\n├── Project_RL_DANJOU_VON-SIEMENS.ipynb    # Main notebook\n├── README.md                              # This file\n├── checkpoints\u002F                           # Saved agent weights\n│   ├── sarsa.pkl\n│   ├── q_learning.pkl\n│   ├── montecarlo.pkl\n│   └── dqn.pkl\n└── plots\u002F                                 # Training & evaluation plots\n    ├── SARSA_training_curves.png\n    ├── Q-Learning_training_curves.png\n    ├── MonteCarlo_training_curves.png\n    ├── DQN_training_curves.png\n    ├── evaluation_results.png\n    └── championship_matrix.png\n",[549,6316,6314],{"__ignoreMap":269},[30,6318,6320],{"id":6319},"key-results","Key Results",[57,6322,6324],{"id":6323},"win-rate-vs-random-baseline","Win Rate vs Random Baseline",[178,6326,6327,6336],{},[181,6328,6329],{},[184,6330,6331,6333],{},[187,6332,4416],{},[187,6334,6335],{},"Win Rate",[198,6337,6338,6345,6352,6359],{},[184,6339,6340,6342],{},[203,6341,4450],{},[203,6343,6344],{},"88.9%",[184,6346,6347,6349],{},[203,6348,4963],{},[203,6350,6351],{},"41.2%",[184,6353,6354,6356],{},[203,6355,5552],{},[203,6357,6358],{},"47.1%",[184,6360,6361,6363],{},[203,6362,5924],{},[203,6364,6365],{},"6.2%",[57,6367,6369],{"id":6368},"championship-tournament","Championship Tournament",[16,6371,6372],{},"Full round-robin tournament where each agent faces every other agent in both positions (first_0\u002Fsecond_0).",[30,6374,6376],{"id":6375},"notebook-sections","Notebook Sections",[958,6378,6379,6385,6391,6412,6423,6429],{},[65,6380,6381,6384],{},[25,6382,6383],{},"Configuration & Checkpoints"," — Incremental training workflow with pickle serialization",[65,6386,6387,6390],{},[25,6388,6389],{},"Utility Functions"," — Observation normalization, ε-greedy policy",[65,6392,6393,6396,6397,4211,6400,4211,6403,4211,6406,4211,6409],{},[25,6394,6395],{},"Agent Definitions"," — ",[549,6398,6399],{},"RandomAgent",[549,6401,6402],{},"SarsaAgent",[549,6404,6405],{},"QLearningAgent",[549,6407,6408],{},"MonteCarloAgent",[549,6410,6411],{},"DQNAgent",[65,6413,6414,6396,6417,4211,6420],{},[25,6415,6416],{},"Training Infrastructure",[549,6418,6419],{},"train_agent()",[549,6421,6422],{},"plot_training_curves()",[65,6424,6425,6428],{},[25,6426,6427],{},"Evaluation"," — Match system, random baseline, round-robin tournament",[65,6430,6431,6434],{},[25,6432,6433],{},"Results & Visualization"," — Win rate plots, matchup matrix heatmap",[30,6436,6438],{"id":6437},"known-issues","Known Issues",[62,6440,6441],{},[65,6442,6443,6446],{},[25,6444,6445],{},"Monte Carlo & DQN",": Checkpoint loading issues — saved weights may not restore properly during evaluation (training works correctly)",[30,6448,6450],{"id":6449},"dependencies","Dependencies",[62,6452,6453,6456,6464,6469,6477,6482],{},[65,6454,6455],{},"Python 3.13+",[65,6457,6458,4211,6461],{},[549,6459,6460],{},"numpy",[549,6462,6463],{},"matplotlib",[65,6465,6466],{},[549,6467,6468],{},"torch",[65,6470,6471,4211,6474],{},[549,6472,6473],{},"gymnasium",[549,6475,6476],{},"ale-py",[65,6478,6479],{},[549,6480,6481],{},"pettingzoo",[65,6483,6484],{},[549,6485,6486],{},"tqdm",[30,6488,1285],{"id":1284},[62,6490,6491,6493],{},[65,6492,1292],{},[65,6494,6495],{},"Moritz VON SIEMENS",{"title":269,"searchDepth":270,"depth":270,"links":6497},[6498,6499,6500,6501,6502,6503,6507,6508,6509,6510],{"id":1347,"depth":270,"text":1348},{"id":4406,"depth":270,"text":4407},{"id":930,"depth":270,"text":931},{"id":6270,"depth":270,"text":6271},{"id":6309,"depth":270,"text":6310},{"id":6319,"depth":270,"text":6320,"children":6504},[6505,6506],{"id":6323,"depth":276,"text":6324},{"id":6368,"depth":276,"text":6369},{"id":6375,"depth":270,"text":6376},{"id":6437,"depth":270,"text":6438},{"id":6449,"depth":270,"text":6450},{"id":1284,"depth":270,"text":1285},"Reinforcement learning algorithms applied to Atari tennis matches for strategy optimization and competitive benchmarking.","rl-tennis-atari-game","projects\u002Frl-tennis-atari-game",[6515,511,6516,6517,6518],"Reinforcement Learning","Gymnasium","Atari","ALE","o5Rl9-DKcMMzGIKkxNRe-u1lt0A9jIbCHSNzq29vu9Q",{"id":6521,"title":6522,"description":6523,"extension":8,"favorite":853,"icon":6524,"meta":6525,"publishedAt":9478,"readingTime":8082,"shortDescription":9479,"slug":9480,"status":1331,"stem":9481,"tags":9482,"type":9484,"__hash__":9485},"projects\u002Fprojects\u002Fhackathon-natixis.md","Natixis Hackathon: Generative SQL Analytics","An intensive 4-week challenge to build an AI-powered data assistant. Our team developed a GenAI agent that transforms natural language into executable SQL queries, interactive visualizations, and natural language insights.","i-ph-database-duotone",{"body":6526},{"type":13,"value":6527,"toc":9419},[6528,6534,6538,6549,6556,6560,6564,6567,6591,6595,6604,6618,6622,6625,6639,6643,6646,6650,6688,6692,6727,6731,6733,6776,6780,6802,6812,6823,6827,6830,6846,6853,6873,6876,6879,6893,6910,6914,6924,6935,6939,6972,6978,6980,6986,6990,6993,6997,7089,7093,7140,7144,7150,7154,7160,7164,7171,7180,7183,7188,7202,7207,7234,7240,7248,7255,7262,7265,7269,7357,7362,7546,7553,7558,7646,7653,7660,7663,7667,7675,7680,7806,7813,7817,7820,7824,7830,8199,8203,8209,8231,8235,8241,8361,8365,8370,8445,8449,8454,8832,8836,8841,8973,8977,8983,8987,9030,9034,9066,9070,9074,9138,9142,9171,9175,9213,9217,9221,9252,9256,9284,9287,9291,9295,9369,9373,9376,9409,9411,9416],[6529,6530,6531],"note",{},[16,6532,6533],{},"Our team and I won the hackathon, taking first place among 13 teams.",[30,6535,6537],{"id":6536},"the-challenge","The Challenge",[16,6539,6540,6541,6544,6545,6548],{},"Organized by ",[25,6542,6543],{},"Natixis",", this hackathon followed a high-intensity format: ",[25,6546,6547],{},"three consecutive Saturdays"," of on-site development, bridged by two full weeks of remote collaboration.",[16,6550,6551,6552,6555],{},"Working in a ",[25,6553,6554],{},"team of four",", our goal was to bridge the gap between non-technical stakeholders and complex financial databases by creating an autonomous \"Data Talk\" agent.",[30,6557,6559],{"id":6558},"how-we-built-it","How We Built It",[57,6561,6563],{"id":6562},"data-engineering-schema-design","Data Engineering & Schema Design",[16,6565,6566],{},"Before building the AI layer, we handled a significant data migration task. I led the effort to:",[62,6568,6569,6585],{},[65,6570,6571,6574,6575,512,6578,6581,6582,2195],{},[25,6572,6573],{},"ETL Pipeline:"," Convert fragmented datasets from ",[25,6576,6577],{},".xlsx",[25,6579,6580],{},".csv"," formats into a structured ",[25,6583,6584],{},"SQL database",[65,6586,6587,6590],{},[25,6588,6589],{},"Schema Optimization:"," Design robust SQL schemas that allow an LLM to understand relationships (foreign keys, indexing) for accurate query generation.",[57,6592,6594],{"id":6593},"natural-language-to-sql-nl-to-sql","Natural Language to SQL (NL-to-SQL)",[16,6596,6597,6598,512,6601,6603],{},"Using the ",[25,6599,6600],{},"Vercel AI SDK",[25,6602,4307],{},", we implemented an agentic workflow:",[62,6605,6606,6612],{},[65,6607,6608,6611],{},[25,6609,6610],{},"Prompt Engineering:"," Fine-tuning the agent to translate complex business questions (e.g., \"What was our highest growth margin last quarter?\") into valid, optimized SQL.",[65,6613,6614,6617],{},[25,6615,6616],{},"Self-Correction:"," If a query fails, the agent analyzes the SQL error and self-corrects the syntax before returning a result.",[57,6619,6621],{"id":6620},"automated-insights-visualization","Automated Insights & Visualization",[16,6623,6624],{},"Data is only useful if it's readable. Our Nuxt application goes beyond raw tables:",[62,6626,6627,6633],{},[65,6628,6629,6632],{},[25,6630,6631],{},"Dynamic Charts:"," The agent automatically determines the best visualization type (Bar, Line, Pie) based on the query result and renders it using interactive components.",[65,6634,6635,6638],{},[25,6636,6637],{},"Narrative Explanations:"," A final LLM pass summarizes the data findings in plain English, highlighting anomalies or key trends.",[30,6640,6642],{"id":6641},"impact-results","Impact & Results",[16,6644,6645],{},"This project demonstrated that a modern stack (Nuxt + local LLMs) can drastically reduce the time needed for data discovery. By the final Saturday, our team presented a working prototype capable of handling multi-table joins and generating real-time financial dashboards from simple chat prompts.",[30,6647,6649],{"id":6648},"features","Features",[62,6651,6652,6658,6664,6670,6676,6682],{},[65,6653,6654,6657],{},[25,6655,6656],{},"Natural Language Queries",": Ask questions about anomalies in plain French or English",[65,6659,6660,6663],{},[25,6661,6662],{},"SQL Execution",": Automatic SQL query generation and execution against MySQL database",[65,6665,6666,6669],{},[25,6667,6668],{},"Visualizations",": Automatic chart generation (Line, Bar, Area, Donut, Bubble, Gantt)",[65,6671,6672,6675],{},[25,6673,6674],{},"KPI Cards",": Dynamic KPI generation with trends and icons",[65,6677,6678,6681],{},[25,6679,6680],{},"AI-Powered",": Uses Ollama models with tool calling capabilities",[65,6683,6684,6687],{},[25,6685,6686],{},"Dark Mode",": Full light\u002Fdark theme support",[30,6689,6691],{"id":6690},"technical-stack","Technical Stack",[62,6693,6694,6702,6710,6718],{},[65,6695,6696,4393,6699,6701],{},[25,6697,6698],{},"Frontend\u002FAPI:",[25,6700,344],{}," for a seamless, reactive user interface.",[65,6703,6704,4393,6707,6709],{},[25,6705,6706],{},"Orchestration:",[25,6708,6600],{}," to manage streams and tool-calling logic.",[65,6711,6712,4393,6715,6717],{},[25,6713,6714],{},"Inference:",[25,6716,4307],{}," for running LLMs locally, ensuring data privacy during development.",[65,6719,6720,4393,6723,6726],{},[25,6721,6722],{},"Storage:",[25,6724,6725],{},"PostgreSQL"," for the converted data warehouse.",[30,6728,6730],{"id":6729},"quick-start","Quick Start",[57,6732,944],{"id":943},[62,6734,6735,6741,6753,6762],{},[65,6736,6737,6740],{},[25,6738,6739],{},"Docker & Docker Compose"," (for MySQL database)",[65,6742,6743,6745,6746,6748,6749,6752],{},[25,6744,6455],{}," (project managed with ",[549,6747,1021],{},"; ",[549,6750,6751],{},"pip"," works too)",[65,6754,6755,6758,6759],{},[25,6756,6757],{},"Bun"," (package manager): ",[549,6760,6761],{},"npm install -g bun",[65,6763,6764,6766,6767,4211,6770,4211,6773,1107],{},[25,6765,4307],{}," running locally with a compatible model (e.g., ",[549,6768,6769],{},"llama3.2",[549,6771,6772],{},"qwen2.5",[549,6774,6775],{},"mistral",[57,6777,6779],{"id":6778},"_1-start-mysql-database","1. Start MySQL Database",[933,6781,6783],{"className":967,"code":6782,"language":969,"meta":269,"style":269},"docker compose up -d mysql\n",[549,6784,6785],{"__ignoreMap":269},[973,6786,6787,6790,6793,6796,6799],{"class":975,"line":839},[973,6788,6789],{"class":978},"docker",[973,6791,6792],{"class":982}," compose",[973,6794,6795],{"class":982}," up",[973,6797,6798],{"class":982}," -d",[973,6800,6801],{"class":982}," mysql\n",[16,6803,875,6804,6807,6808,6811],{},[549,6805,6806],{},"natixis"," database is created automatically from ",[549,6809,6810],{},"init.sql",":",[62,6813,6814,6820],{},[65,6815,6816,6817],{},"Default: ",[549,6818,6819],{},"mysql:\u002F\u002Froot:@localhost:3306\u002Fnatixis",[65,6821,6822],{},"Root password is empty for local development only",[57,6824,6826],{"id":6825},"_2-load-data-into-database","2. Load Data into Database",[16,6828,6829],{},"Install Python dependencies:",[933,6831,6833],{"className":967,"code":6832,"language":969,"meta":269,"style":269},"uv sync          # or: pip install -e .\n",[549,6834,6835],{"__ignoreMap":269},[973,6836,6837,6839,6842],{"class":975,"line":839},[973,6838,1021],{"class":978},[973,6840,6841],{"class":982}," sync",[973,6843,6845],{"class":6844},"sv490","          # or: pip install -e .\n",[16,6847,6848,6849,6852],{},"Place source files in ",[549,6850,6851],{},".\u002Fdata\u002F"," directory:",[62,6854,6855,6861,6867],{},[65,6856,6857,6860],{},[549,6858,6859],{},"Configuration.xlsx"," - Control and typology configuration",[65,6862,6863,6866],{},[549,6864,6865],{},"anomaly_dump_result.csv"," - Anomaly data",[65,6868,6869,6872],{},[549,6870,6871],{},"GenericAnomaly_dump_result_chunk_*.xlsx"," - Generic anomaly chunks",[16,6874,6875],{},"These datasets are not tracked in the repository - use the files shared with the project.",[16,6877,6878],{},"Then run the Jupyter notebook:",[933,6880,6882],{"className":967,"code":6881,"language":969,"meta":269,"style":269},"jupyter notebook data_exploration.ipynb\n",[549,6883,6884],{"__ignoreMap":269},[973,6885,6886,6888,6890],{"class":975,"line":839},[973,6887,1077],{"class":978},[973,6889,1080],{"class":982},[973,6891,6892],{"class":982}," data_exploration.ipynb\n",[16,6894,6895,6896,512,6899,6902,6903,4211,6906,6909],{},"Execute the ",[549,6897,6898],{},"insert_into_sql",[549,6900,6901],{},"reset_and_load"," cells to populate ",[549,6904,6905],{},"generic_anomalies",[549,6907,6908],{},"anomalies",", and configuration tables.",[57,6911,6913],{"id":6912},"_3-configure-environment","3. Configure Environment",[16,6915,6916,6917,6920,6921,6811],{},"Create ",[549,6918,6919],{},".env"," file in ",[549,6922,6923],{},"\u002Fchat",[933,6925,6929],{"className":6926,"code":6927,"language":6928,"meta":269,"style":269},"language-env shiki shiki-themes material-theme-lighter catppuccin-latte catppuccin-macchiato","DATABASE_URL=\"mysql:\u002F\u002Froot:@localhost:3306\u002Fnatixis\"\n","env",[549,6930,6931],{"__ignoreMap":269},[973,6932,6933],{"class":975,"line":839},[973,6934,6927],{},[57,6936,6938],{"id":6937},"_4-run-the-chat-application","4. Run the Chat Application",[933,6940,6942],{"className":967,"code":6941,"language":969,"meta":269,"style":269},"cd chat\nbun install\nbun run dev --host\n",[549,6943,6944,6951,6959],{"__ignoreMap":269},[973,6945,6946,6948],{"class":975,"line":839},[973,6947,1003],{"class":1002},[973,6949,6950],{"class":982}," chat\n",[973,6952,6953,6956],{"class":975,"line":270},[973,6954,6955],{"class":978},"bun",[973,6957,6958],{"class":982}," install\n",[973,6960,6961,6963,6966,6969],{"class":975,"line":276},[973,6962,6955],{"class":978},[973,6964,6965],{"class":982}," run",[973,6967,6968],{"class":982}," dev",[973,6970,6971],{"class":982}," --host\n",[16,6973,6974,6975],{},"The app will be available at ",[549,6976,6977],{},"http:\u002F\u002Flocalhost:3000",[30,6979,6310],{"id":6309},[933,6981,6984],{"className":6982,"code":6983,"language":938},[936],".\n├── data_exploration.ipynb    # Jupyter notebook for data loading\n├── init.sql                  # MySQL initialization script\n├── docker-compose.yml        # Docker services configuration\n├── data\u002F                     # Source data files (not tracked)\n│   ├── Configuration.xlsx\n│   ├── anomaly_dump_result.csv\n│   └── GenericAnomaly_dump_result_chunk_*.xlsx\n└── chat\u002F                     # Nuxt application\n    ├── app\u002F                  # Vue components and pages\n    ├── server\u002F               # API endpoints\n    ├── shared\u002F               # Shared utilities and tools\n    └── nuxt.config.ts        # Nuxt configuration\n",[549,6985,6983],{"__ignoreMap":269},[30,6987,6989],{"id":6988},"database-schema","Database Schema",[16,6991,6992],{},"The database contains the following main tables:",[57,6994,6996],{"id":6995},"core-tables","Core Tables",[178,6998,6999,7009],{},[181,7000,7001],{},[184,7002,7003,7006],{},[187,7004,7005],{},"Table",[187,7007,7008],{},"Description",[198,7010,7011,7020,7029,7039,7049,7059,7069,7079],{},[184,7012,7013,7017],{},[203,7014,7015],{},[549,7016,6908],{},[203,7018,7019],{},"Standard anomaly records",[184,7021,7022,7026],{},[203,7023,7024],{},[549,7025,6905],{},[203,7027,7028],{},"Generic anomaly records (default for analysis)",[184,7030,7031,7036],{},[203,7032,7033],{},[549,7034,7035],{},"typologies",[203,7037,7038],{},"Anomaly classification typologies",[184,7040,7041,7046],{},[203,7042,7043],{},[549,7044,7045],{},"functional_controls",[203,7047,7048],{},"Control definitions and ownership",[184,7050,7051,7056],{},[203,7052,7053],{},[549,7054,7055],{},"business_objects",[203,7057,7058],{},"Business object definitions",[184,7060,7061,7066],{},[203,7062,7063],{},[549,7064,7065],{},"business_object_fields",[203,7067,7068],{},"Field definitions for business objects",[184,7070,7071,7076],{},[203,7072,7073],{},[549,7074,7075],{},"business_data",[203,7077,7078],{},"Business data definitions",[184,7080,7081,7086],{},[203,7082,7083],{},[549,7084,7085],{},"business_data_field_link",[203,7087,7088],{},"Links between fields and business data",[57,7090,7092],{"id":7091},"key-fields-in-anomalies","Key Fields in Anomalies",[62,7094,7095,7101,7110,7116,7122,7128,7134],{},[65,7096,7097,7100],{},[549,7098,7099],{},"anomaly_kuid"," - Unique identifier (primary key)",[65,7102,7103,4211,7106,7109],{},[549,7104,7105],{},"title_txt",[549,7107,7108],{},"description_txt"," - Anomaly details",[65,7111,7112,7115],{},[549,7113,7114],{},"priority_typ"," - Priority level (CRITICAL, HIGH, etc.)",[65,7117,7118,7121],{},[549,7119,7120],{},"detection_time"," - When anomaly was detected",[65,7123,7124,7127],{},[549,7125,7126],{},"hotfix_flg"," - Hotfix eligibility flag",[65,7129,7130,7133],{},[549,7131,7132],{},"object_identification_fields"," - JSON with contract\u002Fobject context",[65,7135,7136,7139],{},[549,7137,7138],{},"error_fields"," - JSON with error details and resolution status",[30,7141,7143],{"id":7142},"chat-application-architecture","Chat Application Architecture",[933,7145,7148],{"className":7146,"code":7147,"language":938},[936],"chat\u002F\n├── app\u002F\n│   ├── app.vue                 # Root component with UI providers\n│   ├── components\u002F\n│   │   ├── Helper.vue          # Help tooltip component\n│   │   ├── ModelSelect.vue     # Model selector dropdown\n│   │   ├── Reasoning.vue       # AI reasoning display\n│   │   └── tool\u002F               # Tool UI components\n│   │       ├── SqlDisplay.vue  # SQL execution display\n│   │       ├── Chart.vue       # Chart visualizations\n│   │       └── KPI.vue         # KPI cards display\n│   └── pages\u002F\n│       ├── index.vue           # Landing page with prompt suggestions\n│       └── chat.vue            # Main chat interface\n├── server\u002F\n│   └── api\u002Fchat.ts             # Chat API endpoint with streaming\n├── shared\u002Futils\u002Ftools\u002F\n│   ├── executeSql.ts           # SQL query execution tool\n│   ├── chart.ts                # Chart visualization tool\n│   └── kpi.ts                  # KPI display tool\n├── nuxt.config.ts              # Nuxt configuration\n└── package.json                # Dependencies\n",[549,7149,7147],{"__ignoreMap":269},[57,7151,7153],{"id":7152},"data-flow","Data Flow",[933,7155,7158],{"className":7156,"code":7157,"language":938},[936],"User Message\n    ↓\nAI Streaming (server\u002Fapi\u002Fchat.ts)\n    ↓\nTool Selection (toolChoice: 'auto')\n    ↓\nTool Execution (server-side)\n    ↓\nStream Results to Client\n    ↓\ngroupParts() in chat.vue\n    ↓\nComponent Selection\n    ├── type: 'reasoning'           → \u003CReasoning \u002F>\n    ├── type: 'tool-executeSqlTool' → \u003CToolSqlDisplay \u002F>\n    ├── type: 'tool-chartTool'      → \u003CToolChart \u002F>\n    └── type: 'tool-kpiTool'        → \u003CToolKPI \u002F>\n    ↓\nRendered Message\n",[549,7159,7157],{"__ignoreMap":269},[30,7161,7163],{"id":7162},"available-tools","Available Tools",[57,7165,7167,7168],{"id":7166},"_1-executesqltool","1. ",[549,7169,7170],{},"executeSqlTool",[16,7172,7173,7176,7177],{},[25,7174,7175],{},"Server Tool",": ",[549,7178,7179],{},"shared\u002Futils\u002Ftools\u002FexecuteSql.ts",[16,7181,7182],{},"Executes SQL SELECT queries against the database.",[16,7184,7185],{},[25,7186,7187],{},"Parameters:",[62,7189,7190,7196],{},[65,7191,7192,7195],{},[549,7193,7194],{},"query",": SQL SELECT query (MySQL syntax)",[65,7197,7198,7201],{},[549,7199,7200],{},"reason",": Explanation for debugging",[16,7203,7204],{},[25,7205,7206],{},"Example usage by AI:",[933,7208,7212],{"className":7209,"code":7210,"language":7211,"meta":269,"style":269},"language-sql shiki shiki-themes material-theme-lighter catppuccin-latte catppuccin-macchiato","SELECT priority_typ, COUNT(*) AS anomaly_count\nFROM generic_anomalies\nGROUP BY priority_typ\nLIMIT 10\n","sql",[549,7213,7214,7219,7224,7229],{"__ignoreMap":269},[973,7215,7216],{"class":975,"line":839},[973,7217,7218],{},"SELECT priority_typ, COUNT(*) AS anomaly_count\n",[973,7220,7221],{"class":975,"line":270},[973,7222,7223],{},"FROM generic_anomalies\n",[973,7225,7226],{"class":975,"line":276},[973,7227,7228],{},"GROUP BY priority_typ\n",[973,7230,7231],{"class":975,"line":4167},[973,7232,7233],{},"LIMIT 10\n",[16,7235,7236,7239],{},[25,7237,7238],{},"Security:"," Only SELECT queries are allowed. Results are limited to 50 rows.",[16,7241,7242,7176,7245],{},[25,7243,7244],{},"UI Component",[549,7246,7247],{},"app\u002Fcomponents\u002Ftool\u002FSqlDisplay.vue",[57,7249,7251,7252],{"id":7250},"_2-charttool","2. ",[549,7253,7254],{},"chartTool",[16,7256,7257,7176,7259],{},[25,7258,7175],{},[549,7260,7261],{},"shared\u002Futils\u002Ftools\u002Fchart.ts",[16,7263,7264],{},"Generates data visualizations.",[16,7266,7267],{},[25,7268,7187],{},[62,7270,7271,7293,7299,7305,7311,7320,7326,7336,7348],{},[65,7272,7273,7176,7276,4211,7278,4211,7281,4211,7284,4211,7287,4211,7290],{},[549,7274,7275],{},"chartType",[549,7277,975],{},[549,7279,7280],{},"bar",[549,7282,7283],{},"area",[549,7285,7286],{},"donut",[549,7288,7289],{},"bubble",[549,7291,7292],{},"gantt",[65,7294,7295,7298],{},[549,7296,7297],{},"title",": Chart title",[65,7300,7301,7304],{},[549,7302,7303],{},"data",": Array of data objects",[65,7306,7307,7310],{},[549,7308,7309],{},"xKey",": Field for X-axis",[65,7312,7313,4211,7316,7319],{},[549,7314,7315],{},"xKeyStart",[549,7317,7318],{},"xKeyEnd",": Start\u002Fend fields for Gantt charts",[65,7321,7322,7325],{},[549,7323,7324],{},"radiusKey",": Size field for Bubble charts",[65,7327,7328,7331,7332,7335],{},[549,7329,7330],{},"series",": Array of ",[549,7333,7334],{},"{ key, name, color? }"," for Y-axis values",[65,7337,7338,4211,7341,4211,7344,7347],{},[549,7339,7340],{},"showMarkers",[549,7342,7343],{},"showLegend",[549,7345,7346],{},"isStacked",": Display options",[65,7349,7350,4211,7353,7356],{},[549,7351,7352],{},"xLabel",[549,7354,7355],{},"yLabel",": Axis labels",[16,7358,7359],{},[25,7360,7361],{},"Example:",[933,7363,7367],{"className":7364,"code":7365,"language":7366,"meta":269,"style":269},"language-typescript shiki shiki-themes material-theme-lighter catppuccin-latte catppuccin-macchiato","{\n  chartType: 'donut',\n  title: 'Anomalies by Priority',\n  data: [{ priority: 'CRITICAL', count: 150 }, { priority: 'HIGH', count: 89 }],\n  xKey: 'priority',\n  series: [{ key: 'count', name: 'Anomalies' }]\n}\n","typescript",[549,7368,7369,7375,7394,7410,7480,7497,7540],{"__ignoreMap":269},[973,7370,7371],{"class":975,"line":839},[973,7372,7374],{"class":7373},"sMKYs","{\n",[973,7376,7377,7381,7383,7386,7388,7391],{"class":975,"line":270},[973,7378,7380],{"class":7379},"sL87A","  chartType",[973,7382,6811],{"class":7373},[973,7384,7385],{"class":1052}," '",[973,7387,7286],{"class":982},[973,7389,7390],{"class":1052},"'",[973,7392,7393],{"class":7373},",\n",[973,7395,7396,7399,7401,7403,7406,7408],{"class":975,"line":276},[973,7397,7398],{"class":7379},"  title",[973,7400,6811],{"class":7373},[973,7402,7385],{"class":1052},[973,7404,7405],{"class":982},"Anomalies by Priority",[973,7407,7390],{"class":1052},[973,7409,7393],{"class":7373},[973,7411,7412,7415,7417,7421,7424,7427,7429,7431,7434,7436,7438,7441,7443,7447,7450,7453,7455,7457,7459,7462,7464,7466,7468,7470,7473,7476,7478],{"class":975,"line":4167},[973,7413,7414],{"class":7379},"  data",[973,7416,6811],{"class":7373},[973,7418,7420],{"class":7419},"suonz"," [",[973,7422,7423],{"class":7373},"{",[973,7425,7426],{"class":7419}," priority",[973,7428,6811],{"class":986},[973,7430,7385],{"class":1052},[973,7432,7433],{"class":982},"CRITICAL",[973,7435,7390],{"class":1052},[973,7437,3293],{"class":7373},[973,7439,7440],{"class":7419}," count",[973,7442,6811],{"class":986},[973,7444,7446],{"class":7445},"sZm5v"," 150",[973,7448,7449],{"class":7373}," },",[973,7451,7452],{"class":7373}," {",[973,7454,7426],{"class":7419},[973,7456,6811],{"class":986},[973,7458,7385],{"class":1052},[973,7460,7461],{"class":982},"HIGH",[973,7463,7390],{"class":1052},[973,7465,3293],{"class":7373},[973,7467,7440],{"class":7419},[973,7469,6811],{"class":986},[973,7471,7472],{"class":7445}," 89",[973,7474,7475],{"class":7373}," }",[973,7477,2750],{"class":7419},[973,7479,7393],{"class":7373},[973,7481,7483,7486,7488,7490,7493,7495],{"class":975,"line":7482},5,[973,7484,7485],{"class":7379},"  xKey",[973,7487,6811],{"class":7373},[973,7489,7385],{"class":1052},[973,7491,7492],{"class":982},"priority",[973,7494,7390],{"class":1052},[973,7496,7393],{"class":7373},[973,7498,7500,7503,7505,7507,7509,7512,7514,7516,7519,7521,7523,7526,7528,7530,7533,7535,7537],{"class":975,"line":7499},6,[973,7501,7502],{"class":7379},"  series",[973,7504,6811],{"class":7373},[973,7506,7420],{"class":7419},[973,7508,7423],{"class":7373},[973,7510,7511],{"class":7419}," key",[973,7513,6811],{"class":986},[973,7515,7385],{"class":1052},[973,7517,7518],{"class":982},"count",[973,7520,7390],{"class":1052},[973,7522,3293],{"class":7373},[973,7524,7525],{"class":7419}," name",[973,7527,6811],{"class":986},[973,7529,7385],{"class":1052},[973,7531,7532],{"class":982},"Anomalies",[973,7534,7390],{"class":1052},[973,7536,7475],{"class":7373},[973,7538,7539],{"class":7419},"]\n",[973,7541,7543],{"class":975,"line":7542},7,[973,7544,7545],{"class":7373},"}\n",[16,7547,7548,7176,7550],{},[25,7549,7244],{},[549,7551,7552],{},"app\u002Fcomponents\u002Ftool\u002FChart.vue",[16,7554,7555],{},[25,7556,7557],{},"Supported Chart Types:",[178,7559,7560,7572],{},[181,7561,7562],{},[184,7563,7564,7566,7569],{},[187,7565,4419],{},[187,7567,7568],{},"Use Case",[187,7570,7571],{},"Example",[198,7573,7574,7586,7598,7610,7622,7634],{},[184,7575,7576,7580,7583],{},[203,7577,7578],{},[549,7579,975],{},[203,7581,7582],{},"Time series trends",[203,7584,7585],{},"Anomalies over time",[184,7587,7588,7592,7595],{},[203,7589,7590],{},[549,7591,7280],{},[203,7593,7594],{},"Category comparisons",[203,7596,7597],{},"Anomalies by priority",[184,7599,7600,7604,7607],{},[203,7601,7602],{},[549,7603,7283],{},[203,7605,7606],{},"Cumulative metrics",[203,7608,7609],{},"Volume over time",[184,7611,7612,7616,7619],{},[203,7613,7614],{},[549,7615,7286],{},[203,7617,7618],{},"Proportions",[203,7620,7621],{},"Distribution by type",[184,7623,7624,7628,7631],{},[203,7625,7626],{},[549,7627,7289],{},[203,7629,7630],{},"Multi-dimensional data",[203,7632,7633],{},"Risk vs. volume vs. severity",[184,7635,7636,7640,7643],{},[203,7637,7638],{},[549,7639,7292],{},[203,7641,7642],{},"Timelines",[203,7644,7645],{},"Remediation schedules",[57,7647,7649,7650],{"id":7648},"_3-kpitool","3. ",[549,7651,7652],{},"kpiTool",[16,7654,7655,7176,7657],{},[25,7656,7175],{},[549,7658,7659],{},"shared\u002Futils\u002Ftools\u002Fkpi.ts",[16,7661,7662],{},"Displays KPI cards with metrics.",[16,7664,7665],{},[25,7666,7187],{},[62,7668,7669],{},[65,7670,7671,7674],{},[549,7672,7673],{},"kpis",": Array of KPI objects (max 6 recommended)",[16,7676,7677],{},[25,7678,7679],{},"KPI Object:",[933,7681,7683],{"className":7364,"code":7682,"language":7366,"meta":269,"style":269},"{\n  label: 'Critical Anomalies',           \u002F\u002F Short metric name\n  value: '150',                          \u002F\u002F Formatted value (string or number)\n  description: 'Active critical issues', \u002F\u002F Context description\n  icon: 'i-lucide-alert-triangle',       \u002F\u002F Lucide icon name\n  trend: 'up',                           \u002F\u002F 'up' | 'down' | 'stable'\n  trendValue: '+12%'                     \u002F\u002F Optional trend percentage\n}\n",[549,7684,7685,7689,7708,7727,7746,7765,7784,7801],{"__ignoreMap":269},[973,7686,7687],{"class":975,"line":839},[973,7688,7374],{"class":7373},[973,7690,7691,7694,7696,7698,7701,7703,7705],{"class":975,"line":270},[973,7692,7693],{"class":7379},"  label",[973,7695,6811],{"class":7373},[973,7697,7385],{"class":1052},[973,7699,7700],{"class":982},"Critical Anomalies",[973,7702,7390],{"class":1052},[973,7704,3293],{"class":7373},[973,7706,7707],{"class":6844},"           \u002F\u002F Short metric name\n",[973,7709,7710,7713,7715,7717,7720,7722,7724],{"class":975,"line":276},[973,7711,7712],{"class":7379},"  value",[973,7714,6811],{"class":7373},[973,7716,7385],{"class":1052},[973,7718,7719],{"class":982},"150",[973,7721,7390],{"class":1052},[973,7723,3293],{"class":7373},[973,7725,7726],{"class":6844},"                          \u002F\u002F Formatted value (string or number)\n",[973,7728,7729,7732,7734,7736,7739,7741,7743],{"class":975,"line":4167},[973,7730,7731],{"class":7379},"  description",[973,7733,6811],{"class":7373},[973,7735,7385],{"class":1052},[973,7737,7738],{"class":982},"Active critical issues",[973,7740,7390],{"class":1052},[973,7742,3293],{"class":7373},[973,7744,7745],{"class":6844}," \u002F\u002F Context description\n",[973,7747,7748,7751,7753,7755,7758,7760,7762],{"class":975,"line":7482},[973,7749,7750],{"class":7379},"  icon",[973,7752,6811],{"class":7373},[973,7754,7385],{"class":1052},[973,7756,7757],{"class":982},"i-lucide-alert-triangle",[973,7759,7390],{"class":1052},[973,7761,3293],{"class":7373},[973,7763,7764],{"class":6844},"       \u002F\u002F Lucide icon name\n",[973,7766,7767,7770,7772,7774,7777,7779,7781],{"class":975,"line":7499},[973,7768,7769],{"class":7379},"  trend",[973,7771,6811],{"class":7373},[973,7773,7385],{"class":1052},[973,7775,7776],{"class":982},"up",[973,7778,7390],{"class":1052},[973,7780,3293],{"class":7373},[973,7782,7783],{"class":6844},"                           \u002F\u002F 'up' | 'down' | 'stable'\n",[973,7785,7786,7789,7791,7793,7796,7798],{"class":975,"line":7542},[973,7787,7788],{"class":7379},"  trendValue",[973,7790,6811],{"class":7373},[973,7792,7385],{"class":1052},[973,7794,7795],{"class":982},"+12%",[973,7797,7390],{"class":1052},[973,7799,7800],{"class":6844},"                     \u002F\u002F Optional trend percentage\n",[973,7802,7804],{"class":975,"line":7803},8,[973,7805,7545],{"class":7373},[16,7807,7808,7176,7810],{},[25,7809,7244],{},[549,7811,7812],{},"app\u002Fcomponents\u002Ftool\u002FKPI.vue",[30,7814,7816],{"id":7815},"adding-a-new-tool","Adding a New Tool",[16,7818,7819],{},"To add a new tool, implement both server-side and client-side layers:",[57,7821,7823],{"id":7822},"step-1-define-server-tool","Step 1: Define Server Tool",[16,7825,7826,7827,6811],{},"Create a new file in ",[549,7828,7829],{},"shared\u002Futils\u002Ftools\u002F",[933,7831,7833],{"className":7364,"code":7832,"language":7366,"meta":269,"style":269},"\u002F\u002F shared\u002Futils\u002Ftools\u002FmyTool.ts\nimport { tool, type UIToolInvocation } from 'ai'\nimport { z } from 'zod'\n\nexport type MyUIToolInvocation = UIToolInvocation\u003Ctypeof myTool>\n\nexport const myTool = tool({\n  description: 'Brief description of what the tool does and when to use it.',\n  \n  inputSchema: z.object({\n    param1: z.string().describe('Parameter description'),\n    param2: z.number().optional().describe('Optional parameter')\n  }),\n  \n  outputSchema: z.object({\n    result: z.string()\n  }),\n  \n  execute: async ({ param1, param2 }) => {\n    return { result: 'processed data' }\n  }\n})\n",[549,7834,7835,7840,7872,7892,7897,7926,7930,7949,7964,7970,7989,8025,8065,8075,8080,8098,8115,8124,8129,8162,8185,8191],{"__ignoreMap":269},[973,7836,7837],{"class":975,"line":839},[973,7838,7839],{"class":6844},"\u002F\u002F shared\u002Futils\u002Ftools\u002FmyTool.ts\n",[973,7841,7842,7846,7848,7851,7853,7856,7859,7861,7864,7866,7869],{"class":975,"line":270},[973,7843,7845],{"class":7844},"sthAO","import",[973,7847,7452],{"class":7373},[973,7849,7850],{"class":993}," tool",[973,7852,3293],{"class":7373},[973,7854,7855],{"class":7844}," type",[973,7857,7858],{"class":993}," UIToolInvocation",[973,7860,7475],{"class":7373},[973,7862,7863],{"class":7844}," from",[973,7865,7385],{"class":1052},[973,7867,7868],{"class":982},"ai",[973,7870,7871],{"class":1052},"'\n",[973,7873,7874,7876,7878,7881,7883,7885,7887,7890],{"class":975,"line":276},[973,7875,7845],{"class":7844},[973,7877,7452],{"class":7373},[973,7879,7880],{"class":993}," z",[973,7882,7475],{"class":7373},[973,7884,7863],{"class":7844},[973,7886,7385],{"class":1052},[973,7888,7889],{"class":982},"zod",[973,7891,7871],{"class":1052},[973,7893,7894],{"class":975,"line":4167},[973,7895,7896],{"emptyLinePlaceholder":9},"\n",[973,7898,7899,7901,7903,7907,7910,7912,7916,7920,7924],{"class":975,"line":7482},[973,7900,1043],{"class":7844},[973,7902,7855],{"class":1042},[973,7904,7906],{"class":7905},"sqyRn"," MyUIToolInvocation",[973,7908,7909],{"class":986}," =",[973,7911,7858],{"class":7905},[973,7913,7915],{"class":7914},"sYxAZ","\u003C",[973,7917,7919],{"class":7918},"sTjAX","typeof",[973,7921,7923],{"class":7922},"sqgQz"," myTool",[973,7925,997],{"class":7914},[973,7927,7928],{"class":975,"line":7499},[973,7929,7896],{"emptyLinePlaceholder":9},[973,7931,7932,7934,7937,7940,7942,7945,7947],{"class":975,"line":7542},[973,7933,1043],{"class":7844},[973,7935,7936],{"class":1042}," const",[973,7938,7939],{"class":993}," myTool ",[973,7941,1049],{"class":986},[973,7943,7850],{"class":7944},"s0QKf",[973,7946,1403],{"class":993},[973,7948,7374],{"class":7373},[973,7950,7951,7953,7955,7957,7960,7962],{"class":975,"line":7803},[973,7952,7731],{"class":7419},[973,7954,6811],{"class":986},[973,7956,7385],{"class":1052},[973,7958,7959],{"class":982},"Brief description of what the tool does and when to use it.",[973,7961,7390],{"class":1052},[973,7963,7393],{"class":7373},[973,7965,7967],{"class":975,"line":7966},9,[973,7968,7969],{"class":993},"  \n",[973,7971,7973,7976,7978,7980,7982,7985,7987],{"class":975,"line":7972},10,[973,7974,7975],{"class":7419},"  inputSchema",[973,7977,6811],{"class":986},[973,7979,7880],{"class":993},[973,7981,2195],{"class":986},[973,7983,7984],{"class":7944},"object",[973,7986,1403],{"class":993},[973,7988,7374],{"class":7373},[973,7990,7992,7995,7997,7999,8001,8004,8007,8009,8012,8014,8016,8019,8021,8023],{"class":975,"line":7991},11,[973,7993,7994],{"class":7419},"    param1",[973,7996,6811],{"class":986},[973,7998,7880],{"class":993},[973,8000,2195],{"class":986},[973,8002,8003],{"class":7944},"string",[973,8005,8006],{"class":993},"()",[973,8008,2195],{"class":986},[973,8010,8011],{"class":7944},"describe",[973,8013,1403],{"class":993},[973,8015,7390],{"class":1052},[973,8017,8018],{"class":982},"Parameter description",[973,8020,7390],{"class":1052},[973,8022,1107],{"class":993},[973,8024,7393],{"class":7373},[973,8026,8028,8031,8033,8035,8037,8040,8042,8044,8047,8049,8051,8053,8055,8057,8060,8062],{"class":975,"line":8027},12,[973,8029,8030],{"class":7419},"    param2",[973,8032,6811],{"class":986},[973,8034,7880],{"class":993},[973,8036,2195],{"class":986},[973,8038,8039],{"class":7944},"number",[973,8041,8006],{"class":993},[973,8043,2195],{"class":986},[973,8045,8046],{"class":7944},"optional",[973,8048,8006],{"class":993},[973,8050,2195],{"class":986},[973,8052,8011],{"class":7944},[973,8054,1403],{"class":993},[973,8056,7390],{"class":1052},[973,8058,8059],{"class":982},"Optional parameter",[973,8061,7390],{"class":1052},[973,8063,8064],{"class":993},")\n",[973,8066,8068,8071,8073],{"class":975,"line":8067},13,[973,8069,8070],{"class":7373},"  }",[973,8072,1107],{"class":993},[973,8074,7393],{"class":7373},[973,8076,8078],{"class":975,"line":8077},14,[973,8079,7969],{"class":993},[973,8081,8083,8086,8088,8090,8092,8094,8096],{"class":975,"line":8082},15,[973,8084,8085],{"class":7419},"  outputSchema",[973,8087,6811],{"class":986},[973,8089,7880],{"class":993},[973,8091,2195],{"class":986},[973,8093,7984],{"class":7944},[973,8095,1403],{"class":993},[973,8097,7374],{"class":7373},[973,8099,8101,8104,8106,8108,8110,8112],{"class":975,"line":8100},16,[973,8102,8103],{"class":7419},"    result",[973,8105,6811],{"class":986},[973,8107,7880],{"class":993},[973,8109,2195],{"class":986},[973,8111,8003],{"class":7944},[973,8113,8114],{"class":993},"()\n",[973,8116,8118,8120,8122],{"class":975,"line":8117},17,[973,8119,8070],{"class":7373},[973,8121,1107],{"class":993},[973,8123,7393],{"class":7373},[973,8125,8127],{"class":975,"line":8126},18,[973,8128,7969],{"class":993},[973,8130,8132,8135,8137,8140,8143,8147,8149,8152,8155,8159],{"class":975,"line":8131},19,[973,8133,8134],{"class":7944},"  execute",[973,8136,6811],{"class":986},[973,8138,8139],{"class":1042}," async",[973,8141,8142],{"class":7373}," ({",[973,8144,8146],{"class":8145},"smoPz"," param1",[973,8148,3293],{"class":7373},[973,8150,8151],{"class":8145}," param2",[973,8153,8154],{"class":7373}," })",[973,8156,8158],{"class":8157},"s66VR"," =>",[973,8160,8161],{"class":7373}," {\n",[973,8163,8165,8168,8170,8173,8175,8177,8180,8182],{"class":975,"line":8164},20,[973,8166,8167],{"class":7844},"    return",[973,8169,7452],{"class":7373},[973,8171,8172],{"class":7419}," result",[973,8174,6811],{"class":986},[973,8176,7385],{"class":1052},[973,8178,8179],{"class":982},"processed data",[973,8181,7390],{"class":1052},[973,8183,8184],{"class":7373}," }\n",[973,8186,8188],{"class":975,"line":8187},21,[973,8189,8190],{"class":7373},"  }\n",[973,8192,8194,8197],{"class":975,"line":8193},22,[973,8195,8196],{"class":7373},"}",[973,8198,8064],{"class":993},[57,8200,8202],{"id":8201},"step-2-export-tool","Step 2: Export Tool",[16,8204,8205,8206,6811],{},"Add to ",[549,8207,8208],{},"shared\u002Futils\u002Findex.ts",[933,8210,8212],{"className":7364,"code":8211,"language":7366,"meta":269,"style":269},"export * from '.\u002Ftools\u002FmyTool'\n",[549,8213,8214],{"__ignoreMap":269},[973,8215,8216,8218,8222,8224,8226,8229],{"class":975,"line":839},[973,8217,1043],{"class":7844},[973,8219,8221],{"class":8220},"sLx3F"," *",[973,8223,7863],{"class":7844},[973,8225,7385],{"class":1052},[973,8227,8228],{"class":982},".\u002Ftools\u002FmyTool",[973,8230,7871],{"class":1052},[57,8232,8234],{"id":8233},"step-3-register-in-chat-api","Step 3: Register in Chat API",[16,8236,8237,8238,6811],{},"Update ",[549,8239,8240],{},"server\u002Fapi\u002Fchat.ts",[933,8242,8244],{"className":7364,"code":8243,"language":7366,"meta":269,"style":269},"import { myTool } from '~\u002Fshared\u002Futils'\n\nconst result = await streamText({\n  model: ollama(model, { \u002F* ... *\u002F }),\n  tools: {\n    executeSqlTool,\n    chartTool,\n    kpiTool,\n    myTool\n  },\n})\n",[549,8245,8246,8265,8269,8289,8315,8324,8331,8338,8345,8350,8355],{"__ignoreMap":269},[973,8247,8248,8250,8252,8254,8256,8258,8260,8263],{"class":975,"line":839},[973,8249,7845],{"class":7844},[973,8251,7452],{"class":7373},[973,8253,7923],{"class":993},[973,8255,7475],{"class":7373},[973,8257,7863],{"class":7844},[973,8259,7385],{"class":1052},[973,8261,8262],{"class":982},"~\u002Fshared\u002Futils",[973,8264,7871],{"class":1052},[973,8266,8267],{"class":975,"line":270},[973,8268,7896],{"emptyLinePlaceholder":9},[973,8270,8271,8274,8277,8279,8282,8285,8287],{"class":975,"line":276},[973,8272,8273],{"class":1042},"const",[973,8275,8276],{"class":993}," result ",[973,8278,1049],{"class":986},[973,8280,8281],{"class":7844}," await",[973,8283,8284],{"class":7944}," streamText",[973,8286,1403],{"class":993},[973,8288,7374],{"class":7373},[973,8290,8291,8294,8296,8299,8302,8304,8306,8309,8311,8313],{"class":975,"line":4167},[973,8292,8293],{"class":7419},"  model",[973,8295,6811],{"class":986},[973,8297,8298],{"class":7944}," ollama",[973,8300,8301],{"class":993},"(model",[973,8303,3293],{"class":7373},[973,8305,7452],{"class":7373},[973,8307,8308],{"class":6844}," \u002F* ... *\u002F",[973,8310,7475],{"class":7373},[973,8312,1107],{"class":993},[973,8314,7393],{"class":7373},[973,8316,8317,8320,8322],{"class":975,"line":7482},[973,8318,8319],{"class":7419},"  tools",[973,8321,6811],{"class":986},[973,8323,8161],{"class":7373},[973,8325,8326,8329],{"class":975,"line":7499},[973,8327,8328],{"class":993},"    executeSqlTool",[973,8330,7393],{"class":7373},[973,8332,8333,8336],{"class":975,"line":7542},[973,8334,8335],{"class":993},"    chartTool",[973,8337,7393],{"class":7373},[973,8339,8340,8343],{"class":975,"line":7803},[973,8341,8342],{"class":993},"    kpiTool",[973,8344,7393],{"class":7373},[973,8346,8347],{"class":975,"line":7966},[973,8348,8349],{"class":993},"    myTool\n",[973,8351,8352],{"class":975,"line":7972},[973,8353,8354],{"class":7373},"  },\n",[973,8356,8357,8359],{"class":975,"line":7991},[973,8358,8196],{"class":7373},[973,8360,8064],{"class":993},[57,8362,8364],{"id":8363},"step-4-update-system-prompt","Step 4: Update System Prompt",[16,8366,8367,8368,6811],{},"Add tool documentation to the system prompt in ",[549,8369,8240],{},[933,8371,8373],{"className":7364,"code":8372,"language":7366,"meta":269,"style":269},"## myTool\n- Purpose: What the tool does\n- When to use: Specific use cases\n- Required parameters: param1, param2\n- Output: Description of result format\n",[549,8374,8375,8380,8393,8408,8427],{"__ignoreMap":269},[973,8376,8377],{"class":975,"line":839},[973,8378,8379],{"class":993},"## myTool\n",[973,8381,8382,8385,8388,8390],{"class":975,"line":270},[973,8383,8384],{"class":986},"-",[973,8386,8387],{"class":7379}," Purpose",[973,8389,6811],{"class":7373},[973,8391,8392],{"class":993}," What the tool does\n",[973,8394,8395,8397,8400,8403,8405],{"class":975,"line":276},[973,8396,8384],{"class":986},[973,8398,8399],{"class":993}," When to ",[973,8401,8402],{"class":7379},"use",[973,8404,6811],{"class":7373},[973,8406,8407],{"class":993}," Specific use cases\n",[973,8409,8410,8412,8415,8418,8420,8422,8424],{"class":975,"line":4167},[973,8411,8384],{"class":986},[973,8413,8414],{"class":993}," Required ",[973,8416,8417],{"class":7379},"parameters",[973,8419,6811],{"class":7373},[973,8421,8146],{"class":993},[973,8423,3293],{"class":7373},[973,8425,8426],{"class":993}," param2\n",[973,8428,8429,8431,8434,8436,8439,8442],{"class":975,"line":7482},[973,8430,8384],{"class":986},[973,8432,8433],{"class":7379}," Output",[973,8435,6811],{"class":7373},[973,8437,8438],{"class":993}," Description ",[973,8440,8441],{"class":7918},"of",[973,8443,8444],{"class":993}," result format\n",[57,8446,8448],{"id":8447},"step-5-create-ui-component","Step 5: Create UI Component",[16,8450,6916,8451,6811],{},[549,8452,8453],{},"app\u002Fcomponents\u002Ftool\u002FMyTool.vue",[933,8455,8459],{"className":8456,"code":8457,"language":8458,"meta":269,"style":269},"language-vue shiki shiki-themes material-theme-lighter catppuccin-latte catppuccin-macchiato","\u003Cscript setup lang=\"ts\">\nimport type { MyUIToolInvocation } from '~\u002Fshared\u002Futils'\n\nconst props = defineProps\u003C{\n  invocation: MyUIToolInvocation\n  isStreaming?: boolean\n}>()\n\nconst output = computed(() => props.invocation.output)\nconst state = computed(() => props.invocation.state)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv v-if=\"state !== 'output-available'\" class=\"my-4 flex items-center gap-2 text-gray-500\">\n    \u003CUIcon name=\"i-lucide-loader-2\" class=\"animate-spin\" \u002F>\n    \u003Cspan>Processing...\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv v-else-if=\"output\" class=\"my-4 p-4 rounded-lg border bg-gray-50 dark:bg-gray-900\">\n    \u003Ch3 class=\"font-semibold\">Tool Result\u003C\u002Fh3>\n    \u003Cp>{{ output.result }}\u003C\u002Fp>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n","vue",[549,8460,8461,8486,8506,8510,8526,8537,8549,8557,8561,8592,8620,8629,8633,8642,8676,8709,8726,8735,8739,8770,8798,8815,8823],{"__ignoreMap":269},[973,8462,8463,8465,8468,8472,8475,8477,8479,8482,8484],{"class":975,"line":839},[973,8464,7915],{"class":986},[973,8466,2219],{"class":8467},"sc0Ia",[973,8469,8471],{"class":8470},"sbKHD"," setup",[973,8473,8474],{"class":8470}," lang",[973,8476,1049],{"class":986},[973,8478,1053],{"class":1052},[973,8480,8481],{"class":982},"ts",[973,8483,1053],{"class":1052},[973,8485,997],{"class":986},[973,8487,8488,8490,8492,8494,8496,8498,8500,8502,8504],{"class":975,"line":270},[973,8489,7845],{"class":7844},[973,8491,7855],{"class":7844},[973,8493,7452],{"class":7373},[973,8495,7906],{"class":993},[973,8497,7475],{"class":7373},[973,8499,7863],{"class":7844},[973,8501,7385],{"class":1052},[973,8503,8262],{"class":982},[973,8505,7871],{"class":1052},[973,8507,8508],{"class":975,"line":276},[973,8509,7896],{"emptyLinePlaceholder":9},[973,8511,8512,8514,8517,8519,8522,8524],{"class":975,"line":4167},[973,8513,8273],{"class":1042},[973,8515,8516],{"class":993}," props ",[973,8518,1049],{"class":986},[973,8520,8521],{"class":7944}," defineProps",[973,8523,7915],{"class":7914},[973,8525,7374],{"class":7373},[973,8527,8528,8532,8534],{"class":975,"line":7482},[973,8529,8531],{"class":8530},"se7m0","  invocation",[973,8533,6811],{"class":986},[973,8535,8536],{"class":7905}," MyUIToolInvocation\n",[973,8538,8539,8542,8545],{"class":975,"line":7499},[973,8540,8541],{"class":8530},"  isStreaming",[973,8543,8544],{"class":986},"?:",[973,8546,8548],{"class":8547},"sQubY"," boolean\n",[973,8550,8551,8553,8555],{"class":975,"line":7542},[973,8552,8196],{"class":7373},[973,8554,3206],{"class":7914},[973,8556,8114],{"class":993},[973,8558,8559],{"class":975,"line":7803},[973,8560,7896],{"emptyLinePlaceholder":9},[973,8562,8563,8565,8568,8570,8573,8575,8577,8579,8582,8584,8587,8589],{"class":975,"line":7966},[973,8564,8273],{"class":1042},[973,8566,8567],{"class":993}," output ",[973,8569,1049],{"class":986},[973,8571,8572],{"class":7944}," computed",[973,8574,1403],{"class":993},[973,8576,8006],{"class":7373},[973,8578,8158],{"class":8157},[973,8580,8581],{"class":993}," props",[973,8583,2195],{"class":986},[973,8585,8586],{"class":993},"invocation",[973,8588,2195],{"class":986},[973,8590,8591],{"class":993},"output)\n",[973,8593,8594,8596,8599,8601,8603,8605,8607,8609,8611,8613,8615,8617],{"class":975,"line":7972},[973,8595,8273],{"class":1042},[973,8597,8598],{"class":993}," state ",[973,8600,1049],{"class":986},[973,8602,8572],{"class":7944},[973,8604,1403],{"class":993},[973,8606,8006],{"class":7373},[973,8608,8158],{"class":8157},[973,8610,8581],{"class":993},[973,8612,2195],{"class":986},[973,8614,8586],{"class":993},[973,8616,2195],{"class":986},[973,8618,8619],{"class":993},"state)\n",[973,8621,8622,8625,8627],{"class":975,"line":7991},[973,8623,8624],{"class":986},"\u003C\u002F",[973,8626,2219],{"class":8467},[973,8628,997],{"class":986},[973,8630,8631],{"class":975,"line":8027},[973,8632,7896],{"emptyLinePlaceholder":9},[973,8634,8635,8637,8640],{"class":975,"line":8067},[973,8636,7915],{"class":986},[973,8638,8639],{"class":8467},"template",[973,8641,997],{"class":986},[973,8643,8644,8647,8650,8653,8655,8657,8660,8662,8665,8667,8669,8672,8674],{"class":975,"line":8077},[973,8645,8646],{"class":986},"  \u003C",[973,8648,8649],{"class":8467},"div",[973,8651,8652],{"class":8470}," v-if",[973,8654,1049],{"class":986},[973,8656,1053],{"class":1052},[973,8658,8659],{"class":982},"state !== 'output-available'",[973,8661,1053],{"class":1052},[973,8663,8664],{"class":8470}," class",[973,8666,1049],{"class":986},[973,8668,1053],{"class":1052},[973,8670,8671],{"class":982},"my-4 flex items-center gap-2 text-gray-500",[973,8673,1053],{"class":1052},[973,8675,997],{"class":986},[973,8677,8678,8681,8684,8686,8688,8690,8693,8695,8697,8699,8701,8704,8706],{"class":975,"line":8082},[973,8679,8680],{"class":986},"    \u003C",[973,8682,8683],{"class":8467},"UIcon",[973,8685,7525],{"class":8470},[973,8687,1049],{"class":986},[973,8689,1053],{"class":1052},[973,8691,8692],{"class":982},"i-lucide-loader-2",[973,8694,1053],{"class":1052},[973,8696,8664],{"class":8470},[973,8698,1049],{"class":986},[973,8700,1053],{"class":1052},[973,8702,8703],{"class":982},"animate-spin",[973,8705,1053],{"class":1052},[973,8707,8708],{"class":986}," \u002F>\n",[973,8710,8711,8713,8715,8717,8720,8722,8724],{"class":975,"line":8100},[973,8712,8680],{"class":986},[973,8714,973],{"class":8467},[973,8716,3206],{"class":986},[973,8718,8719],{"class":993},"Processing...",[973,8721,8624],{"class":986},[973,8723,973],{"class":8467},[973,8725,997],{"class":986},[973,8727,8728,8731,8733],{"class":975,"line":8117},[973,8729,8730],{"class":986},"  \u003C\u002F",[973,8732,8649],{"class":8467},[973,8734,997],{"class":986},[973,8736,8737],{"class":975,"line":8126},[973,8738,7896],{"emptyLinePlaceholder":9},[973,8740,8741,8743,8745,8748,8750,8752,8755,8757,8759,8761,8763,8766,8768],{"class":975,"line":8131},[973,8742,8646],{"class":986},[973,8744,8649],{"class":8467},[973,8746,8747],{"class":8470}," v-else-if",[973,8749,1049],{"class":986},[973,8751,1053],{"class":1052},[973,8753,8754],{"class":982},"output",[973,8756,1053],{"class":1052},[973,8758,8664],{"class":8470},[973,8760,1049],{"class":986},[973,8762,1053],{"class":1052},[973,8764,8765],{"class":982},"my-4 p-4 rounded-lg border bg-gray-50 dark:bg-gray-900",[973,8767,1053],{"class":1052},[973,8769,997],{"class":986},[973,8771,8772,8774,8776,8778,8780,8782,8785,8787,8789,8792,8794,8796],{"class":975,"line":8164},[973,8773,8680],{"class":986},[973,8775,57],{"class":8467},[973,8777,8664],{"class":8470},[973,8779,1049],{"class":986},[973,8781,1053],{"class":1052},[973,8783,8784],{"class":982},"font-semibold",[973,8786,1053],{"class":1052},[973,8788,3206],{"class":986},[973,8790,8791],{"class":993},"Tool Result",[973,8793,8624],{"class":986},[973,8795,57],{"class":8467},[973,8797,997],{"class":986},[973,8799,8800,8802,8804,8806,8809,8811,8813],{"class":975,"line":8187},[973,8801,8680],{"class":986},[973,8803,16],{"class":8467},[973,8805,3206],{"class":986},[973,8807,8808],{"class":993},"{{ output.result }}",[973,8810,8624],{"class":986},[973,8812,16],{"class":8467},[973,8814,997],{"class":986},[973,8816,8817,8819,8821],{"class":975,"line":8193},[973,8818,8730],{"class":986},[973,8820,8649],{"class":8467},[973,8822,997],{"class":986},[973,8824,8826,8828,8830],{"class":975,"line":8825},23,[973,8827,8624],{"class":986},[973,8829,8639],{"class":8467},[973,8831,997],{"class":986},[57,8833,8835],{"id":8834},"step-6-register-component-in-chat-page","Step 6: Register Component in Chat Page",[16,8837,8237,8838,6811],{},[549,8839,8840],{},"app\u002Fpages\u002Fchat.vue",[933,8842,8844],{"className":8456,"code":8843,"language":8458,"meta":269,"style":269},"\u003CToolMyTool\n  v-else-if=\"block.type === 'tool' && block.part.type === 'tool-myTool'\"\n  :invocation=\"(block.part as any).toolInvocation || block.part\"\n  :is-streaming=\"block.isStreaming\"\n\u002F>\n",[549,8845,8846,8853,8905,8948,8968],{"__ignoreMap":269},[973,8847,8848,8850],{"class":975,"line":839},[973,8849,7915],{"class":986},[973,8851,8852],{"class":8467},"ToolMyTool\n",[973,8854,8855,8858,8860,8862,8865,8867,8870,8873,8875,8878,8880,8883,8886,8888,8891,8893,8895,8897,8899,8902],{"class":975,"line":270},[973,8856,8857],{"class":7844},"  v-else-if",[973,8859,1049],{"class":986},[973,8861,1053],{"class":1052},[973,8863,8864],{"class":993},"block",[973,8866,2195],{"class":986},[973,8868,8869],{"class":993},"type ",[973,8871,8872],{"class":986},"===",[973,8874,7385],{"class":1052},[973,8876,8877],{"class":982},"tool",[973,8879,7390],{"class":1052},[973,8881,8882],{"class":986}," &&",[973,8884,8885],{"class":993}," block",[973,8887,2195],{"class":986},[973,8889,8890],{"class":993},"part",[973,8892,2195],{"class":986},[973,8894,8869],{"class":993},[973,8896,8872],{"class":986},[973,8898,7385],{"class":1052},[973,8900,8901],{"class":982},"tool-myTool",[973,8903,8904],{"class":1052},"'\"\n",[973,8906,8907,8910,8912,8914,8916,8919,8921,8924,8927,8930,8932,8934,8937,8940,8942,8944,8946],{"class":975,"line":276},[973,8908,8909],{"class":7373},"  :",[973,8911,8586],{"class":8470},[973,8913,1049],{"class":986},[973,8915,1053],{"class":1052},[973,8917,8918],{"class":993},"(block",[973,8920,2195],{"class":986},[973,8922,8923],{"class":993},"part ",[973,8925,8926],{"class":7844},"as",[973,8928,8929],{"class":8547}," any",[973,8931,1107],{"class":993},[973,8933,2195],{"class":986},[973,8935,8936],{"class":993},"toolInvocation ",[973,8938,8939],{"class":986},"||",[973,8941,8885],{"class":993},[973,8943,2195],{"class":986},[973,8945,8890],{"class":993},[973,8947,1059],{"class":1052},[973,8949,8950,8952,8955,8957,8959,8961,8963,8966],{"class":975,"line":4167},[973,8951,8909],{"class":7373},[973,8953,8954],{"class":8470},"is-streaming",[973,8956,1049],{"class":986},[973,8958,1053],{"class":1052},[973,8960,8864],{"class":993},[973,8962,2195],{"class":986},[973,8964,8965],{"class":993},"isStreaming",[973,8967,1059],{"class":1052},[973,8969,8970],{"class":975,"line":7482},[973,8971,8972],{"class":993},"\u002F>\n",[30,8974,8976],{"id":8975},"system-prompt-guidelines","System Prompt Guidelines",[16,8978,8979,8980,8982],{},"The system prompt (",[549,8981,8240],{},") controls AI behavior:",[57,8984,8986],{"id":8985},"key-rules","Key Rules",[958,8988,8989,8997,9006,9012,9018,9024],{},[65,8990,8991,8994,8995],{},[25,8992,8993],{},"Schema Compliance",": Only use columns\u002Ftables defined in ",[549,8996,6810],{},[65,8998,8999,9002,9003,9005],{},[25,9000,9001],{},"Default Table",": Use ",[549,9004,6905],{}," for general analysis",[65,9007,9008,9011],{},[25,9009,9010],{},"Language",": Respond in the user's language",[65,9013,9014,9017],{},[25,9015,9016],{},"No SQL Visibility",": Never show raw SQL to users",[65,9019,9020,9023],{},[25,9021,9022],{},"Explicit Requests",": Only use charts\u002FKPIs when explicitly requested",[65,9025,9026,9029],{},[25,9027,9028],{},"Proactive Suggestions",": Offer visualizations without auto-executing",[57,9031,9033],{"id":9032},"critical-definitions","Critical Definitions",[62,9035,9036,9047,9057],{},[65,9037,9038,7176,9041,9043,9044],{},[25,9039,9040],{},"Critical Anomaly",[549,9042,7114],{}," IN ('CRITICAL', 'CRITIQUE', 'HIGH', 'HAUTE') OR ",[549,9045,9046],{},"hotfix_flg = 1",[65,9048,9049,9052,9053,9056],{},[25,9050,9051],{},"Open\u002FUnresolved",": Check ",[549,9054,9055],{},"error_fields.resolved_value_txt"," for resolution status",[65,9058,9059,9002,9062,9065],{},[25,9060,9061],{},"Owner",[549,9063,9064],{},"functional_controls.responsible_login_id"," as default owner",[30,9067,9069],{"id":9068},"development","Development",[57,9071,9073],{"id":9072},"scripts","Scripts",[933,9075,9077],{"className":967,"code":9076,"language":969,"meta":269,"style":269},"bun run dev        # Start development server\nbun run build      # Build for production\nbun run preview    # Preview production build\nbun run lint       # Run ESLint\nbun run typecheck  # Type check with vue-tsc\n",[549,9078,9079,9090,9102,9114,9126],{"__ignoreMap":269},[973,9080,9081,9083,9085,9087],{"class":975,"line":839},[973,9082,6955],{"class":978},[973,9084,6965],{"class":982},[973,9086,6968],{"class":982},[973,9088,9089],{"class":6844},"        # Start development server\n",[973,9091,9092,9094,9096,9099],{"class":975,"line":270},[973,9093,6955],{"class":978},[973,9095,6965],{"class":982},[973,9097,9098],{"class":982}," build",[973,9100,9101],{"class":6844},"      # Build for production\n",[973,9103,9104,9106,9108,9111],{"class":975,"line":276},[973,9105,6955],{"class":978},[973,9107,6965],{"class":982},[973,9109,9110],{"class":982}," preview",[973,9112,9113],{"class":6844},"    # Preview production build\n",[973,9115,9116,9118,9120,9123],{"class":975,"line":4167},[973,9117,6955],{"class":978},[973,9119,6965],{"class":982},[973,9121,9122],{"class":982}," lint",[973,9124,9125],{"class":6844},"       # Run ESLint\n",[973,9127,9128,9130,9132,9135],{"class":975,"line":7482},[973,9129,6955],{"class":978},[973,9131,6965],{"class":982},[973,9133,9134],{"class":982}," typecheck",[973,9136,9137],{"class":6844},"  # Type check with vue-tsc\n",[57,9139,9141],{"id":9140},"environment-variables","Environment Variables",[178,9143,9144,9156],{},[181,9145,9146],{},[184,9147,9148,9151,9153],{},[187,9149,9150],{},"Variable",[187,9152,7008],{},[187,9154,9155],{},"Required",[198,9157,9158],{},[184,9159,9160,9165,9168],{},[203,9161,9162],{},[549,9163,9164],{},"DATABASE_URL",[203,9166,9167],{},"MySQL connection string",[203,9169,9170],{},"Yes",[57,9172,9174],{"id":9173},"tech-stack","Tech Stack",[62,9176,9177,9183,9189,9195,9201,9207],{},[65,9178,9179,9182],{},[25,9180,9181],{},"Framework",": Nuxt 4 + Vue 3",[65,9184,9185,9188],{},[25,9186,9187],{},"UI",": Nuxt UI 4 (based on Tailwind CSS)",[65,9190,9191,9194],{},[25,9192,9193],{},"AI",": AI SDK + Ollama",[65,9196,9197,9200],{},[25,9198,9199],{},"Database",": MySQL via NuxtHub",[65,9202,9203,9206],{},[25,9204,9205],{},"Charts",": nuxt-charts",[65,9208,9209,9212],{},[25,9210,9211],{},"Utilities",": VueUse, Zod",[30,9214,9216],{"id":9215},"deployment","Deployment",[57,9218,9220],{"id":9219},"nuxthub-recommended","NuxtHub (Recommended)",[933,9222,9224],{"className":967,"code":9223,"language":969,"meta":269,"style":269},"cd chat\nbun run build\nnpx hub deploy\n",[549,9225,9226,9232,9241],{"__ignoreMap":269},[973,9227,9228,9230],{"class":975,"line":839},[973,9229,1003],{"class":1002},[973,9231,6950],{"class":982},[973,9233,9234,9236,9238],{"class":975,"line":270},[973,9235,6955],{"class":978},[973,9237,6965],{"class":982},[973,9239,9240],{"class":982}," build\n",[973,9242,9243,9246,9249],{"class":975,"line":276},[973,9244,9245],{"class":978},"npx",[973,9247,9248],{"class":982}," hub",[973,9250,9251],{"class":982}," deploy\n",[57,9253,9255],{"id":9254},"manual-deployment","Manual Deployment",[933,9257,9259],{"className":967,"code":9258,"language":969,"meta":269,"style":269},"cd chat\nbun run build\nbun run preview\n",[549,9260,9261,9267,9275],{"__ignoreMap":269},[973,9262,9263,9265],{"class":975,"line":839},[973,9264,1003],{"class":1002},[973,9266,6950],{"class":982},[973,9268,9269,9271,9273],{"class":975,"line":270},[973,9270,6955],{"class":978},[973,9272,6965],{"class":982},[973,9274,9240],{"class":982},[973,9276,9277,9279,9281],{"class":975,"line":276},[973,9278,6955],{"class":978},[973,9280,6965],{"class":982},[973,9282,9283],{"class":982}," preview\n",[16,9285,9286],{},"Set production environment variables for database connection.",[30,9288,9290],{"id":9289},"troubleshooting","Troubleshooting",[57,9292,9294],{"id":9293},"common-issues","Common Issues",[958,9296,9297,9316,9337,9353],{},[65,9298,9299,9302],{},[25,9300,9301],{},"Ollama Connection Failed",[62,9303,9304,9310],{},[65,9305,9306,9307],{},"Ensure Ollama is running: ",[549,9308,9309],{},"ollama serve",[65,9311,9312,9313],{},"Check model availability: ",[549,9314,9315],{},"ollama pull llama3.2",[65,9317,9318,9321],{},[25,9319,9320],{},"Database Connection Error",[62,9322,9323,9329],{},[65,9324,9325,9326],{},"Verify MySQL is running: ",[549,9327,9328],{},"docker ps",[65,9330,9331,9332,9334,9335],{},"Check ",[549,9333,6919],{}," has correct ",[549,9336,9164],{},[65,9338,9339,9342],{},[25,9340,9341],{},"Empty Query Results",[62,9343,9344,9347],{},[65,9345,9346],{},"Ensure data is loaded via Jupyter notebook",[65,9348,9349,9350],{},"Verify tables exist: ",[549,9351,9352],{},"SHOW TABLES;",[65,9354,9355,9358],{},[25,9356,9357],{},"Tool Not Called",[62,9359,9360,9363],{},[65,9361,9362],{},"System prompt may need adjustment",[65,9364,9331,9365,9368],{},[549,9366,9367],{},"toolChoice: 'auto'"," in streamText config",[57,9370,9372],{"id":9371},"debug-mode","Debug Mode",[16,9374,9375],{},"View AI reasoning by checking console logs:",[933,9377,9379],{"className":7364,"code":9378,"language":7366,"meta":269,"style":269},"\u002F\u002F In chat.ts, the tool execution logs\nconsole.log('⚡ executing SQL:', query)\n",[549,9380,9381,9386],{"__ignoreMap":269},[973,9382,9383],{"class":975,"line":839},[973,9384,9385],{"class":6844},"\u002F\u002F In chat.ts, the tool execution logs\n",[973,9387,9388,9391,9393,9395,9397,9399,9402,9404,9406],{"class":975,"line":270},[973,9389,9390],{"class":993},"console",[973,9392,2195],{"class":986},[973,9394,3868],{"class":7944},[973,9396,1403],{"class":993},[973,9398,7390],{"class":1052},[973,9400,9401],{"class":982},"⚡ executing SQL:",[973,9403,7390],{"class":1052},[973,9405,3293],{"class":7373},[973,9407,9408],{"class":993}," query)\n",[263,9410],{},[16,9412,9413],{},[509,9414,9415],{},"Curious about the ETL logic or the prompt structure we used? I can share how we optimized the LLM's SQL accuracy.",[1309,9417,9418],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sqbHp, html code.shiki .sqbHp{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#1E66F5;--shiki-default-font-style:italic;--shiki-dark:#8AADF4;--shiki-dark-font-style:italic}html pre.shiki code .sJlHP, html code.shiki .sJlHP{--shiki-light:#91B859;--shiki-default:#40A02B;--shiki-dark:#A6DA95}html pre.shiki code .sv490, html code.shiki .sv490{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#7C7F93;--shiki-default-font-style:italic;--shiki-dark:#939AB7;--shiki-dark-font-style:italic}html pre.shiki code .sMj0x, html code.shiki .sMj0x{--shiki-light:#6182B8;--shiki-light-font-style:inherit;--shiki-default:#D20F39;--shiki-default-font-style:italic;--shiki-dark:#ED8796;--shiki-dark-font-style:italic}html pre.shiki code .sMKYs, html code.shiki .sMKYs{--shiki-light:#39ADB5;--shiki-default:#7C7F93;--shiki-dark:#939AB7}html pre.shiki code .sL87A, html code.shiki .sL87A{--shiki-light:#E2931D;--shiki-default:#4C4F69;--shiki-dark:#CAD3F5}html pre.shiki code .srDDN, html code.shiki .srDDN{--shiki-light:#39ADB5;--shiki-default:#40A02B;--shiki-dark:#A6DA95}html pre.shiki code .suonz, html code.shiki .suonz{--shiki-light:#E53935;--shiki-default:#4C4F69;--shiki-dark:#CAD3F5}html pre.shiki code .sn2um, html code.shiki .sn2um{--shiki-light:#39ADB5;--shiki-default:#179299;--shiki-dark:#8BD5CA}html pre.shiki code .sZm5v, html code.shiki .sZm5v{--shiki-light:#F76D47;--shiki-default:#FE640B;--shiki-dark:#F5A97F}html pre.shiki code .sthAO, html code.shiki .sthAO{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#8839EF;--shiki-default-font-style:inherit;--shiki-dark:#C6A0F6;--shiki-dark-font-style:inherit}html pre.shiki code .s0g_q, html code.shiki .s0g_q{--shiki-light:#90A4AE;--shiki-default:#4C4F69;--shiki-dark:#CAD3F5}html pre.shiki code .s_I8y, html code.shiki .s_I8y{--shiki-light:#9C3EDA;--shiki-default:#8839EF;--shiki-dark:#C6A0F6}html pre.shiki code .sqyRn, html code.shiki .sqyRn{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#DF8E1D;--shiki-default-font-style:italic;--shiki-dark:#EED49F;--shiki-dark-font-style:italic}html pre.shiki code .sYxAZ, html code.shiki .sYxAZ{--shiki-light:#39ADB5;--shiki-default:#04A5E5;--shiki-dark:#91D7E3}html pre.shiki code .sTjAX, html code.shiki .sTjAX{--shiki-light:#39ADB5;--shiki-default:#8839EF;--shiki-dark:#C6A0F6}html pre.shiki code .sqgQz, html code.shiki .sqgQz{--shiki-light:#90A4AE;--shiki-light-font-style:inherit;--shiki-default:#4C4F69;--shiki-default-font-style:italic;--shiki-dark:#CAD3F5;--shiki-dark-font-style:italic}html pre.shiki code .s0QKf, html code.shiki .s0QKf{--shiki-light:#6182B8;--shiki-light-font-style:inherit;--shiki-default:#1E66F5;--shiki-default-font-style:italic;--shiki-dark:#8AADF4;--shiki-dark-font-style:italic}html pre.shiki code .smoPz, html code.shiki .smoPz{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E64553;--shiki-default-font-style:italic;--shiki-dark:#EE99A0;--shiki-dark-font-style:italic}html pre.shiki code .s66VR, html code.shiki .s66VR{--shiki-light:#9C3EDA;--shiki-default:#179299;--shiki-dark:#8BD5CA}html pre.shiki code .sLx3F, html code.shiki .sLx3F{--shiki-light:#39ADB5;--shiki-default:#D20F39;--shiki-dark:#ED8796}html pre.shiki code .sc0Ia, html code.shiki .sc0Ia{--shiki-light:#E53935;--shiki-default:#1E66F5;--shiki-dark:#8AADF4}html pre.shiki code .sbKHD, html code.shiki .sbKHD{--shiki-light:#9C3EDA;--shiki-default:#DF8E1D;--shiki-dark:#EED49F}html pre.shiki code .se7m0, html code.shiki .se7m0{--shiki-light:#E53935;--shiki-light-font-style:inherit;--shiki-default:#4C4F69;--shiki-default-font-style:italic;--shiki-dark:#CAD3F5;--shiki-dark-font-style:italic}html pre.shiki code .sQubY, html code.shiki .sQubY{--shiki-light:#E2931D;--shiki-default:#8839EF;--shiki-dark:#C6A0F6}",{"title":269,"searchDepth":270,"depth":270,"links":9420},[9421,9422,9427,9428,9429,9430,9437,9438,9442,9445,9453,9461,9465,9470,9474],{"id":6536,"depth":270,"text":6537},{"id":6558,"depth":270,"text":6559,"children":9423},[9424,9425,9426],{"id":6562,"depth":276,"text":6563},{"id":6593,"depth":276,"text":6594},{"id":6620,"depth":276,"text":6621},{"id":6641,"depth":270,"text":6642},{"id":6648,"depth":270,"text":6649},{"id":6690,"depth":270,"text":6691},{"id":6729,"depth":270,"text":6730,"children":9431},[9432,9433,9434,9435,9436],{"id":943,"depth":276,"text":944},{"id":6778,"depth":276,"text":6779},{"id":6825,"depth":276,"text":6826},{"id":6912,"depth":276,"text":6913},{"id":6937,"depth":276,"text":6938},{"id":6309,"depth":270,"text":6310},{"id":6988,"depth":270,"text":6989,"children":9439},[9440,9441],{"id":6995,"depth":276,"text":6996},{"id":7091,"depth":276,"text":7092},{"id":7142,"depth":270,"text":7143,"children":9443},[9444],{"id":7152,"depth":276,"text":7153},{"id":7162,"depth":270,"text":7163,"children":9446},[9447,9449,9451],{"id":7166,"depth":276,"text":9448},"1. executeSqlTool",{"id":7250,"depth":276,"text":9450},"2. chartTool",{"id":7648,"depth":276,"text":9452},"3. kpiTool",{"id":7815,"depth":270,"text":7816,"children":9454},[9455,9456,9457,9458,9459,9460],{"id":7822,"depth":276,"text":7823},{"id":8201,"depth":276,"text":8202},{"id":8233,"depth":276,"text":8234},{"id":8363,"depth":276,"text":8364},{"id":8447,"depth":276,"text":8448},{"id":8834,"depth":276,"text":8835},{"id":8975,"depth":270,"text":8976,"children":9462},[9463,9464],{"id":8985,"depth":276,"text":8986},{"id":9032,"depth":276,"text":9033},{"id":9068,"depth":270,"text":9069,"children":9466},[9467,9468,9469],{"id":9072,"depth":276,"text":9073},{"id":9140,"depth":276,"text":9141},{"id":9173,"depth":276,"text":9174},{"id":9215,"depth":270,"text":9216,"children":9471},[9472,9473],{"id":9219,"depth":276,"text":9220},{"id":9254,"depth":276,"text":9255},{"id":9289,"depth":270,"text":9290,"children":9475},[9476,9477],{"id":9293,"depth":276,"text":9294},{"id":9371,"depth":276,"text":9372},"2026-03-07","A team-based project building an NL-to-SQL agent with Nuxt, Ollama, and Vercel AI SDK.","hackathon-natixis","projects\u002Fhackathon-natixis",[488,4307,6600,6725,9483],"ETL","Hackathon","kur_MTBVaanKrUifke7hCnJiMpkUw7fmJyEyKGNSE40",{"id":9487,"title":9488,"description":9489,"extension":8,"favorite":853,"icon":9490,"meta":9491,"publishedAt":11203,"readingTime":276,"shortDescription":11204,"slug":11205,"status":1331,"stem":11206,"tags":11207,"type":847,"__hash__":11211},"projects\u002Fprojects\u002Fglm-implied-volatility.md","Implied Volatility Prediction from Options Data","A large-scale statistical study comparing Generalized Linear Models (GLMs) and black-box machine learning architectures to predict the implied volatility of S&P 500 options.","i-ph-graph-duotone",{"body":9492},{"type":13,"value":9493,"toc":11164},[9494,9503,9510,9521,9523,9525,9529,9532,9552,9556,9567,9622,9626,9631,9639,9644,9705,9707,9711,9715,9721,9725,9728,9848,9850,9854,9857,9938,9942,9945,10019,10023,10089,10092,10095,10121,10123,10127,10131,10137,10141,10190,10192,10196,10202,10204,10208,10210,10223,10225,10241,10244,10274,10278,10324,10326,10330,10334,10351,10355,10375,10379,10385,10984,10987,10989,10993,10997,11029,11033,11047,11049,11051,11056,11067,11077,11079,11083,11107,11109,11113,11116,11161],[9495,9496,9497],"blockquote",{},[16,9498,9499,9502],{},[25,9500,9501],{},"M2 Master's Project"," – Predicting implied volatility using advanced regression techniques and machine learning models on financial options data.",[16,9504,9505,9506,9509],{},"This project explores the prediction of ",[25,9507,9508],{},"implied volatility"," from options market data, combining classical statistical methods with modern machine learning approaches. The analysis covers data preprocessing, feature engineering, model benchmarking, and interpretability analysis using real-world financial panel data.",[62,9511,9512],{},[65,9513,9514,4393,9516],{},[25,9515,4392],{},[19,9517,9520],{"href":9518,"rel":9519},"https:\u002F\u002Fgithub.com\u002FArthurDanjou\u002FImplied-Volatility-from-Options-Data",[23],"Implied-Volatility-from-Options-Data",[263,9522],{},[30,9524,872],{"id":871},[57,9526,9528],{"id":9527},"problem-statement","Problem Statement",[16,9530,9531],{},"Implied volatility represents the market's forward-looking expectation of an asset's future volatility. Accurate prediction is crucial for:",[62,9533,9534,9540,9546],{},[65,9535,9536,9539],{},[25,9537,9538],{},"Option pricing"," and valuation",[65,9541,9542,9545],{},[25,9543,9544],{},"Risk management"," and hedging strategies",[65,9547,9548,9551],{},[25,9549,9550],{},"Trading strategies"," based on volatility arbitrage",[57,9553,9555],{"id":9554},"dataset","Dataset",[16,9557,9558,9559,9562,9563,9566],{},"The project uses a comprehensive panel dataset tracking ",[25,9560,9561],{},"3,887 assets"," across ",[25,9564,9565],{},"544 observation dates"," (2019-2022):",[178,9568,9569,9581],{},[181,9570,9571],{},[184,9572,9573,9576,9578],{},[187,9574,9575],{},"File",[187,9577,7008],{},[187,9579,9580],{},"Shape",[198,9582,9583,9596,9609],{},[184,9584,9585,9590,9593],{},[203,9586,9587],{},[549,9588,9589],{},"Train_ISF.csv",[203,9591,9592],{},"Training data with target variable",[203,9594,9595],{},"1,909,465 rows × 21 columns",[184,9597,9598,9603,9606],{},[203,9599,9600],{},[549,9601,9602],{},"Test_ISF.csv",[203,9604,9605],{},"Test data for prediction",[203,9607,9608],{},"1,251,308 rows × 18 columns",[184,9610,9611,9616,9619],{},[203,9612,9613],{},[549,9614,9615],{},"hat_y.csv",[203,9617,9618],{},"Final predictions from both models",[203,9620,9621],{},"1,251,308 rows × 2 columns",[57,9623,9625],{"id":9624},"key-variables","Key Variables",[16,9627,9628],{},[25,9629,9630],{},"Target Variable:",[62,9632,9633],{},[65,9634,9635,9638],{},[549,9636,9637],{},"implied_vol_ref"," – The implied volatility to predict",[16,9640,9641],{},[25,9642,9643],{},"Feature Categories:",[62,9645,9646,9657,9677,9694],{},[65,9647,9648,4393,9651,4211,9654],{},[25,9649,9650],{},"Identifiers:",[549,9652,9653],{},"asset_id",[549,9655,9656],{},"obs_date",[65,9658,9659,4393,9662,4211,9665,4211,9668,4211,9671,4211,9674],{},[25,9660,9661],{},"Market Activity:",[549,9663,9664],{},"call_volume",[549,9666,9667],{},"put_volume",[549,9669,9670],{},"call_oi",[549,9672,9673],{},"put_oi",[549,9675,9676],{},"total_contracts",[65,9678,9679,4393,9682,4211,9685,4211,9688,4211,9691],{},[25,9680,9681],{},"Volatility Metrics:",[549,9683,9684],{},"realized_vol_short",[549,9686,9687],{},"realized_vol_mid1-3",[549,9689,9690],{},"realized_vol_long1-4",[549,9692,9693],{},"market_vol_index",[65,9695,9696,4393,9699,4211,9702],{},[25,9697,9698],{},"Option Structure:",[549,9700,9701],{},"strike_dispersion",[549,9703,9704],{},"maturity_count",[263,9706],{},[30,9708,9710],{"id":9709},"methodology","Methodology",[57,9712,9714],{"id":9713},"data-pipeline","Data Pipeline",[933,9716,9719],{"className":9717,"code":9718,"language":938},[936],"Raw Data\n    ↓\n┌─────────────────────────────────────────────────────────┐\n│  Data Splitting (Chronological 80\u002F20)                   │\n│  - Training: 2019-10 to 2021-07                         │\n│  - Validation: 2021-07 to 2022-03                       │\n└─────────────────────────────────────────────────────────┘\n    ↓\n┌─────────────────────────────────────────────────────────┐\n│  Feature Engineering                                    │\n│  - Aggregation of volatility horizons                   │\n│  - Creation of financial indicators                     │\n└─────────────────────────────────────────────────────────┘\n    ↓\n┌─────────────────────────────────────────────────────────┐\n│  Data Preprocessing (tidymodels)                        │\n│  - Winsorization (99.5th percentile)                    │\n│  - Log\u002FYeo-Johnson transformations                      │\n│  - Z-score normalization                                │\n│  - PCA (95% variance retention)                         │\n└─────────────────────────────────────────────────────────┘\n    ↓\nThree Datasets Generated:\n├── Tree-based (raw, scale-invariant)\n├── Linear (normalized, winsorized)\n└── PCA (dimensionality-reduced)\n",[549,9720,9718],{"__ignoreMap":269},[57,9722,9724],{"id":9723},"feature-engineering","Feature Engineering",[16,9726,9727],{},"New financial indicators created to capture market dynamics:",[178,9729,9730,9742],{},[181,9731,9732],{},[184,9733,9734,9737,9739],{},[187,9735,9736],{},"Feature",[187,9738,7008],{},[187,9740,9741],{},"Formula",[198,9743,9744,9757,9770,9783,9796,9809,9822,9835],{},[184,9745,9746,9751,9754],{},[203,9747,9748],{},[549,9749,9750],{},"pulse_ratio",[203,9752,9753],{},"Volatility trend direction",[203,9755,9756],{},"RV_short \u002F RV_long",[184,9758,9759,9764,9767],{},[203,9760,9761],{},[549,9762,9763],{},"stress_spread",[203,9765,9766],{},"Asset vs market stress",[203,9768,9769],{},"RV_short - Market_VIX",[184,9771,9772,9777,9780],{},[203,9773,9774],{},[549,9775,9776],{},"put_call_ratio_volume",[203,9778,9779],{},"Immediate market stress",[203,9781,9782],{},"Put_Volume \u002F Call_Volume",[184,9784,9785,9790,9793],{},[203,9786,9787],{},[549,9788,9789],{},"put_call_ratio_oi",[203,9791,9792],{},"Long-term risk structure",[203,9794,9795],{},"Put_OI \u002F Call_OI",[184,9797,9798,9803,9806],{},[203,9799,9800],{},[549,9801,9802],{},"liquidity_ratio",[203,9804,9805],{},"Market depth",[203,9807,9808],{},"Total_Volume \u002F Total_OI",[184,9810,9811,9816,9819],{},[203,9812,9813],{},[549,9814,9815],{},"option_dispersion",[203,9817,9818],{},"Market uncertainty",[203,9820,9821],{},"Strike_Dispersion \u002F Total_Contracts",[184,9823,9824,9829,9832],{},[203,9825,9826],{},[549,9827,9828],{},"put_low_strike",[203,9830,9831],{},"Downside protection density",[203,9833,9834],{},"Strike_Dispersion \u002F Put_OI",[184,9836,9837,9842,9845],{},[203,9838,9839],{},[549,9840,9841],{},"put_proportion",[203,9843,9844],{},"Hedging vs speculation",[203,9846,9847],{},"Put_Volume \u002F Total_Volume",[263,9849],{},[30,9851,9853],{"id":9852},"models-implemented","Models Implemented",[57,9855,654],{"id":9856},"linear-models",[178,9858,9859,9871],{},[181,9860,9861],{},[184,9862,9863,9866,9868],{},[187,9864,9865],{},"Model",[187,9867,7008],{},[187,9869,9870],{},"Best RMSE",[198,9872,9873,9886,9899,9912,9925],{},[184,9874,9875,9880,9883],{},[203,9876,9877],{},[25,9878,9879],{},"OLS",[203,9881,9882],{},"Ordinary Least Squares",[203,9884,9885],{},"11.26",[184,9887,9888,9893,9896],{},[203,9889,9890],{},[25,9891,9892],{},"Ridge",[203,9894,9895],{},"L2 regularization",[203,9897,9898],{},"12.48",[184,9900,9901,9906,9909],{},[203,9902,9903],{},[25,9904,9905],{},"Lasso",[203,9907,9908],{},"L1 regularization (variable selection)",[203,9910,9911],{},"12.03",[184,9913,9914,9919,9922],{},[203,9915,9916],{},[25,9917,9918],{},"Elastic Net",[203,9920,9921],{},"L1 + L2 combined",[203,9923,9924],{},"~12.03",[184,9926,9927,9932,9935],{},[203,9928,9929],{},[25,9930,9931],{},"PLS",[203,9933,9934],{},"Partial Least Squares (on PCA)",[203,9936,9937],{},"12.79",[57,9939,9941],{"id":9940},"linear-mixed-effects-models-lmm","Linear Mixed-Effects Models (LMM)",[16,9943,9944],{},"Advanced panel data models accounting for asset-specific effects:",[178,9946,9947,9958],{},[181,9948,9949],{},[184,9950,9951,9953,9955],{},[187,9952,9865],{},[187,9954,6649],{},[187,9956,9957],{},"RMSE",[198,9959,9960,9971,9982,9992,10003],{},[184,9961,9962,9965,9968],{},[203,9963,9964],{},"LMM Baseline",[203,9966,9967],{},"All variables + Random Intercept",[203,9969,9970],{},"8.77",[184,9972,9973,9976,9979],{},[203,9974,9975],{},"LMM Reduced",[203,9977,9978],{},"Collinearity removal",[203,9980,9981],{},"~8.77",[184,9983,9984,9987,9990],{},[203,9985,9986],{},"LMM Interactions",[203,9988,9989],{},"Financial interaction terms",[203,9991,9981],{},[184,9993,9994,9997,10000],{},[203,9995,9996],{},"LMM + Quadratic",[203,9998,9999],{},"Convexity terms (vol of vol)",[203,10001,10002],{},"8.41",[184,10004,10005,10010,10013],{},[203,10006,10007],{},[25,10008,10009],{},"LMM + Random Slopes (mod_lmm_5)",[203,10011,10012],{},"Asset-specific betas",[203,10014,10015,10018],{},[25,10016,10017],{},"8.10"," ⭐",[57,10020,10022],{"id":10021},"tree-based-models","Tree-Based Models",[178,10024,10025,10040],{},[181,10026,10027],{},[184,10028,10029,10031,10034,10037],{},[187,10030,9865],{},[187,10032,10033],{},"Strategy",[187,10035,10036],{},"Validation RMSE",[187,10038,10039],{},"Training RMSE",[198,10041,10042,10058,10076],{},[184,10043,10044,10049,10052,10055],{},[203,10045,10046],{},[25,10047,10048],{},"XGBoost",[203,10050,10051],{},"Level-wise, Bayesian tuning",[203,10053,10054],{},"10.70",[203,10056,10057],{},"0.57",[184,10059,10060,10065,10068,10073],{},[203,10061,10062],{},[25,10063,10064],{},"LightGBM",[203,10066,10067],{},"Leaf-wise, feature regularization",[203,10069,10070,10018],{},[25,10071,10072],{},"10.61",[203,10074,10075],{},"10.90",[184,10077,10078,10081,10084,10087],{},[203,10079,10080],{},"Random Forest",[203,10082,10083],{},"Bagging",[203,10085,10086],{},"DNF*",[203,10088,8384],{},[16,10090,10091],{},"*DNF: Did Not Finish (computational constraints)",[57,10093,4172],{"id":10094},"neural-networks",[178,10096,10097,10108],{},[181,10098,10099],{},[184,10100,10101,10103,10105],{},[187,10102,9865],{},[187,10104,931],{},[187,10106,10107],{},"Status",[198,10109,10110],{},[184,10111,10112,10115,10118],{},[203,10113,10114],{},"MLP",[203,10116,10117],{},"128-64 units, tanh activation",[203,10119,10120],{},"Failed to converge",[263,10122],{},[30,10124,10126],{"id":10125},"results-summary","Results Summary",[57,10128,10130],{"id":10129},"model-comparison","Model Comparison",[933,10132,10135],{"className":10133,"code":10134,"language":938},[936],"RMSE Performance (Lower is Better)\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nLinear Mixed-Effects (LMM5)     8.38 ████████████████████ Best Linear\nLinear Mixed-Effects (LMM4)     8.41 ███████████████████\nLinear Mixed-Effects (Baseline) 8.77 ██████████████████\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nLightGBM                       10.61 ███████████████ Best Non-Linear\nXGBoost                        10.70 ██████████████\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nOLS (with interactions)        11.26 █████████████\nLasso                          12.03 ███████████\nOLS (baseline)                 12.01 ███████████\nRidge                          12.48 ██████████\nPLS                            12.79 █████████\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n",[549,10136,10134],{"__ignoreMap":269},[57,10138,10140],{"id":10139},"key-findings","Key Findings",[958,10142,10143,10157,10171],{},[65,10144,10145,10148,10149],{},[25,10146,10147],{},"Best Linear Model:"," LMM with Random Slopes (RMSE = 8.38)",[62,10150,10151,10154],{},[65,10152,10153],{},"Captures asset-specific volatility sensitivities",[65,10155,10156],{},"Includes quadratic terms for convexity effects",[65,10158,10159,10162,10163],{},[25,10160,10161],{},"Best Non-Linear Model:"," LightGBM (RMSE = 10.61)",[62,10164,10165,10168],{},[65,10166,10167],{},"Superior generalization vs XGBoost",[65,10169,10170],{},"Feature regularization prevents overfitting",[65,10172,10173,10176],{},[25,10174,10175],{},"Interpretability Insights (SHAP Analysis):",[62,10177,10178,10184,10187],{},[65,10179,10180,10183],{},[549,10181,10182],{},"realized_vol_mid"," dominates (57% of gain)",[65,10185,10186],{},"Volatility clustering confirmed as primary driver",[65,10188,10189],{},"Non-linear regime switching in stress_spread",[263,10191],{},[30,10193,10195],{"id":10194},"repository-structure","Repository Structure",[933,10197,10200],{"className":10198,"code":10199,"language":938},[936],"PROJECT\u002F\n├── Projet_MRC_DANJOU_LEGRAND_MERIC_VONSIEMENS.qmd     # Main analysis (Quarto)\n├── Projet_MRC_DANJOU_LEGRAND_MERIC_VONSIEMENS.html    # Rendered report\n├── packages.R                                         # R dependencies installer\n├── Train_ISF.csv                                      # Training data (~1.9M rows)\n├── Test_ISF.csv                                       # Test data (~1.25M rows)\n├── hat_y.csv                                          # Final predictions\n├── README.md                                          # This file\n└── results\u002F\n    ├── lightgbm\u002F                                      # LightGBM model outputs\n    └── xgboost\u002F                                       # XGBoost model outputs\n",[549,10201,10199],{"__ignoreMap":269},[263,10203],{},[30,10205,10207],{"id":10206},"getting-started","Getting Started",[57,10209,944],{"id":943},[62,10211,10212,10217],{},[65,10213,10214,10216],{},[25,10215,515],{}," ≥ 4.0",[65,10218,10219,10220,1107],{},"Required packages (auto-installed via ",[549,10221,10222],{},"packages.R",[57,10224,956],{"id":955},[933,10226,10229],{"className":10227,"code":10228,"language":4498,"meta":269,"style":269},"language-r shiki shiki-themes material-theme-lighter catppuccin-latte catppuccin-macchiato","# Install all dependencies\nsource(\"packages.R\")\n",[549,10230,10231,10236],{"__ignoreMap":269},[973,10232,10233],{"class":975,"line":839},[973,10234,10235],{},"# Install all dependencies\n",[973,10237,10238],{"class":975,"line":270},[973,10239,10240],{},"source(\"packages.R\")\n",[16,10242,10243],{},"Or manually install key packages:",[933,10245,10247],{"className":10227,"code":10246,"language":4498,"meta":269,"style":269},"install.packages(c(\n  \"tidyverse\", \"tidymodels\", \"caret\", \"glmnet\",\n  \"lme4\", \"lmerTest\", \"xgboost\", \"lightgbm\",\n  \"ranger\", \"pls\", \"shapviz\", \"rBayesianOptimization\"\n))\n",[549,10248,10249,10254,10259,10264,10269],{"__ignoreMap":269},[973,10250,10251],{"class":975,"line":839},[973,10252,10253],{},"install.packages(c(\n",[973,10255,10256],{"class":975,"line":270},[973,10257,10258],{},"  \"tidyverse\", \"tidymodels\", \"caret\", \"glmnet\",\n",[973,10260,10261],{"class":975,"line":276},[973,10262,10263],{},"  \"lme4\", \"lmerTest\", \"xgboost\", \"lightgbm\",\n",[973,10265,10266],{"class":975,"line":4167},[973,10267,10268],{},"  \"ranger\", \"pls\", \"shapviz\", \"rBayesianOptimization\"\n",[973,10270,10271],{"class":975,"line":7482},[973,10272,10273],{},"))\n",[57,10275,10277],{"id":10276},"running-the-analysis","Running the Analysis",[958,10279,10280,10300,10314],{},[65,10281,10282,10285],{},[25,10283,10284],{},"Open the Quarto document:",[933,10286,10288],{"className":10227,"code":10287,"language":4498,"meta":269,"style":269},"# In RStudio\nrstudioapi::navigateToFile(\"Projet_MRC_DANJOU_LEGRAND_MERIC_VONSIEMENS.qmd\")\n",[549,10289,10290,10295],{"__ignoreMap":269},[973,10291,10292],{"class":975,"line":839},[973,10293,10294],{},"# In RStudio\n",[973,10296,10297],{"class":975,"line":270},[973,10298,10299],{},"rstudioapi::navigateToFile(\"Projet_MRC_DANJOU_LEGRAND_MERIC_VONSIEMENS.qmd\")\n",[65,10301,10302,10305],{},[25,10303,10304],{},"Render the document:",[933,10306,10308],{"className":10227,"code":10307,"language":4498,"meta":269,"style":269},"quarto::quarto_render(\"Projet_MRC_DANJOU_LEGRAND_MERIC_VONSIEMENS.qmd\")\n",[549,10309,10310],{"__ignoreMap":269},[973,10311,10312],{"class":975,"line":839},[973,10313,10307],{},[65,10315,10316,10319,10320,10323],{},[25,10317,10318],{},"Or run specific sections interactively"," using the code chunks in the ",[549,10321,10322],{},".qmd"," file",[263,10325],{},[30,10327,10329],{"id":10328},"technical-details","Technical Details",[57,10331,10333],{"id":10332},"data-split-strategy","Data Split Strategy",[62,10335,10336,10342,10345,10348],{},[65,10337,10338,10341],{},[25,10339,10340],{},"Chronological split"," at 80th percentile of dates",[65,10343,10344],{},"Prevents look-ahead bias and data leakage",[65,10346,10347],{},"Training: ~1.53M observations",[65,10349,10350],{},"Validation: ~376K observations",[57,10352,10354],{"id":10353},"hyperparameter-tuning","Hyperparameter Tuning",[62,10356,10357,10363,10369],{},[65,10358,10359,10362],{},[25,10360,10361],{},"Method:"," Bayesian Optimization (Gaussian Processes)",[65,10364,10365,10368],{},[25,10366,10367],{},"Acquisition:"," Expected Improvement (UCB)",[65,10370,10371,10374],{},[25,10372,10373],{},"Goal:"," Maximize negative RMSE",[57,10376,10378],{"id":10377},"evaluation-metric","Evaluation Metric",[16,10380,10381,10384],{},[25,10382,10383],{},"Exponential RMSE"," on original scale:",[973,10386,10389],{"className":10387},[10388],"katex-display",[973,10390,10392,10500],{"className":10391},[1369],[973,10393,10395],{"className":10394},[1373],[1375,10396,10397],{"xmlns":1377,"display":8864},[1379,10398,10399,10497],{},[1382,10400,10401,10403,10406,10408,10423,10425],{},[1385,10402,515],{},[1385,10404,10405],{},"M",[1385,10407,2224],{},[1582,10409,10410,10412],{},[1385,10411,2729],{},[1382,10413,10414,10416,10419,10421],{},[1385,10415,4498],{},[1385,10417,10418],{},"e",[1385,10420,19],{},[1385,10422,994],{},[1395,10424,1049],{},[2256,10426,10427],{},[1382,10428,10429,10435,10451],{},[2259,10430,10431,10433],{},[1575,10432,1577],{},[1385,10434,2227],{},[10436,10437,10438,10440,10449],"munderover",{},[1395,10439,1566],{},[1382,10441,10442,10445,10447],{},[1385,10443,10444],{},"i",[1395,10446,1049],{},[1575,10448,1577],{},[1385,10450,2227],{},[4514,10452,10453,10495],{},[1382,10454,10455,10457,10460,10462,10464,10483,10485,10487,10493],{},[1395,10456,1403],{"fence":1431},[1385,10458,10459],{},"exp",[1395,10461,2740],{},[1395,10463,1403],{"stretchy":1402},[1582,10465,10466,10473],{},[3260,10467,10468,10471],{"accent":1431},[1385,10469,10470],{},"y",[1395,10472,3266],{},[1382,10474,10475,10477,10479,10481],{},[1385,10476,3868],{},[1395,10478,2740],{},[1395,10480,3293],{"separator":1431},[1385,10482,10444],{},[1395,10484,1107],{"stretchy":1402},[1395,10486,1417],{},[1582,10488,10489,10491],{},[1385,10490,10470],{},[1385,10492,10444],{},[1395,10494,1107],{"fence":1431},[1575,10496,2239],{},[1423,10498,10499],{"encoding":1425},"RMSE_{real} = \\sqrt{\\frac{1}{n} \\sum_{i=1}^{n} \\left( \\exp(\\hat{y}_{\\log, i}) - y_i \\right)^2}",[973,10501,10503,10584],{"className":10502,"ariaHidden":1431},[1430],[973,10504,10506,10509,10513,10517,10520,10575,10578,10581],{"className":10505},[1435],[973,10507],{"className":10508,"style":2007},[1439],[973,10510,515],{"className":10511,"style":10512},[1444,1448],"margin-right:0.0077em;",[973,10514,10405],{"className":10515,"style":10516},[1444,1448],"margin-right:0.109em;",[973,10518,2224],{"className":10519,"style":2315},[1444,1448],[973,10521,10523,10526],{"className":10522},[1444],[973,10524,2729],{"className":10525,"style":2315},[1444,1448],[973,10527,10529],{"className":10528},[1662],[973,10530,10532,10567],{"className":10531},[1666,1667],[973,10533,10535,10564],{"className":10534},[1671],[973,10536,10539],{"className":10537,"style":10538},[1675],"height:0.3361em;",[973,10540,10542,10545],{"style":10541},"top:-2.55em;margin-left:-0.0576em;margin-right:0.05em;",[973,10543],{"className":10544,"style":1684},[1683],[973,10546,10548],{"className":10547},[1688,1689,1690,1691],[973,10549,10551,10554,10557,10560],{"className":10550},[1444,1691],[973,10552,4498],{"className":10553,"style":4713},[1444,1448,1691],[973,10555,10418],{"className":10556},[1444,1448,1691],[973,10558,19],{"className":10559},[1444,1448,1691],[973,10561,994],{"className":10562,"style":10563},[1444,1448,1691],"margin-right:0.0197em;",[973,10565,1724],{"className":10566},[1723],[973,10568,10570],{"className":10569},[1671],[973,10571,10573],{"className":10572,"style":2049},[1675],[973,10574],{},[973,10576],{"className":10577,"style":1457},[1456],[973,10579,1049],{"className":10580},[1461],[973,10582],{"className":10583,"style":1457},[1456],[973,10585,10587,10591],{"className":10586},[1435],[973,10588],{"className":10589,"style":10590},[1439],"height:3.1568em;vertical-align:-1.2777em;",[973,10592,10594],{"className":10593},[1444,2484],[973,10595,10597,10976],{"className":10596},[1666,1667],[973,10598,10600,10973],{"className":10599},[1671],[973,10601,10604,10956],{"className":10602,"style":10603},[1675],"height:1.8791em;",[973,10605,10608,10612],{"className":10606,"style":10607},[2498],"top:-5.1168em;",[973,10609],{"className":10610,"style":10611},[1683],"height:5.1168em;",[973,10613,10616,10682,10685,10760,10763],{"className":10614,"style":10615},[1444],"padding-left:1.056em;",[973,10617,10619,10622,10679],{"className":10618},[1444],[973,10620],{"className":10621},[1477,2514],[973,10623,10625],{"className":10624},[2259],[973,10626,10628,10670],{"className":10627},[1666,1667],[973,10629,10631,10667],{"className":10630},[1671],[973,10632,10635,10647,10655],{"className":10633,"style":10634},[1675],"height:1.3214em;",[973,10636,10638,10641],{"style":10637},"top:-2.314em;",[973,10639],{"className":10640,"style":2534},[1683],[973,10642,10644],{"className":10643},[1444],[973,10645,2227],{"className":10646},[1444,1448],[973,10648,10649,10652],{"style":2546},[973,10650],{"className":10651,"style":2534},[1683],[973,10653],{"className":10654,"style":2554},[2553],[973,10656,10658,10661],{"style":10657},"top:-3.677em;",[973,10659],{"className":10660,"style":2534},[1683],[973,10662,10664],{"className":10663},[1444],[973,10665,1577],{"className":10666},[1444],[973,10668,1724],{"className":10669},[1723],[973,10671,10673],{"className":10672},[1671],[973,10674,10677],{"className":10675,"style":10676},[1675],"height:0.686em;",[973,10678],{},[973,10680],{"className":10681},[1484,2514],[973,10683],{"className":10684,"style":1737},[1456],[973,10686,10689],{"className":10687},[1652,10688],"op-limits",[973,10690,10692,10751],{"className":10691},[1666,1667],[973,10693,10695,10748],{"className":10694},[1671],[973,10696,10699,10721,10733],{"className":10697,"style":10698},[1675],"height:1.6514em;",[973,10700,10702,10706],{"style":10701},"top:-1.8723em;margin-left:0em;",[973,10703],{"className":10704,"style":10705},[1683],"height:3.05em;",[973,10707,10709],{"className":10708},[1688,1689,1690,1691],[973,10710,10712,10715,10718],{"className":10711},[1444,1691],[973,10713,10444],{"className":10714},[1444,1448,1691],[973,10716,1049],{"className":10717},[1461,1691],[973,10719,1577],{"className":10720},[1444,1691],[973,10722,10724,10727],{"style":10723},"top:-3.05em;",[973,10725],{"className":10726,"style":10705},[1683],[973,10728,10729],{},[973,10730,1566],{"className":10731},[1652,1656,10732],"large-op",[973,10734,10736,10739],{"style":10735},"top:-4.3em;margin-left:0em;",[973,10737],{"className":10738,"style":10705},[1683],[973,10740,10742],{"className":10741},[1688,1689,1690,1691],[973,10743,10745],{"className":10744},[1444,1691],[973,10746,2227],{"className":10747},[1444,1448,1691],[973,10749,1724],{"className":10750},[1723],[973,10752,10754],{"className":10753},[1671],[973,10755,10758],{"className":10756,"style":10757},[1675],"height:1.2777em;",[973,10759],{},[973,10761],{"className":10762,"style":1737},[1456],[973,10764,10766,10932],{"className":10765},[2799],[973,10767,10769,10772,10775,10778,10877,10880,10883,10886,10889,10929],{"className":10768},[2799],[973,10770,1403],{"className":10771,"style":2804},[1477,2803],[973,10773,10459],{"className":10774},[1652],[973,10776,1403],{"className":10777},[1477],[973,10779,10781,10824],{"className":10780},[1444],[973,10782,10784],{"className":10783},[1444,3348],[973,10785,10787,10816],{"className":10786},[1666,1667],[973,10788,10790,10813],{"className":10789},[1671],[973,10791,10793,10801],{"className":10792,"style":3358},[1675],[973,10794,10795,10798],{"style":3361},[973,10796],{"className":10797,"style":2534},[1683],[973,10799,10470],{"className":10800,"style":1784},[1444,1448],[973,10802,10803,10806],{"style":3361},[973,10804],{"className":10805,"style":2534},[1683],[973,10807,10810],{"className":10808,"style":10809},[3376],"left:-0.1944em;",[973,10811,3266],{"className":10812},[1444],[973,10814,1724],{"className":10815},[1723],[973,10817,10819],{"className":10818},[1671],[973,10820,10822],{"className":10821,"style":4774},[1675],[973,10823],{},[973,10825,10827],{"className":10826},[1662],[973,10828,10830,10869],{"className":10829},[1666,1667],[973,10831,10833,10866],{"className":10832},[1671],[973,10834,10836],{"className":10835,"style":10538},[1675],[973,10837,10839,10842],{"style":10838},"top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;",[973,10840],{"className":10841,"style":1684},[1683],[973,10843,10845],{"className":10844},[1688,1689,1690,1691],[973,10846,10848,10860,10863],{"className":10847},[1444,1691],[973,10849,10851,10854,10857],{"className":10850},[1652,1691],[973,10852,994],{"className":10853},[1691],[973,10855,4023],{"className":10856},[1691],[973,10858,4028],{"className":10859,"style":4027},[1691],[973,10861,3293],{"className":10862},[3589,1691],[973,10864,10444],{"className":10865},[1444,1448,1691],[973,10867,1724],{"className":10868},[1723],[973,10870,10872],{"className":10871},[1671],[973,10873,10875],{"className":10874,"style":1778},[1675],[973,10876],{},[973,10878,1107],{"className":10879},[1484],[973,10881],{"className":10882,"style":1488},[1456],[973,10884,1417],{"className":10885},[1492],[973,10887],{"className":10888,"style":1488},[1456],[973,10890,10892,10895],{"className":10891},[1444],[973,10893,10470],{"className":10894,"style":1784},[1444,1448],[973,10896,10898],{"className":10897},[1662],[973,10899,10901,10921],{"className":10900},[1666,1667],[973,10902,10904,10918],{"className":10903},[1671],[973,10905,10907],{"className":10906,"style":1756},[1675],[973,10908,10909,10912],{"style":10838},[973,10910],{"className":10911,"style":1684},[1683],[973,10913,10915],{"className":10914},[1688,1689,1690,1691],[973,10916,10444],{"className":10917},[1444,1448,1691],[973,10919,1724],{"className":10920},[1723],[973,10922,10924],{"className":10923},[1671],[973,10925,10927],{"className":10926,"style":2049},[1675],[973,10928],{},[973,10930,1107],{"className":10931,"style":2804},[1484,2803],[973,10933,10935],{"className":10934},[1662],[973,10936,10938],{"className":10937},[1666],[973,10939,10941],{"className":10940},[1671],[973,10942,10945],{"className":10943,"style":10944},[1675],"height:0.954em;",[973,10946,10947,10950],{"style":1707},[973,10948],{"className":10949,"style":1684},[1683],[973,10951,10953],{"className":10952},[1688,1689,1690,1691],[973,10954,2239],{"className":10955},[1444,1691],[973,10957,10959,10962],{"style":10958},"top:-3.8391em;",[973,10960],{"className":10961,"style":10611},[1683],[973,10963,10966],{"className":10964,"style":10965},[2594],"min-width:0.742em;height:3.1968em;",[2597,10967,10970],{"xmlns":2599,"width":2600,"height":10968,"viewBox":10969,"preserveAspectRatio":2603},"3.1968em","0 0 400000 3196",[2605,10971],{"d":10972},"M702 80H40000040\nH742v3062l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 80H400000v40H742z",[973,10974,1724],{"className":10975},[1723],[973,10977,10979],{"className":10978},[1671],[973,10980,10982],{"className":10981,"style":10757},[1675],[973,10983],{},[16,10985,10986],{},"Models trained on log-transformed target for variance stabilization.",[263,10988],{},[30,10990,10992],{"id":10991},"key-concepts","Key Concepts",[57,10994,10996],{"id":10995},"financial-theories-applied","Financial Theories Applied",[958,10998,10999,11005,11011,11017,11023],{},[65,11000,11001,11004],{},[25,11002,11003],{},"Volatility Clustering"," – Past volatility predicts future volatility",[65,11006,11007,11010],{},[25,11008,11009],{},"Variance Risk Premium"," – Spread between implied and realized volatility",[65,11012,11013,11016],{},[25,11014,11015],{},"Fear Gauge"," – Put-call ratio as sentiment indicator",[65,11018,11019,11022],{},[25,11020,11021],{},"Mean Reversion"," – Volatility tends to return to long-term average",[65,11024,11025,11028],{},[25,11026,11027],{},"Liquidity Premium"," – Illiquid assets command higher volatility",[57,11030,11032],{"id":11031},"statistical-methods","Statistical Methods",[62,11034,11035,11038,11041,11044],{},[65,11036,11037],{},"Panel data modeling with fixed and random effects",[65,11039,11040],{},"Principal Component Analysis (PCA)",[65,11042,11043],{},"Bayesian hyperparameter optimization",[65,11045,11046],{},"SHAP values for model interpretability",[263,11048],{},[30,11050,1285],{"id":1284},[16,11052,11053],{},[25,11054,11055],{},"Team:",[62,11057,11058,11060,11063,11065],{},[65,11059,1292],{},[65,11061,11062],{},"Camille LEGRAND",[65,11064,1297],{},[65,11066,6495],{},[16,11068,11069,11072,11073,11076],{},[25,11070,11071],{},"Course:"," Classification and Regression (M2)\n",[25,11074,11075],{},"Academic Year:"," 2025-2026",[263,11078],{},[30,11080,11082],{"id":11081},"notes","Notes",[62,11084,11085,11091,11101],{},[65,11086,11087,11090],{},[25,11088,11089],{},"Computational Constraints:"," Some models (Random Forest, MLP) failed due to hardware limitations (16GB RAM, CPU-only)",[65,11092,11093,11096,11097,11100],{},[25,11094,11095],{},"Reproducibility:"," Set ",[549,11098,11099],{},"seed = 2025"," for consistent results",[65,11102,11103,11106],{},[25,11104,11105],{},"Language:"," Analysis documented in English, course materials in French",[263,11108],{},[30,11110,11112],{"id":11111},"references","References",[16,11114,11115],{},"Key R packages used:",[62,11117,11118,11124,11130,11140,11149,11155],{},[65,11119,11120,11123],{},[549,11121,11122],{},"tidymodels"," – Modern modeling framework",[65,11125,11126,11129],{},[549,11127,11128],{},"glmnet"," – Regularized regression",[65,11131,11132,11135,11136,11139],{},[549,11133,11134],{},"lme4"," \u002F ",[549,11137,11138],{},"lmerTest"," – Mixed-effects models",[65,11141,11142,11135,11145,11148],{},[549,11143,11144],{},"xgboost",[549,11146,11147],{},"lightgbm"," – Gradient boosting",[65,11150,11151,11154],{},[549,11152,11153],{},"shapviz"," – Model interpretability",[65,11156,11157,11160],{},[549,11158,11159],{},"rBayesianOptimization"," – Hyperparameter tuning",[1309,11162,11163],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":269,"searchDepth":270,"depth":270,"links":11165},[11166,11171,11175,11181,11185,11186,11191,11196,11200,11201,11202],{"id":871,"depth":270,"text":872,"children":11167},[11168,11169,11170],{"id":9527,"depth":276,"text":9528},{"id":9554,"depth":276,"text":9555},{"id":9624,"depth":276,"text":9625},{"id":9709,"depth":270,"text":9710,"children":11172},[11173,11174],{"id":9713,"depth":276,"text":9714},{"id":9723,"depth":276,"text":9724},{"id":9852,"depth":270,"text":9853,"children":11176},[11177,11178,11179,11180],{"id":9856,"depth":276,"text":654},{"id":9940,"depth":276,"text":9941},{"id":10021,"depth":276,"text":10022},{"id":10094,"depth":276,"text":4172},{"id":10125,"depth":270,"text":10126,"children":11182},[11183,11184],{"id":10129,"depth":276,"text":10130},{"id":10139,"depth":276,"text":10140},{"id":10194,"depth":270,"text":10195},{"id":10206,"depth":270,"text":10207,"children":11187},[11188,11189,11190],{"id":943,"depth":276,"text":944},{"id":955,"depth":276,"text":956},{"id":10276,"depth":276,"text":10277},{"id":10328,"depth":270,"text":10329,"children":11192},[11193,11194,11195],{"id":10332,"depth":276,"text":10333},{"id":10353,"depth":276,"text":10354},{"id":10377,"depth":276,"text":10378},{"id":10991,"depth":270,"text":10992,"children":11197},[11198,11199],{"id":10995,"depth":276,"text":10996},{"id":11031,"depth":276,"text":11032},{"id":1284,"depth":270,"text":1285},{"id":11081,"depth":270,"text":11082},{"id":11111,"depth":270,"text":11112},"2026-02-28","Predicting implied volatility using advanced regression techniques and machine learning models on financial options data.","implied-volatility-prediction-from-options-data","projects\u002Fglm-implied-volatility",[515,11208,11209,659,11210],"GLM","Finance","Statistical Modeling","Z6_hgFLNoqJCVeg2zz8soCcHNAAM65FPhLTOhL2Sdtc",{"id":11213,"title":11214,"description":11215,"extension":8,"favorite":853,"icon":11216,"meta":11217,"publishedAt":11424,"readingTime":7482,"shortDescription":11425,"slug":11426,"status":1331,"stem":11427,"tags":11428,"type":847,"__hash__":11434},"projects\u002Fprojects\u002Fclimate-issues.md","Wind Risk Modeling - The 1999 Martin Storm","An advanced study on wind risk modeling and meteorological hazard assessment, focusing on the historical Martin Storm of December 1999. Combines data analysis, statistical modeling, and GIS mapping to quantify natural disaster impacts.","i-ph-wind-duotone",{"body":11218},{"type":13,"value":11219,"toc":11412},[11220,11222,11233,11237,11240,11272,11274,11278,11292,11296,11328,11332,11346,11348,11351,11368,11372,11375,11407,11409],[30,11221,1348],{"id":1347},[16,11223,11224,11225,11228,11229,11232],{},"This project is a detailed study of ",[25,11226,11227],{},"wind risk assessment and modeling"," in the context of natural disasters, using the ",[25,11230,11231],{},"December 1999 Martin Storm"," as a case study. The analysis combines statistical methods, meteorological data, and spatial analysis techniques to understand and quantify the impacts of extreme wind events.",[30,11234,11236],{"id":11235},"objectives","Objectives",[16,11238,11239],{},"The primary objectives of this research were:",[958,11241,11242,11248,11254,11260,11266],{},[65,11243,11244,11247],{},[25,11245,11246],{},"Characterize extreme meteorological events"," and their propagation patterns",[65,11249,11250,11253],{},[25,11251,11252],{},"Model wind risk"," using statistical and probabilistic approaches",[65,11255,11256,11259],{},[25,11257,11258],{},"Assess spatial distribution"," of hazards using GIS mapping techniques",[65,11261,11262,11265],{},[25,11263,11264],{},"Quantify economic and environmental impacts"," of the storm",[65,11267,11268,11271],{},[25,11269,11270],{},"Develop predictive models"," for future risk assessment and disaster preparedness",[30,11273,9710],{"id":9709},[57,11275,11277],{"id":11276},"data-sources","Data Sources",[62,11279,11280,11283,11286,11289],{},[65,11281,11282],{},"Historical meteorological records from the 1999 Martin Storm",[65,11284,11285],{},"Wind speed measurements from weather stations across France",[65,11287,11288],{},"Satellite imagery and atmospheric pressure data",[65,11290,11291],{},"Damage assessments and economic loss records",[57,11293,11295],{"id":11294},"analytical-techniques","Analytical Techniques",[62,11297,11298,11304,11310,11316,11322],{},[65,11299,11300,11303],{},[25,11301,11302],{},"Time-series analysis"," of wind speed and atmospheric pressure",[65,11305,11306,11309],{},[25,11307,11308],{},"Spatial interpolation"," using kriging and other geostatistical methods",[65,11311,11312,11315],{},[25,11313,11314],{},"Probability distribution fitting"," (Weibull, Gumbel, and Log-Normal distributions)",[65,11317,11318,11321],{},[25,11319,11320],{},"Return period estimation"," for extreme wind events",[65,11323,11324,11327],{},[25,11325,11326],{},"Geographic Information Systems (GIS)"," for hazard mapping and visualization",[57,11329,11331],{"id":11330},"statistical-models","Statistical Models",[62,11333,11334,11337,11340,11343],{},[65,11335,11336],{},"Extreme Value Theory (EVT) for tail risk analysis",[65,11338,11339],{},"Generalized Extreme Value (GEV) distributions",[65,11341,11342],{},"Peak-over-threshold (POT) methods",[65,11344,11345],{},"Spatial correlation analysis",[30,11347,10140],{"id":10139},[16,11349,11350],{},"The analysis revealed:",[62,11352,11353,11356,11359,11362,11365],{},[65,11354,11355],{},"Wind speeds exceeding 100 km\u002Fh across multiple regions",[65,11357,11358],{},"Non-uniform spatial distribution of damage intensity",[65,11360,11361],{},"Correlation patterns between meteorological variables and structural damage",[65,11363,11364],{},"Seasonal and geographical risk variations",[65,11366,11367],{},"Return period estimations for comparable extreme events",[30,11369,11371],{"id":11370},"applications","Applications",[16,11373,11374],{},"The methodologies developed in this project have applications in:",[62,11376,11377,11383,11389,11395,11401],{},[65,11378,11379,11382],{},[25,11380,11381],{},"Disaster risk reduction and preparedness"," planning",[65,11384,11385,11388],{},[25,11386,11387],{},"Insurance and risk assessment"," for natural hazards",[65,11390,11391,11394],{},[25,11392,11393],{},"Urban planning"," and infrastructure resilience",[65,11396,11397,11400],{},[25,11398,11399],{},"Climate adaptation"," strategies",[65,11402,11403,11406],{},[25,11404,11405],{},"Early warning systems"," for extreme weather events",[30,11408,4150],{"id":4149},[4152,11410],{"src":11411,"width":4155,"height":4156},"\u002Fprojects\u002Fclimate-issues.pdf",{"title":269,"searchDepth":270,"depth":270,"links":11413},[11414,11415,11416,11421,11422,11423],{"id":1347,"depth":270,"text":1348},{"id":11235,"depth":270,"text":11236},{"id":9709,"depth":270,"text":9710,"children":11417},[11418,11419,11420],{"id":11276,"depth":276,"text":11277},{"id":11294,"depth":276,"text":11295},{"id":11330,"depth":276,"text":11331},{"id":10139,"depth":270,"text":10140},{"id":11370,"depth":270,"text":11371},{"id":4149,"depth":270,"text":4150},"2026-02-17","A comprehensive analysis of wind risk modeling during the 1999 Martin Storm using statistical methods and spatial analysis.","climate-issues","projects\u002Fclimate-issues",[11429,11430,603,11431,11432,11433],"Meteorology","Risk Assessment","Climate Science","GIS","Statistics","zkvqmXh1yy3x20wxWxfabb7Hmdbm-8D44FRieP-4sRM",{"id":11436,"title":11437,"description":11438,"extension":8,"favorite":853,"icon":11439,"meta":11440,"publishedAt":11635,"readingTime":839,"shortDescription":11636,"slug":11637,"status":1331,"stem":11638,"tags":11639,"type":847,"__hash__":11642},"projects\u002Fprojects\u002Fdataviz-tuberculose.md","Monitoring & Segmentation of Tuberculosis Cases","An interactive data visualization project built with R, R Shiny, and ggplot2 for creating dynamic, explorable visualizations.","i-ph-chart-bar-duotone",{"body":11441},{"type":13,"value":11442,"toc":11625},[11443,11446,11467,11469,11472,11489,11491,11511,11513,11519,11523,11564,11566,11592,11594,11597,11601,11604,11608,11616,11623],[16,11444,11445],{},"Interactive Shiny dashboard for WHO tuberculosis data analysis and clustering.",[62,11447,11448,11457],{},[65,11449,11450,4393,11452],{},[25,11451,4392],{},[19,11453,11456],{"href":11454,"rel":11455},"https:\u002F\u002Fgithub.com\u002FArthurDanjou\u002FTuberculose-Visualisation",[23],"Tuberculose-Visualisation",[65,11458,11459,4393,11462],{},[25,11460,11461],{},"Live Application:",[19,11463,11466],{"href":11464,"rel":11465},"https:\u002F\u002Fgo.arthurdanjou.fr\u002Fdatavis-app",[23],"Tuberculose Data Visualization",[30,11468,1348],{"id":1347},[16,11470,11471],{},"This project provides an interactive visualization tool for monitoring and segmenting global tuberculosis data from the World Health Organization (WHO). It applies multivariate analysis to reveal operational typologies of global health risks.",[16,11473,11474,11477,11478,11480,11483,11484,11486,11488],{},[25,11475,11476],{},"Author:"," Arthur Danjou",[864,11479],{},[25,11481,11482],{},"Program:"," M2 ISF - Dauphine PSL",[864,11485],{},[25,11487,11071],{}," Data Visualisation (2025-2026)",[30,11490,6649],{"id":6648},[62,11492,11493,11496,11499,11502,11505,11508],{},[65,11494,11495],{},"Interactive world map with cluster visualization",[65,11497,11498],{},"K-means clustering for country segmentation (Low\u002FModerate\u002FCritical Impact)",[65,11500,11501],{},"Time series analysis with year selector (animated)",[65,11503,11504],{},"Region filtering by WHO regions",[65,11506,11507],{},"Key Performance Indicators (KPIs) dashboard",[65,11509,11510],{},"Raw data exploration with data tables",[30,11512,6310],{"id":6309},[933,11514,11517],{"className":11515,"code":11516,"language":938},[936],"├── app.R                    # Shiny application\n├── NoticeTechnique.Rmd      # Technical report (R Markdown)\n├── NoticeTechnique.pdf      # Compiled technical report\n├── data\u002F\n│   ├── TB_analysis_ready.RData          # Processed data with clusters\n│   └── TB_burden_countries_2025-12-09.csv # Raw WHO data\n└── renv\u002F                    # R package management\n",[549,11518,11516],{"__ignoreMap":269},[30,11520,11522],{"id":11521},"requirements","Requirements",[62,11524,11525,11528],{},[65,11526,11527],{},"R (>= 4.0.0)",[65,11529,11530,11531,11534,11535],{},"R packages (see ",[549,11532,11533],{},"renv.lock","):\n",[62,11536,11537,11540,11543,11546,11549,11552,11555,11558,11561],{},[65,11538,11539],{},"shiny",[65,11541,11542],{},"shinydashboard",[65,11544,11545],{},"leaflet",[65,11547,11548],{},"plotly",[65,11550,11551],{},"dplyr",[65,11553,11554],{},"sf",[65,11556,11557],{},"RColorBrewer",[65,11559,11560],{},"DT",[65,11562,11563],{},"rnaturalearth",[30,11565,956],{"id":955},[958,11567,11568,11571,11574,11580],{},[65,11569,11570],{},"Clone this repository",[65,11572,11573],{},"Open R\u002FRStudio in the project directory",[65,11575,11576,11577],{},"Restore packages with ",[549,11578,11579],{},"renv::restore()",[65,11581,11582,11583],{},"Run the application:\n",[933,11584,11586],{"className":10227,"code":11585,"language":4498,"meta":269,"style":269},"shiny::runApp(\"app.R\")\n",[549,11587,11588],{"__ignoreMap":269},[973,11589,11590],{"class":975,"line":839},[973,11591,11585],{},[30,11593,4150],{"id":4149},[4152,11595],{"src":11596,"width":4155,"height":4156},"\u002Fprojects\u002Fdatavis.pdf",[30,11598,11600],{"id":11599},"license","License",[16,11602,11603],{},"© 2026 Arthur Danjou. All rights reserved.",[30,11605,11607],{"id":11606},"resources","Resources",[16,11609,11610,11611],{},"You can find the code here: ",[19,11612,11615],{"href":11613,"rel":11614},"https:\u002F\u002Fgo.arthurdanjou.fr\u002Fdatavis-code",[23],"Data Visualisation Code",[16,11617,11618,11619],{},"And the online application here: ",[19,11620,11622],{"href":11464,"rel":11621},[23],"Data Visualisation App",[1309,11624,11163],{},{"title":269,"searchDepth":270,"depth":270,"links":11626},[11627,11628,11629,11630,11631,11632,11633,11634],{"id":1347,"depth":270,"text":1348},{"id":6648,"depth":270,"text":6649},{"id":6309,"depth":270,"text":6310},{"id":11521,"depth":270,"text":11522},{"id":955,"depth":270,"text":956},{"id":4149,"depth":270,"text":4150},{"id":11599,"depth":270,"text":11600},{"id":11606,"depth":270,"text":11607},"2026-01-05","An interactive data visualization project using R and R Shiny.","dataviz-tuberculose","projects\u002Fdataviz-tuberculose",[515,11640,11641,822],"R Shiny","Data Visualization","o7-u9WQTBh6OY_ZMn7adkYhgAjxB3q-SiprpEeD-_4o",{"id":11644,"title":11645,"description":11646,"extension":8,"favorite":853,"icon":11647,"meta":11648,"publishedAt":11807,"readingTime":4167,"shortDescription":11808,"slug":11809,"status":1331,"stem":11810,"tags":11811,"type":9484,"__hash__":11814},"projects\u002Fprojects\u002Fhackathon-cnd.md","CND Hackathon: Defense-Grade Log Intelligence","A high-stakes cybersecurity challenge organized by the French Ministry of Defense (CND). Representing Université Paris-Dauphine, our team spent 3 days in a high-security military fortress developing ML models to detect stealthy cyber threats in firewall logs.","i-ph-shield-check-duotone",{"body":11649},{"type":13,"value":11650,"toc":11798},[11651,11655,11666,11677,11681,11684,11688,11691,11705,11709,11716,11734,11742,11746,11752,11766,11768,11793,11795],[30,11652,11654],{"id":11653},"the-setting-fort-de-mont-valérien","The Setting: Fort de Mont-Valérien",[16,11656,11657,11658,11661,11662,11665],{},"This was not a typical university hackathon. Organized by the ",[25,11659,11660],{},"Commissariat au Numerique de Defense (CND)",", the event took place over three intense days within the walls of the ",[25,11663,11664],{},"Fort de Mont-Valerien",", a highly secured military fortress.",[16,11667,11668,11669,11672,11673,11676],{},"Working in this environment underscored the real-world stakes of the mission. Our ",[25,11670,11671],{},"team of six",", representing ",[25,11674,11675],{},"Universite Paris-Dauphine",", competed against several elite engineering schools to solve critical defense-related data challenges.",[30,11678,11680],{"id":11679},"the-mission-classifying-the-invisible","The Mission: Classifying the Invisible",[16,11682,11683],{},"The core task involved processing poorly labeled and noisy firewall logs. In a defense context, a \"missing\" log or a mislabeled entry can be the difference between a minor system bug and a coordinated intrusion.",[57,11685,11687],{"id":11686},"_1-tactical-log-translation","1. Tactical Log Translation",[16,11689,11690],{},"Firewall logs are often cryptic and inconsistent. We developed a preprocessing pipeline to:",[62,11692,11693,11699],{},[65,11694,11695,11698],{},[25,11696,11697],{},"Feature Extraction:"," Parse raw logs into structured data (headers, flags, payloads).",[65,11700,11701,11704],{},[25,11702,11703],{},"Contextual Labeling:"," Distinguish between routine system \"bugs\" (non-malicious failures) and actual \"attacks\" (malicious intent).",[57,11706,11708],{"id":11707},"_2-strategic-goal-recalling-the-threat","2. Strategic Goal: Recalling the Threat",[16,11710,11711,11712,11715],{},"In military cybersecurity, the cost of a ",[25,11713,11714],{},"False Negative"," (an undetected attack) is catastrophic.",[62,11717,11718,11728],{},[65,11719,11720,11723,11724,11727],{},[25,11721,11722],{},"Model Priority:"," We optimized our classifiers specifically for ",[25,11725,11726],{},"Recall",". We would rather investigate a few system bugs (False Positives) than let a single attack slip through the net.",[65,11729,11730,11733],{},[25,11731,11732],{},"Techniques:"," We used ensemble methods (XGBoost\u002FRandom Forest) combined with advanced resampling to handle the heavy class imbalance typical of network traffic.",[9495,11735,11736],{},[16,11737,11738,11741],{},[25,11739,11740],{},"Key Achievement:"," Our model significantly reduced the rate of undetected threats compared to the baseline configurations provided at the start of the challenge.",[30,11743,11745],{"id":11744},"deployment-interaction","Deployment & Interaction",[16,11747,11748,11749,6811],{},"To make our findings operational, we built a ",[25,11750,11751],{},"Streamlit-based command center",[62,11753,11754,11760],{},[65,11755,11756,11759],{},[25,11757,11758],{},"On-the-Fly Analysis:"," Security officers can paste a single log line to get an immediate \"Bug vs. Attack\" probability score.",[65,11761,11762,11765],{},[25,11763,11764],{},"Bulk Audit:"," The interface supports CSV uploads, allowing for the rapid analysis of entire daily log batches to highlight high-risk anomalies.",[30,11767,6691],{"id":6690},[62,11769,11770,11775,11781,11787],{},[65,11771,11772,11774],{},[25,11773,11105],{}," Python",[65,11776,11777,11780],{},[25,11778,11779],{},"ML Library:"," Scikit-learn, XGBoost",[65,11782,11783,11786],{},[25,11784,11785],{},"Deployment:"," Streamlit",[65,11788,11789,11792],{},[25,11790,11791],{},"Environment:"," High-security on-site military infrastructure",[263,11794],{},[16,11796,11797],{},"Representing Dauphine in such a specialized environment was a highlight of my academic year. I can share more details on the feature engineering techniques we used to clean the raw military logs.",{"title":269,"searchDepth":270,"depth":270,"links":11799},[11800,11801,11805,11806],{"id":11653,"depth":270,"text":11654},{"id":11679,"depth":270,"text":11680,"children":11802},[11803,11804],{"id":11686,"depth":276,"text":11687},{"id":11707,"depth":276,"text":11708},{"id":11744,"depth":270,"text":11745},{"id":6690,"depth":270,"text":6691},"2025-10-28","Cybersecurity threat detection within a high-security military environment.","hackathon-cnd","projects\u002Fhackathon-cnd",[511,11812,11813,659,742],"Streamlit","Cybersecurity","lCaqM02oVnhENsgSMAtJg6N-vzsXcO-vNLYGU1ZZl0g",{"id":11816,"title":11817,"description":11818,"extension":8,"favorite":853,"icon":11819,"meta":11820,"publishedAt":11895,"readingTime":270,"shortDescription":11896,"slug":11897,"status":1331,"stem":11898,"tags":11899,"type":11903,"__hash__":11904},"projects\u002Fprojects\u002Fsevetys.md","Data Engineer Internship at Sevetys","Summary of my internship as a Data Engineer at Sevetys, focusing on data quality, cleaning, standardization, and comprehensive data quality metrics.","i-ph-dog-duotone",{"body":11821},{"type":13,"value":11822,"toc":11891},[11823,11833,11836,11840,11843,11846,11850],[16,11824,11825,11832],{},[19,11826,11829],{"href":11827,"rel":11828},"https:\u002F\u002Fsevetys.fr",[23],[25,11830,11831],{},"Sevetys"," is a leading French network of over 200 veterinary clinics, employing more than 1,300 professionals. Founded in 2017, the group provides comprehensive veterinary care for companion animals, exotic pets, and livestock, with services ranging from preventive medicine and surgery to cardiology, dermatology, and 24\u002F7 emergency care.",[16,11834,11835],{},"Committed to digital innovation, Sevetys leverages centralized data systems to optimize clinic operations, improve patient data management, and enhance the overall client experience. This combination of medical excellence and operational efficiency supports veterinarians in delivering high-quality care nationwide.",[30,11837,11839],{"id":11838},"internship-objectives","Internship Objectives",[16,11841,11842],{},"During my two-month internship as a Data Engineer, I focused primarily on cleaning and standardizing customer and patient data, a critical task because this data is extensively used by clinics, Marketing, and Performance teams. Ensuring data quality was essential to the company's operations.",[16,11844,11845],{},"Additionally, I revised and enhanced an existing data quality report designed to evaluate the effectiveness of my cleaning processes. The report covered 47 detailed metrics assessing data completeness and consistency, providing valuable insights that helped maintain high standards across the organization.",[30,11847,11849],{"id":11848},"technology-stack","Technology Stack",[62,11851,11852,11862,11872,11881],{},[65,11853,11854,11861],{},[25,11855,11856],{},[19,11857,11860],{"href":11858,"rel":11859},"https:\u002F\u002Fazure.microsoft.com\u002F",[23],"Microsoft Azure Cloud",": Cloud infrastructure platform",[65,11863,11864,11871],{},[25,11865,11866],{},[19,11867,11870],{"href":11868,"rel":11869},"https:\u002F\u002Fspark.apache.org\u002Fdocs\u002Flatest\u002Fapi\u002Fpython\u002F",[23],"PySpark",": Distributed data processing framework",[65,11873,11874,11880],{},[25,11875,11876],{},[19,11877,511],{"href":11878,"rel":11879},"https:\u002F\u002Fwww.python.org\u002F",[23],": Primary programming language",[65,11882,11883,11890],{},[25,11884,11885],{},[19,11886,11889],{"href":11887,"rel":11888},"https:\u002F\u002Fgitlab.com",[23],"GitLab",": Version control and CI\u002FCD platform",{"title":269,"searchDepth":270,"depth":270,"links":11892},[11893,11894],{"id":11838,"depth":270,"text":11839},{"id":11848,"depth":270,"text":11849},"2025-07-31","A summary of my Data Engineer internship at Sevetys, focusing on data quality and cleaning processes.","sevetys","projects\u002Fsevetys",[511,11870,11900,11901,11902],"Data Engineering","Azure","Big Data","Internship Project","hg51xbDfaJGOXpjnHJ89_yaAYi6r6TNv3uy3E1cCKb8",{"id":11906,"title":11907,"description":11908,"extension":8,"favorite":853,"icon":11909,"meta":11910,"publishedAt":11988,"readingTime":270,"shortDescription":11989,"slug":11990,"status":1331,"stem":11991,"tags":11992,"type":847,"__hash__":11995},"projects\u002Fprojects\u002Fsl-breast-cancer.md","Breast Cancer Detection","Prediction of breast cancer presence by comparing several supervised classification models using machine learning techniques.","i-ph-heart-half-duotone",{"body":11911},{"type":13,"value":11912,"toc":11982},[11913,11919,11923,11926,11929,11941,11944,11946,11949,11963,11966,11969,11971,11977,11979],[16,11914,11915,11916,11918],{},"This project was carried out as part of the ",[25,11917,633],{}," course at Paris-Dauphine PSL University. The objective is to identify the most effective model for predicting or explaining the presence of breast cancer based on a set of biological and clinical features.",[30,11920,11922],{"id":11921},"project-objectives","Project Objectives",[16,11924,11925],{},"Develop and evaluate several supervised classification models to predict the presence of breast cancer based on biological features extracted from the Breast Cancer Coimbra dataset, provided by the UCI Machine Learning Repository.",[16,11927,11928],{},"The dataset contains 116 observations divided into two classes:",[62,11930,11931,11936],{},[65,11932,11933,11935],{},[25,11934,1577],{},": healthy individuals (controls)",[65,11937,11938,11940],{},[25,11939,2239],{},": patients diagnosed with breast cancer",[16,11942,11943],{},"There are 9 explanatory variables, including clinical measurements such as age, insulin levels, leptin, insulin resistance, among others.",[30,11945,9710],{"id":9709},[16,11947,11948],{},"The project follows a comparative approach between several algorithms:",[62,11950,11951,11954,11957,11960],{},[65,11952,11953],{},"Logistic Regression",[65,11955,11956],{},"k-Nearest Neighbors (k-NN)",[65,11958,11959],{},"Naive Bayes",[65,11961,11962],{},"Artificial Neural Network (MLP with a 16-8-1 architecture)",[16,11964,11965],{},"Model evaluation is primarily based on the F1-score, which is more suitable in a medical context where identifying positive cases is crucial. Particular attention was paid to stratified cross-validation and to handling class imbalance, notably through the use of class weights and regularization techniques (L2, early stopping).",[16,11967,11968],{},"This project illustrates a concrete application of data science techniques to a public health issue, while implementing a rigorous methodology for supervised modeling.",[30,11970,11607],{"id":11606},[16,11972,11610,11973],{},[19,11974,11907],{"href":11975,"rel":11976},"https:\u002F\u002Fgo.arthurdanjou.fr\u002Fbreast-cancer-detection-code",[23],[30,11978,4150],{"id":4149},[4152,11980],{"src":11981,"width":4155,"height":4156},"\u002Fprojects\u002Fbreast-cancer.pdf",{"title":269,"searchDepth":270,"depth":270,"links":11983},[11984,11985,11986,11987],{"id":11921,"depth":270,"text":11922},{"id":9709,"depth":270,"text":9710},{"id":11606,"depth":270,"text":11607},{"id":4149,"depth":270,"text":4150},"2025-06-06","A project comparing supervised classification models to predict breast cancer presence using machine learning.","sl-breast-cancer","projects\u002Fsl-breast-cancer",[511,659,11993,11994],"Classification","Healthcare","ohZ83q-_Fb1MHeKzsDev4S2DITEIQ8lxLeNrSxzU-cc",{"id":11997,"title":11998,"description":11999,"extension":8,"favorite":853,"icon":12000,"meta":12001,"publishedAt":12103,"readingTime":839,"shortDescription":12104,"slug":12105,"status":1331,"stem":12106,"tags":12107,"type":847,"__hash__":12108},"projects\u002Fprojects\u002Fglm-bikes.md","Generalized Linear Models for Bikes Prediction","Predicting the number of bikes rented in a bike-sharing system using Generalized Linear Models and various statistical techniques.","i-ph-bicycle-duotone",{"body":12002},{"type":13,"value":12003,"toc":12096},[12004,12011,12013,12027,12029,12032,12063,12065,12068,12082,12084,12091,12093],[16,12005,12006,12007,12010],{},"This project was completed as part of the ",[25,12008,12009],{},"Generalized Linear Models"," course at Paris-Dauphine PSL University. The objective was to develop and compare statistical models that predict bicycle rentals in a bike-sharing system using environmental and temporal features.",[30,12012,11922],{"id":11921},[62,12014,12015,12018,12021,12024],{},[65,12016,12017],{},"Determine the best predictive model for bicycle rental counts",[65,12019,12020],{},"Analyze the impact of key features (temperature, humidity, wind speed, seasonality, etc.)",[65,12022,12023],{},"Apply and evaluate different generalized linear modeling techniques",[65,12025,12026],{},"Validate model assumptions and performance metrics",[30,12028,9710],{"id":9709},[16,12030,12031],{},"The study uses a rigorous statistical workflow, including:",[62,12033,12034,12040,12045,12051,12057],{},[65,12035,12036,12039],{},[25,12037,12038],{},"Exploratory Data Analysis (EDA)"," - Understanding feature distributions and relationships",[65,12041,12042,12044],{},[25,12043,10130],{}," - Testing multiple GLM families (Poisson, Negative Binomial, Gaussian)",[65,12046,12047,12050],{},[25,12048,12049],{},"Feature Selection"," - Identifying the most influential variables",[65,12052,12053,12056],{},[25,12054,12055],{},"Model Diagnostics"," - Validating assumptions and checking residuals",[65,12058,12059,12062],{},[25,12060,12061],{},"Cross-validation"," - Ensuring robust performance estimates",[30,12064,10140],{"id":10139},[16,12066,12067],{},"The analysis identified critical factors influencing bike-sharing demand:",[62,12069,12070,12073,12076,12079],{},[65,12071,12072],{},"Seasonal patterns and weather conditions",[65,12074,12075],{},"Temperature and humidity effects",[65,12077,12078],{},"Holiday and working day distinctions",[65,12080,12081],{},"Time-based trends and cyclical patterns",[30,12083,11607],{"id":11606},[16,12085,11610,12086],{},[19,12087,12090],{"href":12088,"rel":12089},"https:\u002F\u002Fgo.arthurdanjou.fr\u002Fglm-bikes-code",[23],"GLM Bikes Code",[30,12092,4150],{"id":4149},[4152,12094],{"src":12095,"width":4155,"height":4156},"\u002Fprojects\u002Fbikes-glm.pdf",{"title":269,"searchDepth":270,"depth":270,"links":12097},[12098,12099,12100,12101,12102],{"id":11921,"depth":270,"text":11922},{"id":9709,"depth":270,"text":9710},{"id":10139,"depth":270,"text":10140},{"id":11606,"depth":270,"text":11607},{"id":4149,"depth":270,"text":4150},"2025-01-24","A project applying Generalized Linear Models to predict bike rentals based on environmental and temporal features.","glm-bikes","projects\u002Fglm-bikes",[515,11433,11208,846],"hOkOrkH3oe-Xr2fNxKS6J0Kft7fdPAGHO7lisc5tL70",{"id":12110,"title":12111,"description":12112,"extension":8,"favorite":853,"icon":12113,"meta":12114,"publishedAt":12103,"readingTime":270,"shortDescription":12178,"slug":12179,"status":1331,"stem":12180,"tags":12181,"type":847,"__hash__":12183},"projects\u002Fprojects\u002Fml-loan.md","Machine Learning for Loan Prediction","Predicting loan approval and default risk using machine learning classification techniques.","i-ph-money-wavy-duotone",{"body":12115},{"type":13,"value":12116,"toc":12173},[12117,12120,12122,12136,12138,12141,12168,12170],[16,12118,12119],{},"This project focuses on building machine learning models to predict loan approval outcomes and assess default risk. The objective is to develop robust classification models that identify creditworthy applicants.",[30,12121,11922],{"id":11921},[62,12123,12124,12127,12130,12133],{},[65,12125,12126],{},"Build and compare multiple classification models for loan prediction",[65,12128,12129],{},"Identify key factors influencing loan approval decisions",[65,12131,12132],{},"Evaluate model performance using appropriate metrics",[65,12134,12135],{},"Optimize model parameters for better predictive accuracy",[30,12137,9710],{"id":9709},[16,12139,12140],{},"The study employs a range of machine learning approaches:",[62,12142,12143,12148,12153,12158,12163],{},[65,12144,12145,12147],{},[25,12146,12038],{}," - Understanding applicant characteristics and patterns",[65,12149,12150,12152],{},[25,12151,9724],{}," - Creating meaningful features from raw data",[65,12154,12155,12157],{},[25,12156,10130],{}," - Testing multiple algorithms (Logistic Regression, Random Forest, Gradient Boosting, etc.)",[65,12159,12160,12162],{},[25,12161,10354],{}," - Optimizing model performance",[65,12164,12165,12167],{},[25,12166,12061],{}," - Ensuring robust generalization",[30,12169,4150],{"id":4149},[4152,12171],{"src":12172,"width":4155,"height":4156},"\u002Fprojects\u002Floan-ml.pdf",{"title":269,"searchDepth":270,"depth":270,"links":12174},[12175,12176,12177],{"id":11921,"depth":270,"text":11922},{"id":9709,"depth":270,"text":9710},{"id":4149,"depth":270,"text":4150},"A project applying machine learning to predict loan approvals and assess default risk.","ml-loan","projects\u002Fml-loan",[511,659,12182,11209,845],"Regression","gqn-BwXm7Omr2k4ERhMfGoNHslnxQ6SIebJsJMf4OlQ",{"id":12185,"title":12186,"description":12187,"extension":8,"favorite":853,"icon":12188,"meta":12189,"publishedAt":12938,"readingTime":7499,"shortDescription":12939,"slug":12940,"status":1331,"stem":12941,"tags":12942,"type":4176,"__hash__":12944},"projects\u002Fprojects\u002Fdl-dropout-reduces-underfitting.md","Dropout Reduces Underfitting","TensorFlow\u002FKeras implementation and reproduction of \"Dropout Reduces Underfitting\" (Liu et al., 2023). A comparative study of Early and Late Dropout strategies to optimize model convergence.","i-ph-share-network-duotone",{"body":12190},{"type":13,"value":12191,"toc":12920},[12192,12203,12210,12224,12228,12231,12255,12257,12264,12268,12315,12317,12323,12325,12351,12354,12381,12383,12386,12390,12393,12463,12467,12470,12566,12570,12573,12752,12756,12759,12852,12856,12859,12867,12869,12872,12874,12911,12914,12917],[9495,12193,12194],{},[16,12195,12196,12199,12200,12202],{},[25,12197,12198],{},"Study and reproduction of the paper:"," Liu, Z., et al. (2023). ",[509,12201,12186],{},". arXiv:2303.01500.",[16,12204,12205,12206],{},"The paper is available at: ",[19,12207,12208],{"href":12208,"rel":12209},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2303.01500",[23],[16,12211,12212,12213,12216,12217,512,12220,12223],{},"This repository contains a robust, modular ",[25,12214,12215],{},"TensorFlow\u002FKeras"," implementation of ",[25,12218,12219],{},"Early Dropout",[25,12221,12222],{},"Late Dropout"," strategies. The goal is to verify the hypothesis that dropout, traditionally used to reduce overfitting, can also combat underfitting when applied only during the initial training phase.",[30,12225,12227],{"id":12226},"scientific-objectives","Scientific Objectives",[16,12229,12230],{},"The study aims to validate the operating regimes of Dropout described in the paper:",[958,12232,12233,12238,12243,12249],{},[65,12234,12235,12237],{},[25,12236,12219],{}," (Targeting Underfitting): Active only during the initial phase to reduce gradient variance and align their direction, enabling better final optimization.",[65,12239,12240,12242],{},[25,12241,12222],{}," (Targeting Overfitting): Disabled at the start to allow rapid learning, then activated to regularize final convergence.",[65,12244,12245,12248],{},[25,12246,12247],{},"Standard Dropout",": Constant rate throughout training (baseline).",[65,12250,12251,12254],{},[25,12252,12253],{},"No Dropout",": Control experiment without dropout.",[30,12256,4285],{"id":4284},[16,12258,12259,12260,12263],{},"Unlike naive Keras callback implementations, this project uses a ",[25,12261,12262],{},"dynamic approach via the TensorFlow graph"," to ensure the dropout rate updates on the GPU without model recompilation.",[57,12265,12267],{"id":12266},"key-components","Key Components",[62,12269,12270,12285,12307],{},[65,12271,12272,12277,12278,12281,12282,2195],{},[25,12273,12274],{},[549,12275,12276],{},"DynamicDropout",": A custom layer inheriting from ",[549,12279,12280],{},"keras.layers.Layer"," that reads its rate from a shared ",[549,12283,12284],{},"tf.Variable",[65,12286,12287,12292,12293,12296,12297,4211,12300,4211,12303,12306],{},[25,12288,12289],{},[549,12290,12291],{},"DropoutScheduler",": A Keras ",[549,12294,12295],{},"Callback"," that drives the rate variable based on the current epoch and the chosen strategy (",[549,12298,12299],{},"early",[549,12301,12302],{},"late",[549,12304,12305],{},"standard",").",[65,12308,12309,12314],{},[25,12310,12311],{},[549,12312,12313],{},"ExperimentPipeline",": An orchestrator class that handles data loading (MNIST, CIFAR-10, Fashion MNIST), model creation (Dense or CNN), and execution of comparative benchmarks.",[30,12316,543],{"id":542},[933,12318,12321],{"className":12319,"code":12320,"language":938},[936],".\n├── README.md                         # This documentation file\n├── Dropout reduces underfitting.pdf  # Original research paper\n├── pipeline.py                       # Main experiment pipeline\n├── pipeline.ipynb                    # Jupyter notebook for experiments\n├── pipeline_mnist.ipynb              # Jupyter notebook for MNIST experiments\n├── pipeline_cifar10.ipynb            # Jupyter notebook for CIFAR-10 experiments\n├── pipeline_cifar100.ipynb           # Jupyter notebook for CIFAR-100 experiments\n├── pipeline_fashion_mnist.ipynb      # Jupyter notebook for Fashion MNIST experiments\n├── requirements.txt                  # Python dependencies\n├── .python-version                   # Python version specification\n└── uv.lock                           # Dependency lock file\n",[549,12322,12320],{"__ignoreMap":269},[30,12324,956],{"id":955},[933,12326,12328],{"className":967,"code":12327,"language":969,"meta":269,"style":269},"# Clone the repository\ngit clone https:\u002F\u002Fgithub.com\u002Farthurdanjou\u002Fdropoutreducesunderfitting.git\ncd dropoutreducesunderfitting\n",[549,12329,12330,12335,12344],{"__ignoreMap":269},[973,12331,12332],{"class":975,"line":839},[973,12333,12334],{"class":6844},"# Clone the repository\n",[973,12336,12337,12339,12341],{"class":975,"line":270},[973,12338,979],{"class":978},[973,12340,983],{"class":982},[973,12342,12343],{"class":982}," https:\u002F\u002Fgithub.com\u002Farthurdanjou\u002Fdropoutreducesunderfitting.git\n",[973,12345,12346,12348],{"class":975,"line":276},[973,12347,1003],{"class":1002},[973,12349,12350],{"class":982}," dropoutreducesunderfitting\n",[30,12352,1011],{"id":12353},"install-dependencies",[933,12355,12357],{"className":967,"code":12356,"language":969,"meta":269,"style":269},"pip install tensorflow numpy matplotlib seaborn scikit-learn\n",[549,12358,12359],{"__ignoreMap":269},[973,12360,12361,12363,12366,12369,12372,12375,12378],{"class":975,"line":839},[973,12362,6751],{"class":978},[973,12364,12365],{"class":982}," install",[973,12367,12368],{"class":982}," tensorflow",[973,12370,12371],{"class":982}," numpy",[973,12373,12374],{"class":982}," matplotlib",[973,12376,12377],{"class":982}," seaborn",[973,12379,12380],{"class":982}," scikit-learn\n",[30,12382,1063],{"id":1062},[16,12384,12385],{},"The main notebook pipeline.ipynb contains all necessary code. Here is how to run a typical experiment via the pipeline API.",[57,12387,12389],{"id":12388},"_1-initialization","1. Initialization",[16,12391,12392],{},"Choose your dataset (cifar10, fashion_mnist, mnist) and architecture (cnn, dense).",[933,12394,12398],{"className":12395,"code":12396,"language":12397,"meta":269,"style":269},"language-python shiki shiki-themes material-theme-lighter catppuccin-latte catppuccin-macchiato","from pipeline import ExperimentPipeline\n\n# Fashion MNIST is recommended to observe underfitting\u002Foverfitting nuances\nexp = ExperimentPipeline(dataset_name=\"fashion_mnist\", model_type=\"cnn\")\n","python",[549,12399,12400,12413,12417,12422],{"__ignoreMap":269},[973,12401,12402,12405,12408,12410],{"class":975,"line":839},[973,12403,12404],{"class":7844},"from",[973,12406,12407],{"class":993}," pipeline ",[973,12409,7845],{"class":7844},[973,12411,12412],{"class":993}," ExperimentPipeline\n",[973,12414,12415],{"class":975,"line":270},[973,12416,7896],{"emptyLinePlaceholder":9},[973,12418,12419],{"class":975,"line":276},[973,12420,12421],{"class":6844},"# Fashion MNIST is recommended to observe underfitting\u002Foverfitting nuances\n",[973,12423,12424,12427,12429,12433,12435,12438,12440,12442,12445,12447,12449,12452,12454,12456,12459,12461],{"class":975,"line":4167},[973,12425,12426],{"class":993},"exp ",[973,12428,1049],{"class":986},[973,12430,12432],{"class":12431},"sung0"," ExperimentPipeline",[973,12434,1403],{"class":7373},[973,12436,12437],{"class":8145},"dataset_name",[973,12439,1049],{"class":986},[973,12441,1053],{"class":1052},[973,12443,12444],{"class":982},"fashion_mnist",[973,12446,1053],{"class":1052},[973,12448,3293],{"class":7373},[973,12450,12451],{"class":8145}," model_type",[973,12453,1049],{"class":986},[973,12455,1053],{"class":1052},[973,12457,12458],{"class":982},"cnn",[973,12460,1053],{"class":1052},[973,12462,8064],{"class":7373},[57,12464,12466],{"id":12465},"_2-learning-curves-comparison","2. Learning Curves Comparison",[16,12468,12469],{},"Compare training dynamics (loss and accuracy) of the three strategies.",[933,12471,12473],{"className":12395,"code":12472,"language":12397,"meta":269,"style":269},"exp.compare_learning_curves(\n    modes=[\"standard\", \"early\", \"late\"],\n    switch_epoch=10,  # The epoch where dropout state changes\n    rate=0.4,         # Dropout rate\n    epochs=30\n)\n",[549,12474,12475,12487,12522,12537,12552,12562],{"__ignoreMap":269},[973,12476,12477,12479,12481,12484],{"class":975,"line":839},[973,12478,10459],{"class":993},[973,12480,2195],{"class":7373},[973,12482,12483],{"class":12431},"compare_learning_curves",[973,12485,12486],{"class":7373},"(\n",[973,12488,12489,12492,12494,12496,12498,12500,12502,12504,12507,12509,12511,12513,12515,12517,12519],{"class":975,"line":270},[973,12490,12491],{"class":8145},"    modes",[973,12493,1049],{"class":986},[973,12495,2734],{"class":7373},[973,12497,1053],{"class":1052},[973,12499,12305],{"class":982},[973,12501,1053],{"class":1052},[973,12503,3293],{"class":7373},[973,12505,12506],{"class":1052}," \"",[973,12508,12299],{"class":982},[973,12510,1053],{"class":1052},[973,12512,3293],{"class":7373},[973,12514,12506],{"class":1052},[973,12516,12302],{"class":982},[973,12518,1053],{"class":1052},[973,12520,12521],{"class":7373},"],\n",[973,12523,12524,12527,12529,12532,12534],{"class":975,"line":276},[973,12525,12526],{"class":8145},"    switch_epoch",[973,12528,1049],{"class":986},[973,12530,12531],{"class":7445},"10",[973,12533,3293],{"class":7373},[973,12535,12536],{"class":6844},"  # The epoch where dropout state changes\n",[973,12538,12539,12542,12544,12547,12549],{"class":975,"line":4167},[973,12540,12541],{"class":8145},"    rate",[973,12543,1049],{"class":986},[973,12545,12546],{"class":7445},"0.4",[973,12548,3293],{"class":7373},[973,12550,12551],{"class":6844},"         # Dropout rate\n",[973,12553,12554,12557,12559],{"class":975,"line":7482},[973,12555,12556],{"class":8145},"    epochs",[973,12558,1049],{"class":986},[973,12560,12561],{"class":7445},"30\n",[973,12563,12564],{"class":975,"line":7499},[973,12565,8064],{"class":7373},[57,12567,12569],{"id":12568},"_3-ablation-studies","3. Ablation Studies",[16,12571,12572],{},"Study the impact of the \"Early\" phase duration or Dropout intensity.",[933,12574,12576],{"className":12395,"code":12575,"language":12397,"meta":269,"style":269},"# Impact of the switch epoch on final performance\nexp.compare_switch_epochs(\n    switch_epochs=[5, 10, 15, 20],\n    modes=[\"early\"],\n    rate=0.4,\n    epochs=30\n)\n\n# Impact of the dropout rate\nexp.compare_drop_rates(\n    rates=[0.2, 0.4, 0.6],\n    modes=[\"standard\", \"early\"],\n    switch_epoch=10,\n    epochs=25\n)\n",[549,12577,12578,12583,12594,12623,12639,12649,12657,12661,12665,12670,12681,12705,12729,12739,12748],{"__ignoreMap":269},[973,12579,12580],{"class":975,"line":839},[973,12581,12582],{"class":6844},"# Impact of the switch epoch on final performance\n",[973,12584,12585,12587,12589,12592],{"class":975,"line":270},[973,12586,10459],{"class":993},[973,12588,2195],{"class":7373},[973,12590,12591],{"class":12431},"compare_switch_epochs",[973,12593,12486],{"class":7373},[973,12595,12596,12599,12601,12603,12606,12608,12611,12613,12616,12618,12621],{"class":975,"line":276},[973,12597,12598],{"class":8145},"    switch_epochs",[973,12600,1049],{"class":986},[973,12602,2734],{"class":7373},[973,12604,12605],{"class":7445},"5",[973,12607,3293],{"class":7373},[973,12609,12610],{"class":7445}," 10",[973,12612,3293],{"class":7373},[973,12614,12615],{"class":7445}," 15",[973,12617,3293],{"class":7373},[973,12619,12620],{"class":7445}," 20",[973,12622,12521],{"class":7373},[973,12624,12625,12627,12629,12631,12633,12635,12637],{"class":975,"line":4167},[973,12626,12491],{"class":8145},[973,12628,1049],{"class":986},[973,12630,2734],{"class":7373},[973,12632,1053],{"class":1052},[973,12634,12299],{"class":982},[973,12636,1053],{"class":1052},[973,12638,12521],{"class":7373},[973,12640,12641,12643,12645,12647],{"class":975,"line":7482},[973,12642,12541],{"class":8145},[973,12644,1049],{"class":986},[973,12646,12546],{"class":7445},[973,12648,7393],{"class":7373},[973,12650,12651,12653,12655],{"class":975,"line":7499},[973,12652,12556],{"class":8145},[973,12654,1049],{"class":986},[973,12656,12561],{"class":7445},[973,12658,12659],{"class":975,"line":7542},[973,12660,8064],{"class":7373},[973,12662,12663],{"class":975,"line":7803},[973,12664,7896],{"emptyLinePlaceholder":9},[973,12666,12667],{"class":975,"line":7966},[973,12668,12669],{"class":6844},"# Impact of the dropout rate\n",[973,12671,12672,12674,12676,12679],{"class":975,"line":7972},[973,12673,10459],{"class":993},[973,12675,2195],{"class":7373},[973,12677,12678],{"class":12431},"compare_drop_rates",[973,12680,12486],{"class":7373},[973,12682,12683,12686,12688,12690,12693,12695,12698,12700,12703],{"class":975,"line":7991},[973,12684,12685],{"class":8145},"    rates",[973,12687,1049],{"class":986},[973,12689,2734],{"class":7373},[973,12691,12692],{"class":7445},"0.2",[973,12694,3293],{"class":7373},[973,12696,12697],{"class":7445}," 0.4",[973,12699,3293],{"class":7373},[973,12701,12702],{"class":7445}," 0.6",[973,12704,12521],{"class":7373},[973,12706,12707,12709,12711,12713,12715,12717,12719,12721,12723,12725,12727],{"class":975,"line":8027},[973,12708,12491],{"class":8145},[973,12710,1049],{"class":986},[973,12712,2734],{"class":7373},[973,12714,1053],{"class":1052},[973,12716,12305],{"class":982},[973,12718,1053],{"class":1052},[973,12720,3293],{"class":7373},[973,12722,12506],{"class":1052},[973,12724,12299],{"class":982},[973,12726,1053],{"class":1052},[973,12728,12521],{"class":7373},[973,12730,12731,12733,12735,12737],{"class":975,"line":8067},[973,12732,12526],{"class":8145},[973,12734,1049],{"class":986},[973,12736,12531],{"class":7445},[973,12738,7393],{"class":7373},[973,12740,12741,12743,12745],{"class":975,"line":8077},[973,12742,12556],{"class":8145},[973,12744,1049],{"class":986},[973,12746,12747],{"class":7445},"25\n",[973,12749,12750],{"class":975,"line":8082},[973,12751,8064],{"class":7373},[57,12753,12755],{"id":12754},"_4-data-regimes-data-scarcity","4. Data Regimes (Data Scarcity)",[16,12757,12758],{},"Verify the paper's hypothesis that Early Dropout shines on large datasets (or limited models) while Standard Dropout protects small datasets.",[933,12760,12762],{"className":12395,"code":12761,"language":12397,"meta":269,"style":269},"# Training on 10%, 50% and 100% of the dataset\nexp.run_dataset_size_comparison(\n    fractions=[0.1, 0.5, 1.0],\n    modes=[\"standard\", \"early\"],\n    rate=0.3,\n    switch_epoch=10\n)\n",[549,12763,12764,12769,12780,12804,12828,12839,12848],{"__ignoreMap":269},[973,12765,12766],{"class":975,"line":839},[973,12767,12768],{"class":6844},"# Training on 10%, 50% and 100% of the dataset\n",[973,12770,12771,12773,12775,12778],{"class":975,"line":270},[973,12772,10459],{"class":993},[973,12774,2195],{"class":7373},[973,12776,12777],{"class":12431},"run_dataset_size_comparison",[973,12779,12486],{"class":7373},[973,12781,12782,12785,12787,12789,12792,12794,12797,12799,12802],{"class":975,"line":276},[973,12783,12784],{"class":8145},"    fractions",[973,12786,1049],{"class":986},[973,12788,2734],{"class":7373},[973,12790,12791],{"class":7445},"0.1",[973,12793,3293],{"class":7373},[973,12795,12796],{"class":7445}," 0.5",[973,12798,3293],{"class":7373},[973,12800,12801],{"class":7445}," 1.0",[973,12803,12521],{"class":7373},[973,12805,12806,12808,12810,12812,12814,12816,12818,12820,12822,12824,12826],{"class":975,"line":4167},[973,12807,12491],{"class":8145},[973,12809,1049],{"class":986},[973,12811,2734],{"class":7373},[973,12813,1053],{"class":1052},[973,12815,12305],{"class":982},[973,12817,1053],{"class":1052},[973,12819,3293],{"class":7373},[973,12821,12506],{"class":1052},[973,12823,12299],{"class":982},[973,12825,1053],{"class":1052},[973,12827,12521],{"class":7373},[973,12829,12830,12832,12834,12837],{"class":975,"line":7482},[973,12831,12541],{"class":8145},[973,12833,1049],{"class":986},[973,12835,12836],{"class":7445},"0.3",[973,12838,7393],{"class":7373},[973,12840,12841,12843,12845],{"class":975,"line":7499},[973,12842,12526],{"class":8145},[973,12844,1049],{"class":986},[973,12846,12847],{"class":7445},"10\n",[973,12849,12850],{"class":975,"line":7542},[973,12851,8064],{"class":7373},[30,12853,12855],{"id":12854},"expected-results","Expected Results",[16,12857,12858],{},"According to the paper, you should observe:",[62,12860,12861,12864],{},[65,12862,12863],{},"Early Dropout: Higher initial loss, followed by a sharp drop after the switch_epoch, often reaching a lower minimum than Standard Dropout (reduction of underfitting).",[65,12865,12866],{},"Late Dropout: Rapid rise in accuracy at the start (potential overfitting), then stabilized by the activation of dropout.",[30,12868,4150],{"id":4149},[4152,12870],{"src":12871,"width":4155,"height":4156},"\u002Fprojects\u002Fdropout-reduces-underfitting.pdf",[30,12873,1285],{"id":1284},[62,12875,12876,12883,12890,12897,12904],{},[65,12877,12878],{},[19,12879,12882],{"href":12880,"rel":12881},"https:\u002F\u002Fgithub.com\u002FArthurDanjou",[23],"Arthur Danjou",[65,12884,12885],{},[19,12886,12889],{"href":12887,"rel":12888},"https:\u002F\u002Fgithub.com\u002FAlex6535",[23],"Alexis Mathieu",[65,12891,12892],{},[19,12893,12896],{"href":12894,"rel":12895},"https:\u002F\u002Fgithub.com\u002FAxelleMeric",[23],"Axelle Meric",[65,12898,12899],{},[19,12900,12903],{"href":12901,"rel":12902},"https:\u002F\u002Fgithub.com\u002FPhilippine35890",[23],"Philippine Quellec",[65,12905,12906],{},[19,12907,12910],{"href":12908,"rel":12909},"https:\u002F\u002Fgithub.com\u002FMoritzSiem",[23],"Moritz Von Siemens",[16,12912,12913],{},"M.Sc. Statistical and Financial Engineering (ISF) - Data Science Track at Université Paris-Dauphine PSL",[16,12915,12916],{},"Based on the work of Liu, Z., et al. (2023). Dropout Reduces Underfitting.",[1309,12918,12919],{},"html pre.shiki code .sv490, html code.shiki .sv490{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#7C7F93;--shiki-default-font-style:italic;--shiki-dark:#939AB7;--shiki-dark-font-style:italic}html pre.shiki code .sqbHp, html code.shiki .sqbHp{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#1E66F5;--shiki-default-font-style:italic;--shiki-dark:#8AADF4;--shiki-dark-font-style:italic}html pre.shiki code .sJlHP, html code.shiki .sJlHP{--shiki-light:#91B859;--shiki-default:#40A02B;--shiki-dark:#A6DA95}html pre.shiki code .sMj0x, html code.shiki .sMj0x{--shiki-light:#6182B8;--shiki-light-font-style:inherit;--shiki-default:#D20F39;--shiki-default-font-style:italic;--shiki-dark:#ED8796;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sthAO, html code.shiki .sthAO{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#8839EF;--shiki-default-font-style:inherit;--shiki-dark:#C6A0F6;--shiki-dark-font-style:inherit}html pre.shiki code .s0g_q, html code.shiki .s0g_q{--shiki-light:#90A4AE;--shiki-default:#4C4F69;--shiki-dark:#CAD3F5}html pre.shiki code .sn2um, html code.shiki .sn2um{--shiki-light:#39ADB5;--shiki-default:#179299;--shiki-dark:#8BD5CA}html pre.shiki code .sung0, html code.shiki .sung0{--shiki-light:#6182B8;--shiki-default:#1E66F5;--shiki-dark:#8AADF4}html pre.shiki code .sMKYs, html code.shiki .sMKYs{--shiki-light:#39ADB5;--shiki-default:#7C7F93;--shiki-dark:#939AB7}html pre.shiki code .smoPz, html code.shiki .smoPz{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E64553;--shiki-default-font-style:italic;--shiki-dark:#EE99A0;--shiki-dark-font-style:italic}html pre.shiki code .srDDN, html code.shiki .srDDN{--shiki-light:#39ADB5;--shiki-default:#40A02B;--shiki-dark:#A6DA95}html pre.shiki code .sZm5v, html code.shiki .sZm5v{--shiki-light:#F76D47;--shiki-default:#FE640B;--shiki-dark:#F5A97F}",{"title":269,"searchDepth":270,"depth":270,"links":12921},[12922,12923,12926,12927,12928,12929,12935,12936,12937],{"id":12226,"depth":270,"text":12227},{"id":4284,"depth":270,"text":4285,"children":12924},[12925],{"id":12266,"depth":276,"text":12267},{"id":542,"depth":270,"text":543},{"id":955,"depth":270,"text":956},{"id":12353,"depth":270,"text":1011},{"id":1062,"depth":270,"text":1063,"children":12930},[12931,12932,12933,12934],{"id":12388,"depth":276,"text":12389},{"id":12465,"depth":276,"text":12466},{"id":12568,"depth":276,"text":12569},{"id":12754,"depth":276,"text":12755},{"id":12854,"depth":270,"text":12855},{"id":4149,"depth":270,"text":4150},{"id":1284,"depth":270,"text":1285},"2024-12-10","Reproduction of \"Dropout Reduces Underfitting\" with TensorFlow\u002FKeras, comparing Early and Late Dropout strategies.","dl-dropout-reduces-underfitting","projects\u002Fdl-dropout-reduces-underfitting",[511,752,649,12943],"Research","9yHtYbWhvhwaDH0UHXgis3DxQVLk4kzaGGPxyyvIqFc",{"id":12946,"title":12947,"description":12948,"extension":8,"favorite":853,"icon":12949,"meta":12950,"publishedAt":13002,"readingTime":276,"shortDescription":13003,"slug":13004,"status":1331,"stem":13005,"tags":13006,"type":847,"__hash__":13008},"projects\u002Fprojects\u002Fmonte-carlo-project.md","Monte Carlo Methods Project","An implementation of different Monte Carlo methods and algorithms in R, including inverse CDF simulation, accept-reject methods, and stratification techniques.","i-ph-dice-five-duotone",{"body":12951},{"type":13,"value":12952,"toc":12997},[12953,12959,12963,12983,12985,12992,12994],[16,12954,12955,12956,12958],{},"This report presents the Monte Carlo Methods Project completed as part of the ",[25,12957,613],{}," course at Paris-Dauphine University. The goal was to implement a range of Monte Carlo methods and algorithms in R.",[30,12960,12962],{"id":12961},"methods-and-algorithms","Methods and Algorithms",[62,12964,12965,12968,12971,12974,12977,12980],{},[65,12966,12967],{},"Plotting graphs of functions",[65,12969,12970],{},"Inverse CDF random variation simulation",[65,12972,12973],{},"Accept-Reject random variation simulation",[65,12975,12976],{},"Random variable simulation with stratification",[65,12978,12979],{},"Cumulative density function",[65,12981,12982],{},"Empirical quantile function",[30,12984,11607],{"id":11606},[16,12986,11610,12987],{},[19,12988,12991],{"href":12989,"rel":12990},"https:\u002F\u002Fgo.arthurdanjou.fr\u002Fmonte-carlo-code",[23],"Monte Carlo Project Code",[30,12993,4150],{"id":4149},[4152,12995],{"src":12996,"width":4155,"height":4156},"\u002Fprojects\u002Fmonte-carlo.pdf",{"title":269,"searchDepth":270,"depth":270,"links":12998},[12999,13000,13001],{"id":12961,"depth":270,"text":12962},{"id":11606,"depth":270,"text":11607},{"id":4149,"depth":270,"text":4150},"2024-11-24","A project implementing various Monte Carlo methods and algorithms in R.","monte-carlo-project","projects\u002Fmonte-carlo-project",[515,846,11433,5552,618,13007],"Estimation","B8FsPdipQcd135BYFxeqZDIihPZtLahCjadEXg2a7bc",{"id":13010,"title":13011,"description":13012,"extension":8,"favorite":853,"icon":13013,"meta":13014,"publishedAt":13042,"readingTime":4167,"shortDescription":13043,"slug":13044,"status":1331,"stem":13045,"tags":13046,"type":847,"__hash__":13048},"projects\u002Fprojects\u002Fschelling-segregation-model.md","Schelling Segregation Model","A Python implementation of the Schelling Segregation Model using statistics and data visualization to analyze spatial segregation patterns.","i-ph-city-duotone",{"body":13015},{"type":13,"value":13016,"toc":13038},[13017,13024,13026,13033,13035],[16,13018,13019,13020,13023],{},"This report presents the Schelling Segregation Model project completed as part of the ",[25,13021,13022],{},"Projet Numerique"," course at Paris-Saclay University. The goal was to implement the Schelling Segregation Model in Python and analyze the results using statistics and data visualization.",[30,13025,11607],{"id":11606},[16,13027,11610,13028],{},[19,13029,13032],{"href":13030,"rel":13031},"https:\u002F\u002Fgo.arthurdanjou.fr\u002Fschelling-code",[23],"Schelling Segregation Model Code",[30,13034,4150],{"id":4149},[4152,13036],{"src":13037,"width":4155,"height":4156},"\u002Fprojects\u002Fschelling.pdf",{"title":269,"searchDepth":270,"depth":270,"links":13039},[13040,13041],{"id":11606,"depth":270,"text":11607},{"id":4149,"depth":270,"text":4150},"2024-05-03","A project implementing the Schelling Segregation Model in Python.","schelling-segregation-model","projects\u002Fschelling-segregation-model",[511,11641,11433,13047,846],"Modeling","P9yKDjni701djJWZtRuz0BwQmTCOboHj8e722zW47z0",1777982162818]