# Sourabh Pradhan — Full Project Documentation > IPM student at IIM Bodh Gaya. I build quantitative finance tools, Android apps, and whatever else grabs me. This document contains full project stories, technical architectures, and metrics for all 7 projects. ## BondFactor Fixed-income risk analytics for Indian Government Securities. **Live:** https://bondfactor.vercel.app **Source:** https://github.com/karbburn/BondFactor **Stack:** Python, FastAPI, Next.js, TypeScript, Supabase, scipy ### Story The RBI publishes Indian G-Sec yield data every day. Bloomberg charges $25k–$32k per seat per year to tell you what it means. I wanted to understand what it means. So I built the analytics layer in between. I'd already built equity tools — factor regressions, correlation detectors. Fixed income was different. I didn't want to use a library and call it done. I wanted to actually implement the math: fit a yield curve from scratch, bootstrap it to a zero curve, price a bond off it, compute duration and DV01, then shock the curve and watch the portfolio reprice in real time. BondFactor does all of that for Indian Government Securities. It fits the benchmark G-Sec par yield curve daily using Nelson-Siegel-Svensson, bootstraps a zero-coupon discount curve, and prices any G-Sec portfolio against it. The scenario engine lets you apply factor shocks — parallel shift, steepener, flattener, twist, butterfly — and see P&L and risk decomposition instantly. Key Rate Duration tells you exactly where on the curve your risk sits. The part that took longest: the TypeScript pricing engine running in the browser is a full reimplementation of the Python backend, validated to 0.1 basis points. Every risk number you see in the UI has passed automated parity tests against the Python reference. No round-trips for scenario repricing — it all runs client-side in about 100ms for 50 positions. ### Architecture Two-stage curve pipeline: Nelson-Siegel-Svensson fit to sparse FBIL par yields → bootstrap to zero-coupon discount curve. NSS chosen over direct bootstrapping because FBIL's benchmark tenor grid is sparse — bootstrapping first would require implicit interpolation, making NSS the cleaner, more defensible approach. Server ships fitted NSS parameters; client bootstraps its own zero curve and all scenario-shocked curves independently. Scenario P&L and KRD are computed by two separate, independent perturbation mechanisms — NSS factor-space shocks for scenarios, local zero-curve tenor bumps for KRD — not derived from each other. Three-layer test suite: unit tests against synthetic known-truth curves, Python↔TypeScript parity tests (yield: 0.1bp, price: ₹0.01), and golden reference validation against independently sourced benchmark security values. ### Metrics - Curve model: Nelson-Siegel-Svensson (NSS) - Fallback model: Cubic spline (on NSS convergence failure) - Risk measures: DV01 · Modified Duration · Convexity · KRD - Scenario types: Parallel · Steepener · Flattener · Twist · Butterfly · Custom - Parity tolerance: Yield: 0.1bp · Price: ₹0.01 per ₹100 face - Backend tests: 71 (pytest) - Repricing speed: ~100ms for 50 positions (client-side) - Data sources: FBIL par yields · NSE WDM trade data - Market conventions: Semi-annual · Actual/Actual · T+1 - Cost: Zero paid APIs --- ## MacroPulse Bloomberg-grade macro event analysis. Free, for India. **Live:** https://macropulse-in.vercel.app **Source:** https://github.com/karbburn/macropulse-in **Stack:** Python, FastAPI, Next.js, Supabase, Recharts ### Story Finance firms pay $25k–$32k per seat per year for Bloomberg. A big part of what they're paying for: knowing exactly how markets reacted to a macro event, and why. I built the India version of that one workflow. For free. Last semester, macroeconomics got me curious. What actually happens to Nifty after an MPC decision? Does a CPI surprise move the rupee differently? Nothing free answered that end-to-end for India — TradingView overlays events manually, Investing.com has a calendar, but nothing ties India's macro event calendar to cross-asset reaction windows with surprise scoring. That workflow lives on Bloomberg terminals. So I built it. MacroPulse tracks how Nifty 50, USD/INR, India VIX, and 10Y G-Sec move around every RBI MPC, CPI, and IIP event since 2018 — surprise scoring, event study paths across hike/cut/hold regimes, publication-ready PDF export. One mid-build problem: data.gov.in kept failing on OTP. Fell back to MOSPI and RBI DBIE. Same data, better reliability. Zero paid APIs. No login needed. ### Architecture Nightly GitHub Actions cron pre-computes market snapshots for all events and caches in Supabase, so per-request latency stays low despite yfinance being the data source. A second GitHub Actions workflow pings /health every 10 minutes to prevent Render cold starts. PDF generation runs server-side via ReportLab — no client-side rendering. Zero paid APIs across the entire stack. ### Metrics - Events tracked: RBI MPC + CPI + IIP (2018–present) - Assets tracked: Nifty 50 · USD/INR · India VIX · 10Y G-Sec - Data sources: yfinance · MOSPI · RBI DBIE · manual CSVs - PDF export: Publication-ready, any event + asset combo - Backend: FastAPI on Render - Frontend: Next.js on Vercel --- ## DistrictDx Pharmaceutical market attractiveness index for all 785 Indian districts. **Live:** https://districtdx.vercel.app **Source:** https://github.com/karbburn/DistrictDx **Stack:** Python, Next.js, pandas, scipy, d3-geo, Tailwind CSS ### Story India's pharma industry allocates field resources using three inputs: state-level population data, historical sales figures, and regional manager intuition. All three have the same flaw — they're backward-looking and too coarse. A district with low sales may simply be underinvested, not unattractive. And no one holds a mental model of 785 districts simultaneously. The data to do this properly exists. India's Census, NFHS, NASA satellite nightlights, and government health records together cover every district in the country. Nobody had stitched them into a single comparable score. So I did. DistrictDx produces a Market Attractiveness Index for all 785 Indian districts built on a core insight: attractiveness has two dimensions. Demand — how much disease burden and health need exists. Realizability — whether the infrastructure exists to convert that need into actual prescriptions. A district with high diabetes prevalence but no endocrinologists and limited pharmacy access isn't an attractive market today, no matter what the disease numbers say. The geometric mean of both axes captures this — it penalizes imbalance, unlike a weighted average that would hide it. The pipeline runs from raw public data to an interactive choropleth map of India in one command. Three index variants (Overall, Chronic, Acute), current and future trajectory views, 2×2 quadrant classification within each state, and validation against external proxies including NSSO out-of-pocket health expenditure (Spearman ρ = 0.73). ### Architecture Eight-stage sequential pipeline: LGD boundary reconciliation → winsorization + hierarchical imputation → AHP-weighted subdomain composites → geometric mean MAI → quadrant classification → entropy sensitivity analysis → future opportunity index → GeoJSON export. Every stage halts on failure — no silent bad data downstream. AHP pairwise comparison matrices are validated at CR < 0.1 (Saaty consistency ratio) before weights are accepted. If CR >= 0.1, the pipeline stops. Factor Analysis (sklearn, 1 component) automatically combines variable pairs with Pearson |r| > 0.8 to remove redundancy before weighting. Future index uses NFHS-4 (2015-16) as historical baseline, computes trend slopes over the 4-year gap to NFHS-5 (2019-21), then extrapolates with β = 0.3 dampening. Beta sensitivity tested at 0.2, 0.3, 0.4. Alpha (Demand/Realizability weight) sensitivity tested at 0.4, 0.5, 0.6 — top-20 overlap and Spearman rank correlation reported for each. District confidence scores track fraction of directly observed vs imputed variables across all 19 inputs. ### Metrics - Districts indexed: 785 (all of India) - Pipeline variables: 19 across 6 domains - Index formula: Geometric mean — Demand^α × Realizability^(1-α) - Weighting method: AHP (Analytic Hierarchy Process), CR < 0.1 - Redundancy removal: Factor Analysis on pairs with Pearson |r| > 0.8 - Imputation hierarchy: NFHS-4 trend-adjusted → state avg → national avg - Quadrant splits: Within-state median (not national) — avoids Kerala/Bihar conflation - Entropy sensitivity: Spearman ρ ≥ 0.84 AHP vs data-driven weights (all 3 indices) - Strongest validator: NSSO OOP expenditure ρ = 0.73 (p < 0.001) - Chronic validator: NSSO OOP × MAI Chronic ρ = 0.78 (p < 0.001) - HMIS result: OPD footfall ρ = 0.04 (n.s.) — expected given HMIS data quality - Data sources: Census 2011 · NFHS-5 · NFHS-4 · NASA VIIRS · LGD · PMGSY · NVBDCP - Future index β: 0.3 base case (sensitivity: 0.2, 0.4) - Reproducibility: One command: python pipeline/run_all.py --- ## Factor Exposure Analyzer Rolling OLS regressions across the full Nifty 500 universe. **Live:** https://factor-analyzer.vercel.app/heatmap **Source:** https://github.com/karbburn/factor-exposure-api **Stack:** Python, FastAPI, Next.js, scikit-learn, Supabase, GitHub Actions ### Story Every article I read about factor investing — Fama-French, momentum, quality — was built around US data, US stocks, US market behavior. I kept wondering if any of it actually held for Indian markets. Couldn't find a tool that showed me the real numbers, so I built one. The first version was painfully slow. Running regressions across 500 tickers took 40+ minutes per request, which made it basically unusable. I spent more time on the engineering problem than the finance problem — pre-computing everything overnight using GitHub Actions, caching in Supabase, serving from cache at under 200ms. Now it's fast enough that you can actually explore it. Sector heatmaps, rolling betas, side-by-side stock comparison. The math is all there, it's just actually usable now. ### Architecture Pre-computation pipeline runs overnight. All 500 tickers processed in batch, cached in Supabase. FastAPI serves from cache. No user waits for computation. ### Metrics - Tickers analyzed: 500 (full Nifty 500) - Response time before: 40+ minutes per request - Response time after: <200ms - Regression windows: 126-day + 252-day rolling - Risk factors: 5 Indian market factors - Compute method: GitHub Actions weekly cron + ThreadPoolExecutor - Cache: Supabase - Frontend: Next.js on Vercel - Backend: FastAPI on Render --- ## CorrShift Real-time cross-asset correlation anomaly detection for Indian markets. **Live:** https://corrshift.vercel.app **Source:** https://github.com/karbburn/correlations-anomaly-detector **Stack:** Python, FastAPI, Next.js, D3.js ### Story You hear it all the time — gold moves when the rupee weakens, crude drags equities down, bonds do the opposite of whatever stocks are doing. But those relationships aren't fixed. They shift. Sometimes they break completely, and that's usually when something interesting is happening in markets. I wanted a way to watch that in real time — not just the correlations themselves, but when they go abnormal. CorrShift tracks six Indian and global asset classes and flags the moments when their relationships drift outside what's historically normal, using z-score analysis on rolling windows. It's less about predicting what happens next and more about knowing when the market is behaving differently than usual. ### Architecture FastAPI backend computes rolling correlations and z-scores across six asset classes. D3-powered interactive dashboard on Next.js frontend. Deployed on Vercel + Render. ### Metrics - Asset classes tracked: 6 (Nifty 50, USD/INR, Gold via GOLDBEES, Brent Crude, 10Y G-Sec yield, FII net flows) - Anomaly detection: Z-score analysis on rolling correlations - Visualization: D3-powered interactive dashboard - Frontend: Next.js on Vercel - Backend: FastAPI on Render --- ## ClassWidget An Android schedule widget that irritation built. **Source:** https://github.com/karbburn/ClassWidget **Stack:** Flutter, Dart, Kotlin, SQLite, Android ### Story Opening an Excel sheet to check what class I have next is genuinely one of the most annoying things I do regularly. So I stopped doing it. Built ClassWidget in under 24 hours — a home screen Android widget that shows your next class with a live countdown and lets you check off tasks without opening anything. The annoying part wasn't the idea, it was getting Flutter and Android's widget system to actually talk to each other. Flutter doesn't natively support home screen widgets, so I had to write a custom Kotlin bridge. Figured it out. The app also parses your timetable from Excel or CSV directly, handles conflicts, and works fully offline. It does what it says, nothing more. ### Architecture Flutter app with custom Kotlin bridge for Android home screen widget communication. Offline-first SQLite architecture. Excel/CSV parser with per-sheet isolation and conflict detection. ### Metrics - Build time: Under 24 hours - Widget type: Home screen widget with real-time countdown - Native bridge: Custom Kotlin bridge for widget ↔ Flutter sync - Data parsing: Excel/CSV with per-sheet isolation + conflict detection - Storage: Offline-first SQLite architecture - Platform: Android --- ## BingeTrack A free movie watchlist tracker. Find it when you need it. **Live:** https://bingetrack.vercel.app **Source:** https://github.com/subhamshuglobal68-sudo/bingetrack **Stack:** Next.js, TypeScript, Supabase, OMDb API, React ### Story My cousin and I wanted to watch a movie together. I was sure I had a list saved somewhere in my notes. Spent a solid 10 minutes scrolling through random app names, half-written titles, voice memos I forgot I recorded. Nothing. So naturally, instead of just picking something, I built a web app. A watchlist buried in your notes app might as well not exist. I've had that friction enough times that building something felt more useful than tolerating it again. BingeTrack lets you search any film from the OMDb database, save it to a named list, and actually find it when you need it. Watchlists can be private or public — one link shares your taste with anyone. Export your data as CSV or JSON whenever you like. No subscription. No paywall. Subhamshu and I did eventually watch a movie, for what it's worth. ### Architecture Server-side OMDb proxy routes keep the API key out of the client bundle. In-memory cache (500 entries, 1h TTL) on the OMDb client cuts redundant API calls. Rate limiter (sliding window, 30 req/min) on all API routes. All watchlist CRUD runs client-side via Supabase with Row Level Security enforcing permissions at the database level — no custom auth middleware needed for data access. Supabase Auth handles email/password, email confirmation, and password reset. Public watchlists are readable by anyone; private ones are enforced by RLS policy. User profiles are auto-created on signup via a Supabase database trigger. ### Metrics - Movie database: OMDb (millions of titles) - Auth methods: Email/password - Watchlist types: Public + Private - Data export: JSON + CSV (GDPR) - Rate limit: 30 req/min per route - Cache: 500 entries, 1h TTL (in-memory) - Background layers: 9 (cinematic UI system) - Cost: Free tier only --- ## Writing Technical notes on mathematics, stochastic calculus, and quantitative finance. Each note is available as a web page and as a PDF. ### The Language of Fluctuation **URL:** https://sourabh08.vercel.app/writing/the-language-of-fluctuation **PDF:** https://sourabh08.vercel.app/writing/pdfs/the-language-of-fluctuation.pdf **Date:** August 2026 Pricing an option requires modeling how uncertainty evolves over an entire time horizon rather than at a single future date, something classical probability was not designed to do. This note explains how that challenge led to the development of Brownian motion. Starting from a simple random walk, we motivate the scaling that produces a meaningful continuous limit, introduce the defining properties of standard Brownian motion, and explain how its transition density describes the evolution of random fluctuations over time. We then apply these ideas to Louis Bachelier's 1900 arithmetic model of stock prices, showing how it can be used to value a European option and why its additive structure permits negative prices. This limitation naturally motivates the transition to Geometric Brownian Motion. ## The Speculator's Puzzle Imagine standing on the floor of the Paris Bourse in 1900. A client asks you to write a contract: a European call option. This contract gives them the right to buy a share of a mining company in thirty days at a pre-agreed price, $K$. If the stock price rises above $K$, you must buy the share at the market rate and sell it to the client at a discount, losing money. If the price stays below $K$, the contract expires uselessly, and you keep the initial premium. How do you determine a fair price for this promise today? If this were a simple game of dice, classical probability would solve it. Mathematicians like Fermat and Pascal built probability theory to analyze static trials where each event starts fresh. A die roll has no memory of the previous roll. But a stock price is cumulative. Tomorrow's price is anchored to today's closing price. Models built around isolated random variables describe single outcomes well, but they do not naturally represent how uncertainty evolves through time. The risk of an option depends on the entire path the price follows over the thirty-day horizon, not just its value at one instant. To describe this mathematically, we need a framework where random variables are linked in a sequence. This is a stochastic process [4]. Instead of a single random outcome, we define a collection of random variables indexed by time, $\{X_t\}_{t \geq 0}$. For any specific moment $t$, $X_t$ is a random variable. When we observe this process over a time horizon, the realization is a jagged curve called a sample path [4]. We can write this relation as: $$ X_t(\omega) = \text{The state of the system at time } t \text{ under scenario } \omega $$ Here, $t$ is our timeline, and $\omega$ is a specific scenario, representing one possible history out of many. If we freeze $\omega$, the function $X_t(\omega)$ is simply a standard curve. For the speculator, $X_t(\omega)$ is the actual stock price chart that unfolds over the thirty-day contract. Before the month begins, the speculator has no idea which path will occur. Once the month ends, the market has traced exactly one concrete history. This framework lets us talk about paths. However, it raises a new question: if a stock price changes continuously every millisecond, how can we construct a mathematical path out of infinite random movements without the values exploding? ## Scaling Random Walks To understand how a continuous path is built, we can start with a discrete coin-toss game. Suppose we toss a fair coin. If it lands heads, the stock price increases by one unit; if tails, it decreases by one unit. Let $X_j$ be the outcome of the $j$-th toss: $$ X_j = \begin{cases} 1 & \text{with probability } 1/2 \\ -1 & \text{with probability } 1/2 \end{cases} $$ Summing these steps gives the position after $k$ tosses, which we call $M_k$: $$ M_0 = 0, \quad M_k = \sum_{j=1}^k X_j $$ This is a symmetric random walk [4]. On average, the position is zero, but the variance grows. Because each coin toss is independent, the variance of the sum is the sum of the individual variances. Each toss has a variance of one, so after $k$ steps, the variance is exactly $k$: $$ \text{Var}(M_k) = k $$ This model works well if trades only happen at fixed intervals, like once an hour. But in a real market, trades occur much faster. If we try to make the game continuous by tossing the coin twice as fast, we pack $2k$ tosses into the same timeframe, which doubles the variance. If we speed up the tosses to infinity, the variance explodes. The model would predict that the stock price swings to positive or negative infinity almost immediately. To keep the variance stable as we increase the frequency of the tosses, we must scale down the size of each step. If we speed up our tosses by a factor of $n$ (taking $n$ steps per unit of time), we can define a scaled random walk, $W^{(n)}(t)$: $$ W^{(n)}(t) = \frac{1}{\sqrt{n}} M_{nt} $$ To see why we scale by the square root of $n$, let us calculate the variance over a time interval $t$, assuming $nt$ is an integer. The term $M_{nt}$ is the sum of $nt$ independent tosses, meaning its variance is $nt$. Scaling a random variable by a constant $c$ multiplies its variance by $c^2$. This gives: $$ \text{Var}\left(W^{(n)}(t)\right) = \text{Var}\left(\frac{1}{\sqrt{n}} M_{nt}\right) = \frac{1}{n} \text{Var}(M_{nt}) = \frac{1}{n} (nt) = t $$ By shrinking the step size by the square root of the frequency, the variance at any time $t$ matches the elapsed time, regardless of how fast we toss the coin. As $n$ goes to infinity, the discrete steps blur. The Central Limit Theorem states that because the position is the sum of many independent steps, the distribution of $W^{(n)}(t)$ at any time $t$ converges to a normal distribution with mean zero and variance $t$ [4]: $$ W^{(n)}(t) \xrightarrow{d} N(0, t) \quad \text{as } n \to \infty $$ The Central Limit Theorem explains the Gaussian behavior at each fixed time. Extending this convergence to entire sample paths requires a deeper result, known as Donsker's Invariance Principle, which establishes that the scaled random walk converges to Brownian motion as a stochastic process [4]. This limiting process behaves in a way that standard calculus cannot easily describe. In 1909, the French physicist Jean Perrin observed microscopic pollen grains suspended in water and noted that their random paths had no defined velocity [3]. Mathematically, these limiting paths are continuous everywhere but differentiable nowhere. Because the path is made of infinitely many tiny, independent shocks, zooming in on any section reveals more jaggedness rather than a flat line. There are no smooth curves, which means we can never draw a tangent line. The instantaneous speed, the derivative of the path with respect to time, does not exist. Remarkably, despite this roughness, Brownian paths possess a well-defined *quadratic variation*. This seemingly paradoxical property becomes the foundation of Itô calculus and much of modern quantitative finance. Now we have a continuous noise engine that does not explode. The next step is to define its rules so the speculator can use it. ## Defining Standard Brownian Motion We call this continuous limit standard Brownian motion, represented by $W(t)$. This process is often called the Wiener process, after Norbert Wiener, who gave its first rigorous mathematical construction in 1923 [5]. A process $W(t)$ is a standard Brownian motion if it satisfies three properties [4]: 1. It starts at zero: $W(0) = 0$. The model uses today's price as our baseline. 2. It has independent increments: increments over disjoint time intervals are mutually independent random variables. Informally, this means that the randomness accumulated over one interval tells us nothing about the randomness accumulated over any later, non-overlapping interval. 3. It has stationary Gaussian increments: the change over any interval is normally distributed with mean zero and a variance equal to the length of that interval: $$ W(t) - W(s) \sim N(0, t - s) $$ To understand how the random noise evolves through time, we first need the probability of Brownian motion moving from one value to another over a given time interval. This is described by the transition density function of standard Brownian motion, $p(\tau,x,y)$ [4]: $$ p(\tau, x, y) = \frac{1}{\sqrt{2\pi\tau}} e^{-\frac{(y-x)^2}{2\tau}} $$ This density describes the driving noise process $W(t)$, not the stock price itself. When we later introduce arithmetic Brownian motion, the stock's distribution is obtained by shifting and scaling this Brownian motion through its drift and volatility parameters. Read this equation as a bell curve that gradually flattens and spreads as time passes. The further into the future we look, the greater the uncertainty becomes. Because the model assumes that variance grows linearly with time, the standard deviation grows with the square root of time, $\sqrt{t}$ [4]. To double the expected range of our forecasting error, we must look four times further into the future. This square-root relation is why short-term projections under the model appear relatively tight, while long-term forecasts quickly become highly uncertain. In 1900, Louis Bachelier used this process to model stock prices in his doctoral thesis, proposing what is known as arithmetic Brownian motion [1, 2]: $$ S(t) = S(0) + \alpha t + \sigma W(t) $$ This model describes the stock price as a balance between two competing forces: a steady, deterministic drift that represents the average long-term growth of the company, and a scaled random noise term that represents market volatility. Using this model, the speculator can price an option. By simulating thousands of potential paths for $S(t)$ over thirty days, the speculator can compute the option payoff at maturity for each path, average these values, and discount the result back to today. This average converges to the fair option price. However, if we examine the simulated paths in Figure 2 closely, a problem appears. If volatility is high or the time horizon is long, some simulated price paths drop below zero. In the real world, stock prices cannot be negative. Shareholders benefit from limited liability, meaning the worst-case scenario is that the stock price falls to zero. Yet, because Bachelier's model adds absolute dollar changes rather than percentage changes, it treats a stock drop from \$10 to \$5 as having the same probability as a drop from \$500 to \$495. This is a structural flaw. It assigns a positive probability to negative stock prices, which violates the legal reality of equity markets. To resolve this, we need a model where price changes are relative rather than absolute. We need a framework where price movements are modeled as percentage returns, ensuring the price can never fall below zero. This limitation of Bachelier's model motivated the development of Geometric Brownian Motion, where prices can fluctuate infinitely but are naturally bounded by zero. ## References 1. Bachelier, Louis. "Théorie de la Spéculation." *Annales Scientifiques de l'École Normale Supérieure* 17 (1900): 21–86. 2. Davis, Mark H. A., and Alison Etheridge. *Speculation: Louis Bachelier and the Origins of Modern Finance*. Princeton University Press, 2006. 3. Perrin, Jean. "Mouvement brownien et réalité moléculaire." *Annales de Chimie et de Physique* 18 (1909): 1–114. 4. Shreve, Steven E. *Stochastic Calculus for Finance II: Continuous-Time Models*. Springer, 2004. 5. Wiener, Norbert. "Differential Space." *Journal of Mathematical Physics* 2, no. 1–4 (1923): 127–146. ### The Geometry of Fluctuation **URL:** https://sourabh08.vercel.app/writing/the-geometry-of-fluctuation **PDF:** https://sourabh08.vercel.app/writing/pdfs/the-geometry-of-fluctuation.pdf **Date:** August 2026 This technical note examines why financial price movements are better modeled as relative rather than absolute changes. While arithmetic Brownian motion captures continuous fluctuations, its absolute, additive structure fails to reflect the proportional scaling of speculative returns and permits negative asset prices. We resolve these anomalies by modeling price changes as percentage returns, leading to the formulation of Geometric Brownian Motion. Using Itô's stochastic calculus, we derive the closed-form solution to this process and explain the origin of the -σ²/2 correction. We examine the resulting lognormal distribution, the structural positivity of asset prices, and discuss the model's role in continuous-time finance, concluding with a concise analysis of its limitations. ## From Additive Limits to Relative Movements In the study of random fluctuations, Brownian motion was constructed as the continuous-time limit of a scaled random walk. This continuous-time process, standard Brownian motion $W_t$, provides a mathematically rigorous representation of continuous fluctuations with independent, stationary Gaussian increments [6]. In his 1900 doctoral thesis, Louis Bachelier utilized this framework to model speculative prices, proposing what is now termed arithmetic Brownian motion [1]: $$ S_t = S_0 + \mu t + \sigma W_t $$ Here, the asset price $S_t$ is modeled as a balance between a deterministic drift parameter $\mu$ and a random fluctuation term scaled by the volatility coefficient $\sigma$. Bachelier's model was a genuine breakthrough, but it has one structural problem. Under arithmetic Brownian motion, price changes are absolute and additive. Over a small time interval $\Delta t$, the price increment is given by: $$ \Delta S_t = S_{t+\Delta t} - S_t = \mu \Delta t + \sigma \Delta W_t $$ Because the price increment $\Delta S_t$ is independent of the current price level $S_t$, the model treats a \$5 price movement on a \$10 asset with the exact same probability as a \$5 movement on a \$500 asset. In competitive markets, however, market participants do not evaluate absolute changes in isolation; they evaluate percentage returns. A \$5 decline on a \$10 stock represents a 50% loss of capital, whereas a \$5 decline on a \$500 stock is a negligible 1% fluctuation. Absolute changes do not scale with the level of the system. A secondary structural flaw of this additive structure is that the price $S_t$ can drop below zero. Because the absolute increments are normally distributed, the probability that the price will be negative at time $t$ is strictly positive: $$ P(S_t < 0) = \Phi\left( -\frac{S_0 + \mu t}{\sigma \sqrt{t}} \right) > 0 $$ where $\Phi$ represents the cumulative standard normal distribution function. For long-term forecasts or in regimes of high volatility, this probability can become substantial. Real-world stock and equity prices cannot fall below zero; a negative price lacks physical meaning in market exchange. The model treats a \$20 decline and a \$20 increase as equally admissible outcomes, even when the decline would take the price below zero. This motivates a model where price changes are relative rather than absolute, and where prices remain positive. ## Multiplicative Dynamics To construct a model that reflects the relative nature of prices, we must formulate price changes as percentage returns. Over a small time interval $\Delta t$, we expect the change in the price, $\Delta S_t$, to scale proportionally with the current price level, $S_t$. We can write this percentage return as an approximate small-time relation: $$ \frac{\Delta S_t}{S_t} \approx \mu \Delta t + \sigma \Delta W_t $$ This is a discrete-time approximation where the percentage return has constant drift and volatility parameters. Passing to the continuous-time limit, the dynamics of the price are governed by the stochastic differential equation: $$ dS_t = \mu S_t dt + \sigma S_t dW_t $$ This SDE defines Geometric Brownian Motion. Here, both the deterministic drift and the random diffusion scale with the current price level. If the price increases, its fluctuations scale up proportionally; if the price falls, its fluctuations contract. For an asset initialized at $S_0 > 0$, the continuous-time process $S_t$ remains strictly positive for every finite $t$, meaning that zero is inaccessible in finite time. If the process were instead initialized at zero ($S_0 = 0$), both the drift and the diffusion coefficients would vanish, rendering zero an absorbing state of the stochastic differential equation. ## When Ordinary Calculus Fails The transition from an additive model to a multiplicative model alters the mathematics required to solve the process. If we apply the rules of ordinary calculus to integrate this SDE, we can divide both sides by $S_t$ to isolate the terms: $$ \frac{dS_t}{S_t} = \mu dt + \sigma dW_t $$ Integrating both sides from $0$ to $t$ yields: $$ \int_0^t \frac{dS_s}{S_s} = \int_0^t \mu ds + \int_0^t \sigma dW_s $$ Under standard calculus, the integral of $1/x$ is the natural logarithm, which would suggest: $$ \log S_t - \log S_0 = \mu t + \sigma W_t $$ Exponentiating both sides would then give the candidate solution: $$ S_t = S_0 \exp(\mu t + \sigma W_t) $$ This candidate solution, however, is mathematically incorrect. The failure of ordinary calculus is a consequence of the path properties of standard Brownian motion. Standard Brownian motion is continuous everywhere but differentiable nowhere, and its sample paths possess infinite total variation. Brownian motion accumulates quadratic variation at a deterministic rate of one per unit time [6]. Path-by-path, the quadratic variation over the interval $[0, t]$ is: $$ [W, W]_t = \lim_{\|\Pi\| \to 0} \sum_{j=0}^{n-1} (W_{t_{j+1}} - W_{t_j})^2 = t \quad \text{almost surely} $$ Informally, this is expressed through the multiplication rule: $$ (dW_t)^2 = dt $$ Because the squared differential $(dW_t)^2$ is of order $dt$, we cannot discard second-order terms when expanding functions of a stochastic process. When we Taylor-expand a function $f(S_t)$, the second-order derivative term remains in the limit and introduces a systematic drift correction. To evaluate the logarithmic transformation correctly, we must employ the stochastic counterpart of the chain rule, known as Itô's lemma. ## The Logarithmic Transformation and Solution To solve the stochastic differential equation for Geometric Brownian Motion, we seek a transformation that removes the state dependence from the coefficients. We define the transformed process $X_t = \log S_t$, which corresponds to the function $f(S_t) = \log S_t$. The logarithm is the natural transformation for this multiplicative system because its derivative, $f'(S_t) = 1/S_t$, naturally cancels out the state-dependent factor $S_t$ in the drift and diffusion coefficients of Geometric Brownian Motion. We state Itô's lemma for a twice-differentiable function $f(S_t)$ of a stochastic process: $$ df(S_t) = f'(S_t) dS_t + \frac{1}{2} f''(S_t) (dS_t)^2 $$ To apply this lemma, we compute the first and second derivatives of our function $f(S_t) = \log S_t$ with respect to the state variable: $$ f'(S_t) = \frac{1}{S_t}, \quad f''(S_t) = -\frac{1}{S_t^2} $$ Substituting these derivatives into Itô's lemma yields: $$ d(\log S_t) = \frac{1}{S_t} dS_t - \frac{1}{2S_t^2} (dS_t)^2 $$ Next, we evaluate the squared price differential $(dS_t)^2$. Utilizing the SDE and the stochastic multiplication rules ($(dW_t)^2 = dt$, $dt^2 = 0$, and $dt\, dW_t = 0$), we have: $$ (dS_t)^2 = (\mu S_t dt + \sigma S_t dW_t)^2 = \mu^2 S_t^2 (dt)^2 + 2\mu\sigma S_t^2 dt\, dW_t + \sigma^2 S_t^2 (dW_t)^2 $$ Applying the multiplication rules, the first two terms vanish, and the final term reduces to: $$ (dS_t)^2 = \sigma^2 S_t^2 dt $$ Substituting the expressions for $dS_t$ and $(dS_t)^2$ back into our expanded differential yields: $$ d(\log S_t) = \frac{1}{S_t} (\mu S_t dt + \sigma S_t dW_t) - \frac{1}{2S_t^2} (\sigma^2 S_t^2 dt) $$ We can distribute $1/S_t$ and $1/S_t^2$, which simplifies the expression to: $$ d(\log S_t) = \mu dt + \sigma dW_t - \frac{1}{2} \sigma^2 dt $$ Grouping the deterministic drift terms together, we arrive at: $$ d(\log S_t) = \left( \mu - \frac{\sigma^2}{2} \right) dt + \sigma dW_t $$ The logarithmic transformation removes $S_t$ entirely from the drift and diffusion coefficients. The process governing $d(\log S_t)$ is an arithmetic Brownian motion with a modified constant drift coefficient of $(\mu - \sigma^2/2)$. Because the drift and diffusion coefficients of this transformed process are constant, the remaining integration can be handled directly using standard calculus: $$ \log S_t - \log S_0 = \left( \mu - \frac{\sigma^2}{2} \right) t + \sigma W_t $$ Exponentiating both sides yields the exact, closed-form solution for Geometric Brownian Motion: $$ S_t = S_0 \exp\left[ \left( \mu - \frac{\sigma^2}{2} \right) t + \sigma W_t \right] $$ ## The Volatility Correction and Lognormal Prices The appearance of the $-\sigma^2/2$ term in the exponent is a direct consequence of the quadratic variation of Brownian paths. We can understand its financial meaning by examining the expected value and the median of the asset price distribution. Because $W_t$ is normally distributed with mean zero and variance $t$, the term $e^{\sigma W_t}$ is a lognormal random variable. Using the moment-generating function of a normal distribution, the expectation is given by: $$ \mathbb{E}\left[ e^{\sigma W_t} \right] = e^{\frac{1}{2}\sigma^2 t} $$ Taking the expectation of our closed-form solution, we find: $$ \mathbb{E}[S_t] = \mathbb{E}\left[ S_0 \exp\left[ \left( \mu - \frac{\sigma^2}{2} \right) t + \sigma W_t \right] \right] = S_0 \exp\left[ \left( \mu - \frac{\sigma^2}{2} \right) t \right] \mathbb{E}\left[ e^{\sigma W_t} \right] $$ Substituting this expectation yields: $$ \mathbb{E}[S_t] = S_0 \exp\left[ \left( \mu - \frac{\sigma^2}{2} \right) t \right] \exp\left( \frac{1}{2} \sigma^2 t \right) = S_0 e^{\mu t} $$ The expected price of the asset grows at rate $\mu$. Volatility $\sigma$ has no effect on that growth rate. The realized path of an individual stock, however, is not described by its expected price. Since $W_t \sim N(0,t)$, its median is zero. The median of the stock price $S_t$ is therefore: $$ \text{Median}(S_t) = S_0 \exp\left[ \left( \mu - \frac{\sigma^2}{2} \right) t \right] $$ Since $\sigma^2 > 0$, the median of the distribution is strictly less than the expected price. This inequality reflects the right-skewness of the lognormal distribution. The $-\sigma^2/2$ correction term lowers the drift of the log-price, so the median price grows at a lower rate than the expected price. The convexity of the exponential function magnifies large positive shocks, which pulls the expected price upward. As a result, more than half of realized prices at any fixed time $t$ lie below the expected price. Figure 1 illustrates this divergence directly. Over long horizons, this skewness has a sharp asymptotic consequence. For any $\sigma > 0$, the normalized price $S_t / \mathbb{E}[S_t]$ converges to zero almost surely as $t \to \infty$. Furthermore, if the volatility is sufficiently large such that $\sigma^2 > 2\mu$, the stock price $S_t$ itself converges to zero almost surely as $t \to \infty$, even though the expected price $\mathbb{E}[S_t] = S_0 e^{\mu t}$ grows exponentially to infinity when $\mu > 0$. Because $S_t$ is expressed as the exponential of a real-valued normal random variable, the price remains strictly positive for any finite time $t$, provided the initial price $S_0$ is positive, ensuring that the process never reaches or crosses zero in finite time. ## Historical and Financial Context In 1959, M.F.M. Osborne modified Bachelier's model by considering not absolute price changes but their logarithm, drawing on the physics of particle motion to relate stock market variations to Brownian motion in the logarithm of price [4]. In 1965, Paul Samuelson formalized this into geometric Brownian motion and applied it to warrant pricing [5]. Black, Scholes, and Merton built their 1973 option-pricing models on this multiplicative framework [2, 3]. Their work showed how such continuous-time price dynamics could be combined with no-arbitrage arguments to value derivatives. ## Limitations of the Geometric Model Despite its mathematical tractability and widespread adoption, Geometric Brownian Motion is an idealized representation of financial markets. Empirical observations of speculative prices reveal several critical limitations: - **Constant Volatility:** The model assumes that the volatility parameter $\sigma$ is constant. In real-world markets, volatility is highly dynamic, fluctuating over time and clustering in regimes of high and low intensity. - **Continuous Paths:** The sample paths of Brownian motion are continuous. Financial asset prices, however, frequently exhibit discrete, discontinuous jumps in response to news and macroeconomic events. - **Heavy Tails:** The normal distribution of log returns under GBM underestimates the probability of extreme market movements. Empirical return distributions possess excess kurtosis (heavy tails), meaning that extreme returns occur more frequently than predicted by a lognormal model. - **Parameter Instability:** The drift parameter $\mu$ and volatility $\sigma$ are assumed to remain constant, but real-world markets undergo structural breaks, shifting across different macroeconomic and regulatory regimes. ## Conclusion Geometric Brownian Motion addresses the scaling and negativity issues of additive models by formulating price changes as percentage returns. This provides a tractable, positive price process in which fluctuations scale with the current price. Although the assumptions of constant volatility and continuous paths do not capture all empirical features of speculative markets, the analytical tractability of the model makes it a standard starting point for extensions such as stochastic volatility and jump-diffusion models. ## References 1. Bachelier, Louis. "Théorie de la Spéculation." *Annales Scientifiques de l'École Normale Supérieure* 17 (1900): 21–86. 2. Black, Fischer, and Myron Scholes. "The Pricing of Options and Corporate Liabilities." *Journal of Political Economy* 81, no. 3 (1973): 637–654. 3. Merton, Robert C. "Theory of Rational Option Pricing." *Bell Journal of Economics and Management Science* 4, no. 1 (1973): 141–183. 4. Osborne, M.F.M. "Brownian Motion in the Stock Market." *Operations Research* 7, no. 2 (1959): 145–173. 5. Samuelson, Paul A. "Rational Theory of Warrant Pricing." *Industrial Management Review* 6, no. 2 (1965): 13–31. 6. Shreve, Steven E. *Stochastic Calculus for Finance II: Continuous-Time Models*. Springer, 2004. ### The Extra Term **URL:** https://sourabh08.vercel.app/writing/the-extra-term **PDF:** https://sourabh08.vercel.app/writing/pdfs/the-extra-term.pdf **Date:** August 2026 In our previous note, The Geometry of Fluctuation, we established the geometric framework of multiplicative asset dynamics, leading to the formulation of Geometric Brownian Motion (GBM) and the identification of the −½σ²dt volatility correction. However, that derivation relied on the stochastic multiplication table and second-order Taylor expansions as algebraic axioms. This paper addresses the deep mathematical foundations underlying those rules, explaining precisely why classical deterministic calculus fails when applied to Brownian-driven processes. By examining the probabilistic and pathwise properties of Brownian motion, we explain why its infinite total variation causes the classical bounded-variation Riemann–Stieltjes framework to fail, while its quadratic variation determines the limiting second-order contribution. We analyze the heuristic scaling ΔW_t ~ √Δt and formalize it through the rigorous framework of quadratic variation, showing that [W]_t = t. We present Kiyosi Itô's 1951 Taylor-expansion proof to demonstrate why the second-order term survives in the continuous limit, thereby revealing how the deterministic quadratic variation of Brownian motion underlies the correction terms of Itô calculus. ## Introduction In our previous note, *The Geometry of Fluctuation* [1], we motivated the transition from additive to multiplicative price dynamics, resolving structural issues in asset pricing models by formulating price changes as percentage returns: $$ dS_t = \mu S_t dt + \sigma S_t dW_t $$ To solve this stochastic differential equation, we introduced the logarithmic transformation $X_t = \log S_t$. Applying the non-classical chain rule known as Itô's Lemma, we arrived at the exact solution: $$ S_t = S_0 \exp\left( \left(\mu - \frac{1}{2}\sigma^2\right)t + \sigma W_t \right) $$ This solution contains the characteristic volatility correction term $-\frac{1}{2}\sigma^2 t$, which arises as a direct mathematical consequence of the quadratic variation of Brownian paths. While the utility of this correction is clear (it ensures that the expectation of the lognormal price process $\mathbb{E}[S_t]$ grows at the rate $\mu$), the derivation in *The Geometry of Fluctuation* accepted the stochastic differential multiplication rules, such as $(dW_t)^2 = dt$, and the survival of the second-order Taylor term as algebraic assumptions. The goal of this technical note is to fill this conceptual gap. We address the fundamental mathematical question: why does classical calculus fail for Brownian-driven processes, and why must the second-order term be retained in the stochastic chain rule? Rather than presenting the answer immediately, we begin with the rule encountered in the previous paper, $(dW_t)^2 = dt$, and ask where it actually comes from. This rule represents a profound mathematical puzzle. In classical calculus, the square of a differential vanishes, $(dx)^2 = 0$. How is it that squaring a random differential yields a deterministic time increment $dt$? The answer lies in the fine structure of Brownian paths, which forces a fundamental departure from classical integration. Because Brownian motion is highly oscillatory, its fine-scale jitter does not smooth away as the time partition is refined. Instead, this continuous fluctuation accumulates at a fixed, deterministic quadratic-variation rate, allowing second-order effects to persist in the continuous-time limit. ## The Roughness of Brownian Motion To understand why ordinary calculus fails, we must examine the pathwise behavior of standard Brownian motion $\{W_t\}_{t \geq 0}$. A standard Brownian motion is a continuous, adapted process with $W_0 = 0$ almost surely, and independent, stationary, normally distributed increments: $W_{t+s} - W_t \sim \mathcal{N}(0, s)$ [2]. Despite their pathwise continuity, almost all sample paths of Brownian motion are highly pathological compared to the smooth functions analyzed in classical calculus. For almost every path, the limit of the difference quotient: $$ \lim_{h \to 0} \frac{W_{t+h}(\omega) - W_t(\omega)}{h} $$ does not exist at any time $t \geq 0$ [2] [3]. Furthermore, for almost every path, the total variation defined by the supremum over all partitions: $$ V_t(W) = \sup_{\Pi} \sum_{k=1}^n |W_{t_k} - W_{t_{k-1}}| $$ is infinite on any finite interval $[0, t]$ [4]. This pathology motivates the need for a non-classical calculus. Because the paths exhibit an infinite number of fluctuations on any time scale and lack differentiability, the classical bounded-variation Riemann–Stieltjes framework fails generally for integrals of the form $\int_0^t H_s dW_s$. Here, infinite total variation explains why the classical bounded-variation Riemann–Stieltjes framework fails, while quadratic variation determines the limiting second-order contribution. ## Why the Second-Order Term Survives We now examine the behavior of functions of Brownian motion. Consider a sufficiently smooth function $f(x)$ evaluated at $x = W_t$. To understand how the process $f(W_t)$ evolves over a small time increment $\Delta t$, we examine the difference $\Delta f = f(W_{t+\Delta t}) - f(W_t)$. Letting $\Delta W_t = W_{t+\Delta t} - W_t$ denote the Brownian increment, we perform a Taylor expansion of $f(W_{t+\Delta t})$ around $W_t$: $$ f(W_{t+\Delta t}) - f(W_t) = f'(W_t)\Delta W_t + \frac{1}{2}f''(W_t)(\Delta W_t)^2 + \frac{1}{6}f'''(W_t)(\Delta W_t)^3 + \dots $$ In classical calculus, if we were expanding a function of a differentiable process $x_t$, we would write the increment as $\Delta x_t = x'_{t} \Delta t + o(\Delta t)$. The first-order term is proportional to $\Delta t$, and the second-order term is proportional to $(\Delta x_t)^2 \approx (x'_t)^2 (\Delta t)^2$. In the limit as $\Delta t \to 0$, we discard $(\Delta x_t)^2$ and all higher-order terms because they vanish much faster than $\Delta t$. The classical chain rule is the result of keeping only the first-order term. This logic breaks down for Brownian motion. Because $W_{t+s} - W_t \sim \mathcal{N}(0, s)$, the increment has standard deviation: $$ \text{std}(\Delta W_t) = \sqrt{\Delta t} $$ This provides the fundamental heuristic scaling relation for Brownian motion: $$ \Delta W_t \sim \sqrt{\Delta t} $$ This scaling is statistical, not a pathwise equality. It indicates that the typical size of a fluctuation over a small interval $\Delta t$ is of the order $\sqrt{\Delta t}$. Applying this statistical scaling to the terms in the Taylor expansion above, we find that $(\Delta W_t)^2 \sim \Delta t$, while higher-order increments scale as $(\Delta t)^{k/2}$ for $k \geq 3$. When we analyze the Taylor expansion under this scaling, we see that the first-order term $f'(W_t)\Delta W_t$ is of order $\sqrt{\Delta t}$ (representing the diffusion shock), while the second-order term $\frac{1}{2}f''(W_t)(\Delta W_t)^2$ is of order $\Delta t$. Higher-order terms, when accumulated over a refining partition, have sums that vanish in the continuous-time limit as $\|\Pi\| \to 0$ under the regularity conditions used in the derivation. Because $(\Delta W_t)^2$ scales as $\Delta t$, the second-order term in the Taylor expansion is of the same order of magnitude as a standard time differential $dt$. Consequently, this second-order term cannot be discarded; it must be retained alongside the first-order terms. The scaling argument explains why the second-order term can survive; quadratic variation explains what it converges to. ## Quadratic Variation To formalize the scaling intuition, we transition from heuristics to the mathematical framework of quadratic variation. Let $\{X_t\}_{t \geq 0}$ be a continuous stochastic process. The quadratic variation process, denoted by $[X]_t$, is defined as the limit in probability of the sum of squared increments when this limit exists, along a sequence of deterministic partitions $\Pi_n$ of $[0, t]$ whose mesh $\|\Pi_n\|$ tends to zero as $n \to \infty$: $$ [X]_t = \text{p-lim}_{\|\Pi_n\| \to 0} \sum_{k=1}^{k_n} (X_{t_k} - X_{t_{k-1}})^2 $$ where $\Pi_n = \{t_0, t_1, \dots, t_{k_n}\}$ is a partition of $[0, t]$ and $\|\Pi_n\|$ is its mesh. For a classically differentiable function $g(t)$ with a continuous derivative, the quadratic variation is zero because the squared increments vanish as $\|\Pi\| \to 0$. For Brownian motion, however, the quadratic variation is non-zero and deterministic. Let $\{W_t\}_{t \geq 0}$ be a standard Brownian motion. Then the quadratic variation over $[0, t]$ is: $$ [W]_t = t $$ Let $\Pi = \{t_0, t_1, \dots, t_n\}$ be a partition of $[0, t]$. Define the random variable: $$ Q_{\Pi} = \sum_{k=1}^n (W_{t_k} - W_{t_{k-1}})^2 $$ Since the increments $W_{t_k} - W_{t_{k-1}}$ are independent and distributed as $\mathcal{N}(0, t_k - t_{k-1})$, the expectation of $Q_{\Pi}$ is: $$ \mathbb{E}[Q_{\Pi}] = \sum_{k=1}^n (t_k - t_{k-1}) = t $$ Because the increments are independent and the variance of $Y^2$ for $Y \sim \mathcal{N}(0, \sigma^2)$ is $2\sigma^4$, the variance of $Q_{\Pi}$ is: $$ \text{Var}(Q_{\Pi}) = 2 \sum_{k=1}^n (t_k - t_{k-1})^2 \leq 2 \|\Pi\| \sum_{k=1}^n (t_k - t_{k-1}) = 2 \|\Pi\| t $$ Taking the limit as the mesh of the partition $\|\Pi\| \to 0$, we find that $\lim_{\|\Pi\| \to 0} \text{Var}(Q_{\Pi}) = 0$. This shows that the sum $Q_{\Pi}$ converges to $t$ in $L^2$ (mean-square) and hence in probability as the mesh $\|\Pi\| \to 0$. The variance of the aggregate vanishes, so the accumulated squared increments concentrate around their deterministic mean $t$. This limit provides the mathematical basis for the symbolic differential shorthand: $$ (dW_t)^2 = dt $$ This shorthand is a symbolic representation of convergence in probability, not an ordinary pathwise algebraic identity. It does not imply that the squared increment of Brownian motion over a small step is pointwise equal to the step size. Similarly, the cross variation of Brownian motion with time vanishes. Although the total variation of Brownian motion is infinite almost surely, preventing the sum of absolute increments from converging to a finite limit, we can bound the expectation of the weighted increments. Specifically, the expectation of the weighted absolute increments behaves as: $$ \mathbb{E}\left[ \sum_{k=1}^n |W_{t_k} - W_{t_{k-1}}| (t_k - t_{k-1}) \right] = \sqrt{\frac{2}{\pi}} \sum_{k=1}^n (\Delta t_k)^{3/2} \leq \sqrt{\frac{2}{\pi}} t \sqrt{\|\Pi\|} $$ where $\Delta t_k = t_k - t_{k-1}$. As $\|\Pi\| \to 0$, this upper bound vanishes. Thus, the cross-term sums converge to zero in $L^1$ and therefore in probability, justifying the symbolic differential shorthand $dW_t dt = 0$. By a similar argument, the quadratic variation of time with itself converges to zero, so that $(dt)^2 = 0$. These limits explain why cross-multiplication terms involving $dt$ vanish in stochastic calculus, so, at second order, the Brownian quadratic-variation term is the only non-vanishing second-order contribution considered here. This quadratic variation mechanism underlies the correction terms of Itô calculus. ## The Origin of Itô's Formula We now turn to Itô's formula, whose detailed proof appears in Kiyosi Itô's 1951 paper, *On a Formula Concerning Stochastic Differentials* [5]. Let $f : [0, \infty) \times \mathbb{R} \to \mathbb{R}$ be a continuous function with continuous partial derivatives $f_t$, $f_x$, and $f_{xx}$ (i.e., $f \in C^{1,2}([0, \infty) \times \mathbb{R})$). We wish to express the differential of the process $f(t, W_t)$. Let us fix a time $t > 0$ and consider a partition $\Pi = \{t_0, t_1, \dots, t_m\}$ of $[0, t]$ with $0 = t_0 < t_1 < \dots < t_m = t$. We can write the difference $f(t, W_t) - f(0, W_0)$ as a telescoping sum: $$ f(t, W_t) - f(0, W_0) = \sum_{k=1}^m \left[ f(t_k, W_{t_k}) - f(t_{k-1}, W_{t_{k-1}}) \right] $$ We decompose each increment in the sum as: $$ f(t_k, W_{t_k}) - f(t_{k-1}, W_{t_{k-1}}) = [f(t_k, W_{t_k}) - f(t_{k-1}, W_{t_k})] + [f(t_{k-1}, W_{t_k}) - f(t_{k-1}, W_{t_{k-1}})] $$ Applying the Mean Value Theorem to the first term (the time increment) and a second-order Taylor expansion to the second term (the space increment), we obtain: $$ \begin{align} f(t_k, W_{t_k}) - f(t_{k-1}, W_{t_{k-1}}) ={}& f_t(\tau_k, W_{t_k})(t_k - t_{k-1}) \nonumber \\ &+ f_x(t_{k-1}, W_{t_{k-1}})(W_{t_k} - W_{t_{k-1}}) \nonumber \\ &+ \frac{1}{2} f_{xx}(t_{k-1}, \eta_k)(W_{t_k} - W_{t_{k-1}})^2 \end{align} $$ where $t_{k-1} \leq \tau_k \leq t_k$ and $\eta_k$ is an intermediate point between $W_{t_{k-1}}$ and $W_{t_k}$ [2] [5]. Substituting this back into the telescoping sum above, we partition the expression into three distinct sums: $$ f(t, W_t) - f(0, W_0) = S_1(\Pi) + S_2(\Pi) + S_3(\Pi) $$ where: $$ \begin{align} S_1(\Pi) &= \sum_{k=1}^m f_t(\tau_k, W_{t_k})(t_k - t_{k-1}) \\ S_2(\Pi) &= \sum_{k=1}^m f_x(t_{k-1}, W_{t_{k-1}})(W_{t_k} - W_{t_{k-1}}) \\ S_3(\Pi) &= \frac{1}{2} \sum_{k=1}^m f_{xx}(t_{k-1}, \eta_k)(W_{t_k} - W_{t_{k-1}})^2 \end{align} $$ Before taking limits, we identify the role of each sum. The first sum, $S_1(\Pi)$, represents the accumulated time contribution. The second sum, $S_2(\Pi)$, is the approximating sum for the stochastic spatial integral. The third sum, $S_3(\Pi)$, contains the second-order spatial derivative weighted by the squared Brownian increments. This third sum is the central mathematical object of study. We analyze the convergence of these sums as $\|\Pi\| \to 0$: 1. The time component $S_1(\Pi)$ is a standard Riemann sum. Since $f_t$ and the paths of $W_t$ are continuous, it converges pathwise to the ordinary Lebesgue integral: $$ S_1(\Pi) \to \int_0^t f_t(s, W_s) ds \quad \text{almost surely} $$ 2. The spatial component $S_2(\Pi)$ is evaluated at the left-endpoint of each subinterval. This ensures that the integrand is adapted (non-anticipating). Assuming the standard square-integrability condition $\mathbb{E}\left[ \int_0^t f_x(s, W_s)^2 ds \right] < \infty$, as $\|\Pi\| \to 0$ the left-endpoint sums $S_2(\Pi)$ converge in the $L^2$ sense (and therefore in probability) to the stochastic integral: $$ S_2(\Pi) \to \int_0^t f_x(s, W_s) dW_s $$ defining the standard Itô stochastic integral. 3. To establish the convergence of the second-order sum $S_3(\Pi)$, we assume standard regularity and local integrability conditions on the derivatives. Specifically, we assume the square-integrability condition $\sup_{s \leq t} \mathbb{E}[f_{xx}(s, W_s)^2] < \infty$, which can be extended to the general case via a standard localization argument. Since Brownian paths are bounded almost surely on finite intervals, standard localization allows us to work on a compact spatial region $[-M, M]$ where $f_{xx}$ is uniformly continuous. We compare the sum $S_3(\Pi)$ to the left-endpoint Riemann sum: $$ S_4(\Pi) = \frac{1}{2} \sum_{k=1}^m f_{xx}(t_{k-1}, W_{t_{k-1}})(W_{t_k} - W_{t_{k-1}})^2 $$ Due to the uniform continuity of $f_{xx}$ on the compact region, the difference between $S_3(\Pi)$ and $S_4(\Pi)$ converges to zero in probability. We then show that $S_4(\Pi)$ converges in probability to $\frac{1}{2} \int_0^t f_{xx}(s, W_s) ds$ by showing that the variance of the difference: $$ D_{\Pi} = \sum_{k=1}^m g_{k-1} \left[ (W_{t_k} - W_{t_{k-1}})^2 - (t_k - t_{k-1}) \right] $$ where $g_{k-1} = f_{xx}(t_{k-1}, W_{t_{k-1}})$, vanishes as $\|\Pi\| \to 0$. The variance is bounded by: $$ \text{Var}(D_{\Pi}) = 2 \sum_{k=1}^m \mathbb{E}[g_{k-1}^2] (t_k - t_{k-1})^2 \leq 2 \|\Pi\| t \sup_{s \leq t} \mathbb{E}[f_{xx}(s, W_s)^2] $$ Under the square-integrability condition $\sup_{s \leq t} \mathbb{E}[f_{xx}(s, W_s)^2] < \infty$, taking the limit as $\|\Pi\| \to 0$ shows that $\text{Var}(D_{\Pi}) \to 0$. Thus, $D_{\Pi} \to 0$ in $L^2$ and therefore in probability. Refining the spatial evaluations over our partition and taking limits, we obtain: $$ S_3(\Pi) \to \frac{1}{2} \int_0^t f_{xx}(s, W_s) ds \quad \text{in probability} $$ Combining these limits, we obtain the integral form of Itô's Lemma: $$ f(t, W_t) - f(0, W_0) = \int_0^t f_t(s, W_s) ds + \int_0^t f_x(s, W_s) dW_s + \frac{1}{2} \int_0^t f_{xx}(s, W_s) ds $$ In differential notation, this is written as: $$ df(t, W_t) = f_t(t, W_t) dt + f_x(t, W_t) dW_t + \frac{1}{2} f_{xx}(t, W_t) dt $$ The derivation reveals that the $\frac{1}{2}$ coefficient is the coefficient of the second derivative in the Taylor expansion, surviving because the sum of squared Brownian increments converges in probability to the elapsed time. ## The Correction Revisited We now apply the rigorous Itô formula to resolve the logarithmic transformation of Geometric Brownian Motion presented in our previous paper [1]. Recall that Geometric Brownian Motion is governed by the SDE: $$ dS_t = \mu S_t dt + \sigma S_t dW_t $$ To find the dynamics of $X_t = \log S_t$, we define the function $f(t, s) = \log s$. We compute the partial derivatives of $f$: $f_t = 0$, $f_s = 1/s$, and $f_{ss} = -1/s^2$. Applying Itô's formula, we write: $$ d(\log S_t) = \frac{1}{S_t} dS_t + \frac{1}{2}\left( -\frac{1}{S_t^2} \right) d[S]_t $$ To evaluate this expression, we must determine the quadratic variation of the price process, $[S]_t$. Rather than relying on symbolic manipulation, we appeal to the standard quadratic variation result for Itô processes, as established in Karatzas & Shreve [2], Chung & Williams [4], and Shreve [6]. An Itô process consists of a finite-variation drift component and a continuous local martingale diffusion component. The finite-variation drift component contributes zero to the quadratic variation, while the diffusion component contributes: $$ [S]_t = \int_0^t \sigma^2 S_u^2 d[W]_u = \int_0^t \sigma^2 S_u^2 du $$ Here we explicitly state that while the Brownian quadratic variation $[W]_t = t$ is deterministic, the price-process quadratic variation $[S]_t = \int_0^t \sigma^2 S_u^2 du$ is generally random, as it depends on the stochastic paths of the asset price itself. At the partition level, this results from the same Brownian quadratic variation mechanism established in the previous section. Specifically, when we sum the squared increments of $S_t$ over a partition, the squared drift increments are $O((\Delta t)^2)$ and the drift-diffusion cross-terms are $O((\Delta t)^{3/2})$, so both vanish after summation as $\|\Pi\| \to 0$. The squared diffusion increments, on the other hand, contain $(W_{t_k} - W_{t_{k-1}})^2$, which concentrates around $\Delta t_k$ with vanishing variance, yielding the quadratic-variation integral $\int_0^t \sigma^2 S_u^2 du$ in the limit. Thus, in differential notation, we write $d[S]_t = \sigma^2 S_t^2 dt$. Substituting $dS_t$ and $d[S]_t$ back into the expanded differential above (using $d[S]_t = \sigma^2 S_t^2 dt$): $$ \begin{align} d(\log S_t) &= \frac{1}{S_t} (\mu S_t dt + \sigma S_t dW_t) - \frac{1}{2 S_t^2} \sigma^2 S_t^2 dt \\ &= (\mu dt + \sigma dW_t) - \frac{1}{2} \sigma^2 dt \nonumber \end{align} $$ Grouping the deterministic time terms, we obtain the SDE for the log-price: $$ d(\log S_t) = \left( \mu - \frac{1}{2}\sigma^2 \right) dt + \sigma dW_t $$ Thus the log-price follows a Brownian motion with drift $\mu - \frac{1}{2}\sigma^2$ and diffusion coefficient $\sigma$. Integrating both sides from 0 to $t$ yields: $$ \log S_t - \log S_0 = \left( \mu - \frac{1}{2}\sigma^2 \right) t + \sigma W_t $$ Exponentiating both sides results in the closed-form solution: $$ S_t = S_0 \exp\left( \left( \mu - \frac{1}{2}\sigma^2 \right) t + \sigma W_t \right) $$ which is exactly the closed-form solution stated in the introduction. This derivation reveals the exact origin of the $-\frac{1}{2}\sigma^2 dt$ correction term. It is the direct product of: 1. The $\frac{1}{2}$ coefficient from the second-order term of the Taylor expansion of the logarithmic function. 2. The negative sign arising from the second derivative of the logarithm, $f_{ss}(s) = -1/s^2$, reflecting the concavity of the log transformation. 3. The quadratic variation of the price process, $d[S]_t = \sigma^2 S_t^2 dt$. Because Brownian paths possess non-zero quadratic variation, the concave nature of the logarithmic function acts to reduce the drift of the log-transformed process. ## The Extra Term The extra term was already present in the Taylor expansion. What Brownian motion changes is whether that term disappears. In classical calculus, differentiable or $C^1$ paths have increments of order $\Delta t$. Consequently, their squared increments are of order $O(\Delta t^2)$, which vanish in the continuous limit and allow us to discard all but the first-order terms. For Brownian motion, however, the statistical scaling of increments is of order $O(\sqrt{\Delta t})$, which means that the squared spatial increments scale as $O(\Delta t)$ and persist in the limit. Itô's Lemma is the mathematical formulation of this persistence. The extra term arises directly from the second-order spatial derivative in the Taylor expansion. This second-order term is preserved because Brownian paths accumulate quadratic variation at a deterministic rate of one per unit time. The master formula of this non-classical calculus, whose detailed proof we have examined, is expressed as: $$ \boxed{df(t, W_t) = f_t dt + f_x dW_t + \frac{1}{2} f_{xx} dt} $$ This extra term is the second-order Taylor contribution preserved by Brownian quadratic variation. ## References 1. Sourabh Pradhan. "The Geometry of Fluctuation." 2026. 2. Karatzas, Ioannis, and Steven Shreve. *Brownian Motion and Stochastic Calculus*. 2nd ed. Graduate Texts in Mathematics 113. Springer, 1991. 3. Øksendal, Bernt. *Stochastic Differential Equations: An Introduction with Applications*. 6th ed. Springer, 2003. 4. Chung, Kai Lai, and Ruth J. Williams. *Introduction to Stochastic Integration*. 2nd ed. Birkhäuser, 1990. 5. Itô, Kiyosi. "On a Formula Concerning Stochastic Differentials." *Nagoya Mathematical Journal* 3 (1951): 55–65. 6. Shreve, Steven E. *Stochastic Calculus for Finance II: Continuous-Time Models*. Springer, 2004.