ClearView Portfolio
Methodology15 min read·April 17, 2026 · ClearView Team

ClearView Analytics Methodology & Model Assumptions

We built ClearView because we were tired of financial tools that show you numbers without explaining where they come from. This page documents the math behind every major calculation in ClearView — what we compute, what assumptions we make, and where you should apply your own judgment.

1. Money-Weighted Return (MWR)

ClearView calculates portfolio performance using the money-weighted return (MWR), also called the internal rate of return (IRR). MWR measures your actual dollar return — it weights each period by how much money you had invested during that period, so large deposits before a strong market move count more than small deposits after one.

How it works

MWR is the rate r that solves:

0 = -V₀ + C₁/(1+r)^t₁ + C₂/(1+r)^t₂ + ... + Vₙ/(1+r)^T

Where V₀ is the starting portfolio value, C₁...Cₙ are cash flows (positive = deposit, negative = withdrawal) at times t₁...tₙ expressed as fractions of the total period, and Vₙ is the ending portfolio value. We solve this numerically using Newton-Raphson iteration in the Python calculation engine.

MWR vs. Time-Weighted Return (TWR)

TWR is what mutual funds use to report performance — it strips out the effect of cash flows entirely. MWR is what actually happened to your money. If you deposited $500K right before a market crash, your MWR will be worse than the fund's TWR for the same period. Both are valid; they answer different questions. ClearView currently reports MWR. TWR support (requiring daily price history) is on the roadmap.

Data inputs

  • Starting value: sum of account balances at the analysis start date
  • Ending value: sum of current account balances at run time
  • Cash flows: investment transactions from Plaid (buys, sells, dividends, transfers) or CSV upload
  • Dividends are treated as positive cash flows (income received, not reinvestment)

2. Asset Allocation Analysis

ClearView classifies every holding by asset class and sector. For individual stocks, classification comes from the security metadata returned by Plaid and supplemented by our reference data. For ETFs and mutual funds, we use an ETF look-through model (see section 7).

Asset class taxonomy

Asset ClassExamples
US EquityVTI, SCHB, individual US stocks
International EquityVXUS, EFA, VEA, individual ADRs
US Fixed IncomeBND, AGG, SCHZ, TIPS, T-bills
International Fixed IncomeBNDX, EMB
Real EstateVNQ, SCHH, individual REITs
CommoditiesGLD, SLV, DJP
Cash & EquivalentsMoney market, VMFXX, short T-bills
AlternativeCrypto, private equity, hedge funds
Other / UnknownUnclassified securities

Allocation percentages are computed as each holding's current market value divided by total portfolio value. Unclassified holdings are shown separately and flagged — they do not skew the classified percentages.

3. Monte Carlo Retirement Simulation

ClearView's retirement simulator runs 1,000 Monte Carlo trials to project the probability that your portfolio lasts through your planning horizon. Each trial draws random annual returns from a normal distribution parameterized by your asset allocation.

Return assumptions by allocation

AllocationReal Return (mu)Std Dev (sigma)
100% Equity6.5%15.0%
80/20 Equity/Bond5.5%12.0%
60/40 Equity/Bond4.5%9.5%
40/60 Equity/Bond3.5%7.5%
20/80 Equity/Bond2.5%5.5%
100% Fixed Income1.5%4.0%

Real returns (inflation-adjusted). Based on long-run historical averages; not a guarantee of future performance.

Simulation mechanics

  1. At each year, draw a random return from N(mu, sigma) using numpy.random.normal
  2. Apply the return to the current portfolio balance
  3. Subtract annual spending (inflation-adjusted by your assumed inflation rate, default 2.5%)
  4. Add any projected income (Social Security, pension, part-time work) as a positive cash flow
  5. If balance reaches zero, the trial is marked as "failed" at that age
  6. After 1,000 trials, success rate = trials where balance > 0 at end age

Spending model options

  • Fixed real spending: Annual withdrawal grows with inflation each year
  • Blanchett smile: Spending follows a U-shaped curve — higher in go-go years (65-75), lower in slow-go years (75-85), higher again in no-go years (85+) for healthcare. Based on David Blanchett's 2013 research in the Journal of Financial Planning.

Fan chart interpretation

The fan chart shows the 10th, 25th, 50th, 75th, and 90th percentile portfolio balances at each age. The 50th percentile (median) is the "base case." The 10th percentile is a stress scenario — only 10% of simulations ended up worse than this line.

What "90% success rate" means

A 90% success rate means 900 of 1,000 simulated retirements ended with money remaining. Most financial planners target 85-95%. Below 80% suggests meaningful adjustments are needed — reduce spending, delay retirement, or increase savings rate.

4. Roth Conversion Optimizer

The Roth optimizer builds a year-by-year conversion schedule designed to minimize lifetime federal income taxes. It uses a greedy bracket-filling algorithm constrained by IRMAA Medicare surcharge thresholds.

A detailed writeup of the algorithm, including IRMAA cliff analysis, Social Security stacking, and a worked example, is in our companion article:

The Math Behind Roth Conversion Optimization (And Why Most Calculators Get It Wrong) →

Algorithm summary

  1. Project IRA balance forward at assumed growth rate each year
  2. Compute ordinary income for each year: Social Security (after provisional income test), pension, RMDs (starting at 73 or 75 per SECURE 2.0), other taxable income
  3. Find conversion headroom: top of target bracket minus ordinary income minus standard deduction
  4. Apply IRMAA constraint: if converting to headroom would cross an IRMAA cliff, cap at the cliff (or evaluate whether pushing through saves more over the horizon)
  5. Convert the headroom amount from Traditional IRA to Roth IRA for that year
  6. Compute tax on conversion at effective marginal rate
  7. Project Roth and IRA balances forward to next year
  8. Repeat for each year in the pre-RMD window

