Tool lesson

Seasonal: Check Sample Depth Before Trusting The Pattern

A beginner-safe Seasonal lesson for reading sample depth before story: use period, occurrences, average, median, standard deviation, and worst return as the first trust gate.

12 minBeginner5 chapters

Educational only

The examples teach workflow and risk framing. They do not provide trade recommendations, personalized advice, leverage guidance, or guaranteed outcomes.

Chapter 01

Check sample size before story

Trader question

Do I have enough history to treat this as a pattern rather than a coincidence?

Seasonal evidence starts with sample quality. Before a strong month becomes a serious hypothesis, the learner should read period, occurrences, limited-history state, worst return, and dispersion.

Desk checklist

  • Read period and occurrences before average return.
  • Downgrade thin samples and limited-history views.
  • Keep worst return and dispersion beside the seasonal note.

Interactive proof

Period selector, limited-history banner, occurrences, data stats, and Overview metrics

Use the sample-depth scaler to change period and watch occurrence count, confidence, average, median, worst return, and standard deviation update.

1PeriodHistory depthThe period selector controls how much completed history enters the study. A short period can orient, but it cannot carry a conclusion alone.
2OccurrencesCount before storyMonthly and event reads need occurrence counts before average return becomes meaningful.
3Average and medianAgreement checkA strong average with a weak median can mean one large year is doing too much work.
4Worst returnHidden painWorst return keeps the learner from treating a pleasant average as a smooth seasonal path.
5Standard deviationDispersion caveatHigh dispersion means the pattern is harder to lean on even when the average is positive.

Sample depth is the first trust gate. A strong seasonal average should be downgraded when occurrences are thin, median disagrees, worst return is wide, or dispersion is high.

Interactive desk lab

Seasonal Sample Depth Scaler

A practical Seasonal Analysis sample-depth lab for changing history period and watching occurrences, confidence, average, median, worst return, and dispersion caveats update before trusting a pattern.

Native scroll

A practical Seasonal Analysis sample-depth lab for changing history period and watching occurrences, confidence, average, median, worst return, and dispersion caveats update before trusting a pattern.

50s Remotion sceneSeasonalSameMonthDepthVideo

The same month across sample depths

A strong-looking seasonal bar changes as history depth expands, while the caveat strip stays visible.

Storyboard beats4 cues
1

A one-year seasonal bar appears with a bright average.

2

The sample expands to five, ten, and fifteen years.

3

Occurrences, worst return, and standard deviation cards fade in beside the bar.

4

The final frame labels the month reviewable only after sample checks.

Remotion code

SeasonalSameMonthDepthVideo

The snippet is stored with the lesson so a future Remotion project can render the chapter video.

Show component snippet
import {AbsoluteFill, Easing, Sequence, interpolate, useCurrentFrame} from "remotion";

const depths = [
  {label: "1Y", occurrences: 1, average: "+4.8%"},
  {label: "5Y", occurrences: 5, average: "+1.2%"},
  {label: "10Y", occurrences: 10, average: "+0.9%"},
  {label: "15Y", occurrences: 15, average: "+0.7%"},
];

export const SeasonalSameMonthDepthVideo = () => {
  const frame = useCurrentFrame();
  const progress = interpolate(frame, [8, 120], [0, 3], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
    easing: Easing.bezier(0.16, 1, 0.3, 1),
  });
  const active = Math.min(3, Math.floor(progress));
  const barHeight = interpolate(progress, [0, 1, 2, 3], [210, 128, 108, 96], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
  });

  return (
    <AbsoluteFill style={{background: "#fff8e8", color: "#071126", padding: 72}}>
      <h1 style={{fontSize: 54, lineHeight: 1}}>Same month, different evidence.</h1>
      <div style={{marginTop: 42, display: "grid", gridTemplateColumns: "260px 1fr", gap: 34, alignItems: "end"}}>
        <div style={{height: 250, display: "grid", alignItems: "end", borderBottom: "3px solid #071126"}}>
          <div style={{height: barHeight, background: "#d9971f", width: 120}} />
        </div>
        <div style={{display: "grid", gap: 14}}>
          {depths.map((depth, index) => (
            <div key={depth.label} style={{opacity: index <= active ? 1 : 0.28, padding: 16, background: index === active ? "#071126" : "#fffdf7", color: index === active ? "#fff8e8" : "#071126", border: "1px solid #ad862d"}}>
              {depth.label}: {depth.occurrences} occurrences, average {depth.average}
            </div>
          ))}
        </div>
      </div>
      <Sequence from={112} layout="none">
        <p style={{marginTop: 28, fontSize: 26, color: "#805407"}}>The average is not trusted until occurrences, worst return, and dispersion are visible.</p>
      </Sequence>
    </AbsoluteFill>
  );
};

Sources used for this tutorial

Next step

Open the tool with the checklist beside you.

Move from the lesson into the matching Bullion Brains tool, keep the checklist visible, and treat the output as evidence until the caveats are clear.

Open Seasonal Analysis