Key inputs

  • Current ages (you and spouse for MFJ)
  • Current Traditional IRA / 401(k) balance
  • Current Roth IRA balance
  • Expected Social Security benefit(s) and start age(s)
  • Other income sources (pension, rental income, part-time work)
  • Target bracket ceiling for conversions (default: top of 22% bracket MFJ)
  • IRMAA avoidance toggle (on by default)
  • IRA growth rate assumption (default: 6.5%)
  • Federal filing status

State taxes: The optimizer is currently federal-only. State income tax treatment of Roth conversions varies significantly (some states exempt all retirement income; others tax it fully). State tax modeling is on the roadmap.

5. Accumulation / Growth Planner

The growth planner projects portfolio value at a future target date using compound growth with periodic contributions. It is deterministic (no Monte Carlo) — it shows a single projected path based on your inputs.

Formula

FV = PV * (1+r)^n + C * [((1+r)^n - 1) / r]

Where PV is the current portfolio value, r is the annual return rate, n is the number of years, and C is the annual contribution. Contributions are assumed to be made at the end of each year.

Contribution escalation

If you specify an annual contribution increase rate, contributions compound each year: Cₙ = C₀ * (1 + escalation_rate)^n. This models salary growth driving higher savings rates.

6. Cash Flow Analysis

Cash flow analysis processes your bank and credit card transaction history from Plaid to produce monthly income and expense summaries, category breakdowns, and trend analysis.

Income detection

Transactions are classified as income if they are positive amounts (credits) matching known income patterns: payroll, direct deposit, ACH credits above $500, Social Security, pension payments. Investment dividends and transfers are excluded from income.

Category classification

Categories come from Plaid's personal finance categories, supplemented by ClearView's own mapping layer that groups Plaid's detailed categories into the 12 summary categories displayed in the app (Housing, Food & Dining, Transportation, Healthcare, etc.).

Savings rate calculation

Savings Rate = (Total Income - Total Expenses) / Total Income

Investment transfers (brokerage deposits, 401k contributions) are treated as expenses for savings rate purposes only when they cannot be identified as investment transfers — Plaid's categorization of investment transfers is inconsistent across institutions.

7. ETF Look-Through

A portfolio consisting of "60% VTI, 30% BND, 10% GLD" is not actually classified as 60/30/10 at the top level — VTI itself holds thousands of individual stocks with their own sector breakdown. ETF look-through "unpacks" each fund to its underlying exposures.

ClearView maintains a reference database of approximately 80 widely-held ETFs and mutual funds with their constituent asset class and sector weights. When a recognized ETF appears in your portfolio, we substitute its weight in the allocation analysis with the ETF's underlying breakdown.

Coverage limitation

Our ETF reference database covers the ~80 most commonly held funds. Specialized, thematic, or newer ETFs may not be recognized and will appear as "Unknown" in the allocation analysis. We are working on a dynamic data feed (EODHD Fundamentals) to expand coverage.

8. Data Sources & Refresh Cadence

DataSourceRefresh
Account balancesPlaidOn sync (user-initiated or webhook)
Holdings / positionsPlaid investmentsHoldingsGetOn sync; Plaid caches from institution
Investment transactionsPlaid investmentsTransactionsGetOn sync; up to 24 months history
Bank transactionsPlaid transactionsSyncCursor-based incremental; real-time webhook
Market prices (strip)Yahoo Finance / Finnhub fallbackLive during market hours, cached 5 min
EOD security pricesYahoo Finance via CRONDaily M-F at 7 PM ET
ETF constituentsClearView reference databaseManual; ~quarterly updates

Important note on Plaid data freshness

Plaid's investments API serves cached data from its last successful pull from your institution — it does not fetch live data on demand. When you sync in ClearView, we receive whatever Plaid has cached. Plaid updates its cache asynchronously on a background schedule, or when you use Plaid Link update mode to re-authenticate. For institutions requiring OAuth (like Schwab), Plaid's cache age depends on how recently your OAuth token was refreshed.

9. Known Limitations

  • 1.Federal taxes only. The Roth optimizer and retirement simulator do not model state income taxes. State treatment varies significantly and is on the roadmap.
  • 2.Normal return distribution. Monte Carlo uses a normal distribution for returns. Real return distributions have fat tails — catastrophic drawdowns happen more often than normal distributions predict. We do not model sequence-of-returns risk separately.
  • 3.MWR only (no TWR). Time-weighted return, which enables apples-to-apples benchmark comparison, requires daily price history. We're building this capability (target: mid-2026).
  • 4.Plaid coverage gaps. Not all institutions support Plaid's investments API. Some brokerages (particularly self-directed IRAs, annuities, and smaller custodians) require CSV upload instead.
  • 5.Tax bracket assumptions. The Roth optimizer uses current-law IRS brackets. The 2017 TCJA provisions affecting individual rates are scheduled to sunset after 2025 unless extended by Congress. We model current-law brackets by default; a sunset scenario toggle is on the roadmap.
  • 6.Social Security estimates. If you enter your expected SS benefit, we use that number. We do not access SSA records or calculate your benefit from your earnings history. For accurate benefit estimates, use ssa.gov/myaccount.
  • 7.Not financial advice. ClearView is an analysis and planning tool. All calculations are illustrative and based on assumptions you provide. They do not constitute financial, tax, or investment advice. Consult a qualified financial professional before making decisions.

Have a question about our methodology, or noticed something that looks wrong? Email us at hello@fiducialabs.ai. We're a small team that takes data quality seriously.