[{"data":1,"prerenderedAt":904},["ShallowReactive",2],{"content-query-19OMm0C4eD":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"heading":10,"prompt":11,"tags":15,"files":17,"nav":6,"presets":18,"gallery":35,"body":37,"_type":897,"_id":898,"_source":899,"_file":900,"_stem":901,"_extension":902,"sitemap":903},"/tools/change-point-detection","tools",false,"","Change Point Detection Tool for Excel & CSV","Detect structural breaks online from Excel or CSV time-series data. Find regime shifts, level changes, and trend changes with AI.","Change Point Detection",{"prefix":12,"label":13,"placeholder":14},"Detect change points","Describe the change-point analysis you want to run","e.g. detect structural breaks in annual GDP growth, report breakpoint dates and segment means, CUSUM plot",[16],"statistics",true,[19,25,30],{"label":20,"prompt":21,"dataset_url":22,"dataset_title":23,"dataset_citation":24},"Temperature trend breaks","detect change points in global temperature anomaly using Pelt algorithm with RBF cost; report breakpoint years and the mean temperature in each segment; plot with colored segments, segment means, and CUSUM signal; annotate rate of warming change at each breakpoint","https://ourworldindata.org/grapher/temperature-anomaly.csv","Global average temperature anomaly","Our World in Data",{"label":26,"prompt":27,"dataset_url":28,"dataset_title":29,"dataset_citation":24},"CO₂ growth rate shifts","change-point detection on annual CO2 concentration growth rate (first difference); find up to 4 breakpoints using PELT; report the mean growth rate in each regime; annotate with historical context (e.g. industrialization, post-WWII boom); CUSUM plot","https://ourworldindata.org/grapher/co2-concentration-long-term.csv","CO₂ concentration in the atmosphere",{"label":31,"prompt":32,"dataset_url":33,"dataset_title":34,"dataset_citation":24},"Energy use structural breaks","detect structural breaks in per-capita energy use using PELT with 3 breakpoints maximum; report the year of each break; compute energy use trend (slope) in each segment; annotate possible causes; plot segmented trend lines","https://ourworldindata.org/grapher/per-capita-energy-use.csv","Per capita energy use",[36],"/img/tools/change-point-detection.png",{"type":38,"children":39,"toc":886},"root",[40,49,82,136,148,154,226,232,345,350,356,506,512,635,641,695,701,738,744,788,817,856],{"type":41,"tag":42,"props":43,"children":45},"element","h2",{"id":44},"what-is-change-point-detection",[46],{"type":47,"value":48},"text","What Is Change-Point Detection?",{"type":41,"tag":50,"props":51,"children":52},"p",{},[53,59,61,66,68,73,75,80],{"type":41,"tag":54,"props":55,"children":56},"strong",{},[57],{"type":47,"value":58},"Change-point detection",{"type":47,"value":60}," (also called ",{"type":41,"tag":54,"props":62,"children":63},{},[64],{"type":47,"value":65},"structural break detection",{"type":47,"value":67},") identifies the moments in a time series where the underlying statistical properties shift abruptly — the mean jumps to a new level, the variance changes, the trend reverses, or the entire distributional regime switches. These transition points are called ",{"type":41,"tag":54,"props":69,"children":70},{},[71],{"type":47,"value":72},"change points",{"type":47,"value":74}," or ",{"type":41,"tag":54,"props":76,"children":77},{},[78],{"type":47,"value":79},"breakpoints",{"type":47,"value":81},". Unlike gradual trends detected by a trendline, change points are sudden and discrete: before the break, the series behaves one way; after it, a fundamentally different pattern takes hold. Identifying these moments answers questions like \"when did growth accelerate?\", \"when did volatility regime shift?\", or \"at which point did the policy intervention take effect?\"",{"type":41,"tag":50,"props":83,"children":84},{},[85,87,92,94,99,101,106,108,113,115,120,122,127,129,134],{"type":47,"value":86},"The most widely used algorithmic approach is ",{"type":41,"tag":54,"props":88,"children":89},{},[90],{"type":47,"value":91},"PELT (Pruned Exact Linear Time)",{"type":47,"value":93},", which finds the globally optimal set of change points by minimizing a penalized cost function. The ",{"type":41,"tag":54,"props":95,"children":96},{},[97],{"type":47,"value":98},"cost function",{"type":47,"value":100}," measures how well a constant-mean (or linear-trend) model fits each segment; the ",{"type":41,"tag":54,"props":102,"children":103},{},[104],{"type":47,"value":105},"penalty",{"type":47,"value":107}," controls how many breakpoints are allowed — a higher penalty produces fewer, more confident breakpoints, while a lower penalty finds more subtle shifts. Common cost models include ",{"type":41,"tag":54,"props":109,"children":110},{},[111],{"type":47,"value":112},"L2",{"type":47,"value":114}," (optimal for mean shifts in Gaussian data), ",{"type":41,"tag":54,"props":116,"children":117},{},[118],{"type":47,"value":119},"RBF",{"type":47,"value":121}," (a kernel-based model that detects changes in mean, variance, and covariance simultaneously), and ",{"type":41,"tag":54,"props":123,"children":124},{},[125],{"type":47,"value":126},"linear",{"type":47,"value":128}," (detects changes in slope). The ",{"type":41,"tag":54,"props":130,"children":131},{},[132],{"type":47,"value":133},"Bayesian Online Change-Point Detection (BOCPD)",{"type":47,"value":135}," algorithm instead produces a posterior probability of a change point at each time step, allowing real-time detection as new data arrives.",{"type":41,"tag":50,"props":137,"children":138},{},[139,141,146],{"type":47,"value":140},"The ",{"type":41,"tag":54,"props":142,"children":143},{},[144],{"type":47,"value":145},"CUSUM chart",{"type":47,"value":147}," (cumulative sum of deviations from the global mean) is the classical visual companion to algorithmic detection. When the process mean is stable, the CUSUM drifts near zero; when the mean shifts upward, the CUSUM rises steadily; when it shifts down, the CUSUM falls. Change points appear as inflection points or direction reversals in the CUSUM curve, making them immediately visible. A climate example: the CUSUM of global temperature anomaly shows a clear inflection around 1980, confirming the algorithmic detection of an acceleration in the warming rate at that time.",{"type":41,"tag":42,"props":149,"children":151},{"id":150},"how-it-works",[152],{"type":47,"value":153},"How It Works",{"type":41,"tag":155,"props":156,"children":157},"ol",{},[158,183,199],{"type":41,"tag":159,"props":160,"children":161},"li",{},[162,167,169,174,176,181],{"type":41,"tag":54,"props":163,"children":164},{},[165],{"type":47,"value":166},"Upload your data",{"type":47,"value":168}," — provide a CSV or Excel file with a ",{"type":41,"tag":54,"props":170,"children":171},{},[172],{"type":47,"value":173},"date",{"type":47,"value":175}," column and a ",{"type":41,"tag":54,"props":177,"children":178},{},[179],{"type":47,"value":180},"value",{"type":47,"value":182}," column. Annual, monthly, or daily data all work. One row per time point.",{"type":41,"tag":159,"props":184,"children":185},{},[186,191,193],{"type":41,"tag":54,"props":187,"children":188},{},[189],{"type":47,"value":190},"Describe the analysis",{"type":47,"value":192}," — e.g. ",{"type":41,"tag":194,"props":195,"children":196},"em",{},[197],{"type":47,"value":198},"\"detect up to 4 change points using PELT; report breakpoint dates and segment means; CUSUM plot; annotate possible causes\"",{"type":41,"tag":159,"props":200,"children":201},{},[202,207,209,216,218,224],{"type":41,"tag":54,"props":203,"children":204},{},[205],{"type":47,"value":206},"Get full results",{"type":47,"value":208}," — the AI writes Python code using ",{"type":41,"tag":210,"props":211,"children":213},"a",{"href":212},"https://centre-borelli.github.io/ruptures-docs/",[214],{"type":47,"value":215},"ruptures",{"type":47,"value":217}," for algorithmic detection and ",{"type":41,"tag":210,"props":219,"children":221},{"href":220},"https://plotly.com/python/",[222],{"type":47,"value":223},"Plotly",{"type":47,"value":225}," to render the segmented time series (colored regions, segment means, breakpoint lines) and the CUSUM chart",{"type":41,"tag":42,"props":227,"children":229},{"id":228},"required-data-format",[230],{"type":47,"value":231},"Required Data Format",{"type":41,"tag":233,"props":234,"children":235},"table",{},[236,260],{"type":41,"tag":237,"props":238,"children":239},"thead",{},[240],{"type":41,"tag":241,"props":242,"children":243},"tr",{},[244,250,255],{"type":41,"tag":245,"props":246,"children":247},"th",{},[248],{"type":47,"value":249},"Column",{"type":41,"tag":245,"props":251,"children":252},{},[253],{"type":47,"value":254},"Description",{"type":41,"tag":245,"props":256,"children":257},{},[258],{"type":47,"value":259},"Example",{"type":41,"tag":261,"props":262,"children":263},"tbody",{},[264,306],{"type":41,"tag":241,"props":265,"children":266},{},[267,277,282],{"type":41,"tag":268,"props":269,"children":270},"td",{},[271],{"type":41,"tag":272,"props":273,"children":275},"code",{"className":274},[],[276],{"type":47,"value":173},{"type":41,"tag":268,"props":278,"children":279},{},[280],{"type":47,"value":281},"Date or time index",{"type":41,"tag":268,"props":283,"children":284},{},[285,291,293,299,300],{"type":41,"tag":272,"props":286,"children":288},{"className":287},[],[289],{"type":47,"value":290},"1990",{"type":47,"value":292},", ",{"type":41,"tag":272,"props":294,"children":296},{"className":295},[],[297],{"type":47,"value":298},"2020-01",{"type":47,"value":292},{"type":41,"tag":272,"props":301,"children":303},{"className":302},[],[304],{"type":47,"value":305},"2020-01-15",{"type":41,"tag":241,"props":307,"children":308},{},[309,317,322],{"type":41,"tag":268,"props":310,"children":311},{},[312],{"type":41,"tag":272,"props":313,"children":315},{"className":314},[],[316],{"type":47,"value":180},{"type":41,"tag":268,"props":318,"children":319},{},[320],{"type":47,"value":321},"Numeric time series",{"type":41,"tag":268,"props":323,"children":324},{},[325,331,332,338,339],{"type":41,"tag":272,"props":326,"children":328},{"className":327},[],[329],{"type":47,"value":330},"245.3",{"type":47,"value":292},{"type":41,"tag":272,"props":333,"children":335},{"className":334},[],[336],{"type":47,"value":337},"312.1",{"type":47,"value":292},{"type":41,"tag":272,"props":340,"children":342},{"className":341},[],[343],{"type":47,"value":344},"198.8",{"type":41,"tag":50,"props":346,"children":347},{},[348],{"type":47,"value":349},"Any column names work — describe them in your prompt. For detecting breaks in a rate of change, ask the AI to compute the first difference before running detection.",{"type":41,"tag":42,"props":351,"children":353},{"id":352},"interpreting-the-results",[354],{"type":47,"value":355},"Interpreting the Results",{"type":41,"tag":233,"props":357,"children":358},{},[359,375],{"type":41,"tag":237,"props":360,"children":361},{},[362],{"type":41,"tag":241,"props":363,"children":364},{},[365,370],{"type":41,"tag":245,"props":366,"children":367},{},[368],{"type":47,"value":369},"Output",{"type":41,"tag":245,"props":371,"children":372},{},[373],{"type":47,"value":374},"What it means",{"type":41,"tag":261,"props":376,"children":377},{},[378,394,410,426,442,458,474,490],{"type":41,"tag":241,"props":379,"children":380},{},[381,389],{"type":41,"tag":268,"props":382,"children":383},{},[384],{"type":41,"tag":54,"props":385,"children":386},{},[387],{"type":47,"value":388},"Breakpoint date/index",{"type":41,"tag":268,"props":390,"children":391},{},[392],{"type":47,"value":393},"The time at which the structural break occurs — the last point of the preceding regime",{"type":41,"tag":241,"props":395,"children":396},{},[397,405],{"type":41,"tag":268,"props":398,"children":399},{},[400],{"type":41,"tag":54,"props":401,"children":402},{},[403],{"type":47,"value":404},"Segment mean",{"type":41,"tag":268,"props":406,"children":407},{},[408],{"type":47,"value":409},"Average value within each regime — the level before and after each break",{"type":41,"tag":241,"props":411,"children":412},{},[413,421],{"type":41,"tag":268,"props":414,"children":415},{},[416],{"type":41,"tag":54,"props":417,"children":418},{},[419],{"type":47,"value":420},"Segment slope",{"type":41,"tag":268,"props":422,"children":423},{},[424],{"type":47,"value":425},"Trend within each regime (if using linear cost) — did the growth rate change?",{"type":41,"tag":241,"props":427,"children":428},{},[429,437],{"type":41,"tag":268,"props":430,"children":431},{},[432],{"type":41,"tag":54,"props":433,"children":434},{},[435],{"type":47,"value":436},"Number of breakpoints",{"type":41,"tag":268,"props":438,"children":439},{},[440],{"type":47,"value":441},"Controlled by the penalty parameter — increase penalty for fewer (more confident) breaks",{"type":41,"tag":241,"props":443,"children":444},{},[445,453],{"type":41,"tag":268,"props":446,"children":447},{},[448],{"type":41,"tag":54,"props":449,"children":450},{},[451],{"type":47,"value":452},"CUSUM inflection",{"type":41,"tag":268,"props":454,"children":455},{},[456],{"type":47,"value":457},"Point where CUSUM changes direction — visually confirms a mean shift at that location",{"type":41,"tag":241,"props":459,"children":460},{},[461,469],{"type":41,"tag":268,"props":462,"children":463},{},[464],{"type":41,"tag":54,"props":465,"children":466},{},[467],{"type":47,"value":468},"Cost / BIC",{"type":41,"tag":268,"props":470,"children":471},{},[472],{"type":47,"value":473},"Goodness-of-fit measure for the segmented model — lower is better for a given number of breaks",{"type":41,"tag":241,"props":475,"children":476},{},[477,485],{"type":41,"tag":268,"props":478,"children":479},{},[480],{"type":41,"tag":54,"props":481,"children":482},{},[483],{"type":47,"value":484},"Confidence interval",{"type":41,"tag":268,"props":486,"children":487},{},[488],{"type":47,"value":489},"Uncertainty around the breakpoint location — wider CI = gradual or noisy transition",{"type":41,"tag":241,"props":491,"children":492},{},[493,501],{"type":41,"tag":268,"props":494,"children":495},{},[496],{"type":41,"tag":54,"props":497,"children":498},{},[499],{"type":47,"value":500},"Residuals per segment",{"type":41,"tag":268,"props":502,"children":503},{},[504],{"type":47,"value":505},"Deviation within each regime — should be white noise if the model is correctly specified",{"type":41,"tag":42,"props":507,"children":509},{"id":508},"example-prompts",[510],{"type":47,"value":511},"Example Prompts",{"type":41,"tag":233,"props":513,"children":514},{},[515,531],{"type":41,"tag":237,"props":516,"children":517},{},[518],{"type":41,"tag":241,"props":519,"children":520},{},[521,526],{"type":41,"tag":245,"props":522,"children":523},{},[524],{"type":47,"value":525},"Scenario",{"type":41,"tag":245,"props":527,"children":528},{},[529],{"type":47,"value":530},"What to type",{"type":41,"tag":261,"props":532,"children":533},{},[534,551,568,585,602,618],{"type":41,"tag":241,"props":535,"children":536},{},[537,542],{"type":41,"tag":268,"props":538,"children":539},{},[540],{"type":47,"value":541},"Mean shift detection",{"type":41,"tag":268,"props":543,"children":544},{},[545],{"type":41,"tag":272,"props":546,"children":548},{"className":547},[],[549],{"type":47,"value":550},"PELT change-point detection on annual revenue; L2 cost; report breakpoint years and segment means",{"type":41,"tag":241,"props":552,"children":553},{},[554,559],{"type":41,"tag":268,"props":555,"children":556},{},[557],{"type":47,"value":558},"Slope/trend break",{"type":41,"tag":268,"props":560,"children":561},{},[562],{"type":41,"tag":272,"props":563,"children":565},{"className":564},[],[566],{"type":47,"value":567},"detect changes in the growth rate (slope) of cumulative sales; use linear cost; report acceleration or deceleration at each break",{"type":41,"tag":241,"props":569,"children":570},{},[571,576],{"type":41,"tag":268,"props":572,"children":573},{},[574],{"type":47,"value":575},"Variance change",{"type":41,"tag":268,"props":577,"children":578},{},[579],{"type":41,"tag":272,"props":580,"children":582},{"className":581},[],[583],{"type":47,"value":584},"RBF cost change-point detection; identify periods of high and low volatility; annotate dates",{"type":41,"tag":241,"props":586,"children":587},{},[588,593],{"type":41,"tag":268,"props":589,"children":590},{},[591],{"type":47,"value":592},"Sensitivity sweep",{"type":41,"tag":268,"props":594,"children":595},{},[596],{"type":41,"tag":272,"props":597,"children":599},{"className":598},[],[600],{"type":47,"value":601},"run PELT with penalty 1, 5, 10, 20; plot number of breakpoints vs penalty; identify the 'elbow' where adding more breaks gives diminishing returns",{"type":41,"tag":241,"props":603,"children":604},{},[605,609],{"type":41,"tag":268,"props":606,"children":607},{},[608],{"type":47,"value":145},{"type":41,"tag":268,"props":610,"children":611},{},[612],{"type":41,"tag":272,"props":613,"children":615},{"className":614},[],[616],{"type":47,"value":617},"CUSUM chart of deviations from global mean; annotate where CUSUM crosses ±2 standard deviations",{"type":41,"tag":241,"props":619,"children":620},{},[621,626],{"type":41,"tag":268,"props":622,"children":623},{},[624],{"type":47,"value":625},"Bayesian detection",{"type":41,"tag":268,"props":627,"children":628},{},[629],{"type":41,"tag":272,"props":630,"children":632},{"className":631},[],[633],{"type":47,"value":634},"Bayesian change-point detection; plot posterior probability of break at each time point; list top 3 most probable break dates",{"type":41,"tag":42,"props":636,"children":638},{"id":637},"assumptions-to-check",[639],{"type":47,"value":640},"Assumptions to Check",{"type":41,"tag":642,"props":643,"children":644},"ul",{},[645,655,665,675,685],{"type":41,"tag":159,"props":646,"children":647},{},[648,653],{"type":41,"tag":54,"props":649,"children":650},{},[651],{"type":47,"value":652},"Stationarity within segments",{"type":47,"value":654}," — change-point models assume the series is stationary between breaks; seasonal effects or gradual trends within a segment will be misinterpreted as change points; deseasonalize or detrend first if needed",{"type":41,"tag":159,"props":656,"children":657},{},[658,663],{"type":41,"tag":54,"props":659,"children":660},{},[661],{"type":47,"value":662},"Minimum segment length",{"type":47,"value":664}," — most algorithms require a minimum segment size (e.g. 10–20 observations) to estimate statistics reliably; very short segments between close-together breaks are unreliable",{"type":41,"tag":159,"props":666,"children":667},{},[668,673],{"type":41,"tag":54,"props":669,"children":670},{},[671],{"type":47,"value":672},"Penalty calibration",{"type":47,"value":674}," — the penalty parameter (often BIC-based) controls the number of detected breaks; there is no universally \"correct\" penalty — use domain knowledge to validate whether the detected breaks correspond to real events",{"type":41,"tag":159,"props":676,"children":677},{},[678,683],{"type":41,"tag":54,"props":679,"children":680},{},[681],{"type":47,"value":682},"Gradual vs abrupt changes",{"type":47,"value":684}," — change-point methods detect abrupt transitions; a gradual drift (e.g. a slow ramp-up over 3 years) may be split into multiple artificial breakpoints; use a higher penalty or a trend-change model",{"type":41,"tag":159,"props":686,"children":687},{},[688,693],{"type":41,"tag":54,"props":689,"children":690},{},[691],{"type":47,"value":692},"Multiple testing",{"type":47,"value":694}," — examining a long series for breakpoints involves many implicit comparisons; some detected breaks may be false positives, especially at low penalty values; always validate against known events or domain knowledge",{"type":41,"tag":42,"props":696,"children":698},{"id":697},"related-tools",[699],{"type":47,"value":700},"Related Tools",{"type":41,"tag":50,"props":702,"children":703},{},[704,706,712,714,720,722,728,730,736],{"type":47,"value":705},"Use the ",{"type":41,"tag":210,"props":707,"children":709},{"href":708},"/tools/time-series-decomposition",[710],{"type":47,"value":711},"Time Series Decomposition",{"type":47,"value":713}," tool to separate trend, seasonal, and residual components before applying change-point detection to the residuals for a cleaner signal. Use the ",{"type":41,"tag":210,"props":715,"children":717},{"href":716},"/tools/trendline-calculator",[718],{"type":47,"value":719},"Trendline Calculator",{"type":47,"value":721}," to fit separate trendlines to each identified segment after detection. Use the ",{"type":41,"tag":210,"props":723,"children":725},{"href":724},"/tools/seasonality-analysis",[726],{"type":47,"value":727},"Seasonality Analysis",{"type":47,"value":729}," tool to check whether an apparent change point is actually a shift in the seasonal pattern rather than the level. Use the ",{"type":41,"tag":210,"props":731,"children":733},{"href":732},"/tools/moving-median-filter",[734],{"type":47,"value":735},"Moving Median Filter",{"type":47,"value":737}," to smooth the series and reduce noise before running change-point detection on slowly evolving series.",{"type":41,"tag":42,"props":739,"children":741},{"id":740},"frequently-asked-questions",[742],{"type":47,"value":743},"Frequently Asked Questions",{"type":41,"tag":50,"props":745,"children":746},{},[747,752,754,758,760,765,767,772,774,779,781,786],{"type":41,"tag":54,"props":748,"children":749},{},[750],{"type":47,"value":751},"How do I choose the penalty parameter?",{"type":47,"value":753},"\nThe ",{"type":41,"tag":54,"props":755,"children":756},{},[757],{"type":47,"value":105},{"type":47,"value":759}," is the key tuning parameter — it trades off the goodness of fit against model complexity (number of breakpoints). Common choices: ",{"type":41,"tag":54,"props":761,"children":762},{},[763],{"type":47,"value":764},"BIC-equivalent penalty",{"type":47,"value":766}," = log(n) × σ² (where n is series length and σ² is noise variance), which is a reasonable default; ",{"type":41,"tag":54,"props":768,"children":769},{},[770],{"type":47,"value":771},"manual elbow method",{"type":47,"value":773}," (run PELT for penalty values 1 through 50, plot number of breaks vs penalty, pick the penalty at the \"elbow\" where adding more breaks gives little improvement); or ",{"type":41,"tag":54,"props":775,"children":776},{},[777],{"type":47,"value":778},"domain knowledge",{"type":47,"value":780}," (you expect approximately 2–4 breaks in a 50-year series — set the penalty to produce that number). Ask the AI to ",{"type":41,"tag":194,"props":782,"children":783},{},[784],{"type":47,"value":785},"\"run change-point detection for penalty values 2, 5, 10, 20, 50 and plot the number of detected breaks vs penalty\"",{"type":47,"value":787},".",{"type":41,"tag":50,"props":789,"children":790},{},[791,796,801,803,808,810,815],{"type":41,"tag":54,"props":792,"children":793},{},[794],{"type":47,"value":795},"What is the difference between PELT, Binary Segmentation, and BOCPD?",{"type":41,"tag":54,"props":797,"children":798},{},[799],{"type":47,"value":800},"PELT",{"type":47,"value":802}," (Pruned Exact Linear Time) finds the globally optimal set of breakpoints in O(n) time by pruning the search space — it is the standard choice for offline analysis where all data is available. ",{"type":41,"tag":54,"props":804,"children":805},{},[806],{"type":47,"value":807},"Binary Segmentation",{"type":47,"value":809}," recursively splits the series at the point of greatest contrast — it is faster but suboptimal (greedy). ",{"type":41,"tag":54,"props":811,"children":812},{},[813],{"type":47,"value":814},"BOCPD",{"type":47,"value":816}," (Bayesian Online Change-Point Detection) computes a posterior probability of a break at each new point as data arrives — it is designed for real-time streaming use cases. For historical analysis, PELT is generally preferred; for live monitoring, BOCPD.",{"type":41,"tag":50,"props":818,"children":819},{},[820,825,827,832,834,839,841,846,848,854],{"type":41,"tag":54,"props":821,"children":822},{},[823],{"type":47,"value":824},"My algorithm finds too many or too few change points — what should I do?",{"type":47,"value":826},"\nIf ",{"type":41,"tag":54,"props":828,"children":829},{},[830],{"type":47,"value":831},"too many",{"type":47,"value":833},": increase the penalty parameter (try BIC-based penalty or double the current value); set a larger minimum segment length. If ",{"type":41,"tag":54,"props":835,"children":836},{},[837],{"type":47,"value":838},"too few",{"type":47,"value":840},": decrease the penalty; check that you haven't detrended the series too aggressively (leaving no signal to detect); try a different cost function (RBF detects variance changes, not just mean shifts). You can also ask the AI to ",{"type":41,"tag":194,"props":842,"children":843},{},[844],{"type":47,"value":845},"\"fix the number of breakpoints at exactly 3 and find the optimal locations\"",{"type":47,"value":847}," — most ruptures algorithms support a fixed ",{"type":41,"tag":272,"props":849,"children":851},{"className":850},[],[852],{"type":47,"value":853},"n_bkps",{"type":47,"value":855}," parameter.",{"type":41,"tag":50,"props":857,"children":858},{},[859,864,866,871,873,878,880,885],{"type":41,"tag":54,"props":860,"children":861},{},[862],{"type":47,"value":863},"How do I validate that a detected change point is real?",{"type":47,"value":865},"\nThe strongest validation is ",{"type":41,"tag":54,"props":867,"children":868},{},[869],{"type":47,"value":870},"external consistency",{"type":47,"value":872}," — does the detected breakpoint date coincide with a known event? (Policy change, financial crisis, technological shift, natural disaster.) If yes, it is likely real. Statistical validation: run a ",{"type":41,"tag":54,"props":874,"children":875},{},[876],{"type":47,"value":877},"Chow test",{"type":47,"value":879}," (if using OLS-style segmentation) or compute the BIC for the model with the breakpoint versus the model without it — the breakpoint is justified if BIC decreases by more than 2. Ask the AI to ",{"type":41,"tag":194,"props":881,"children":882},{},[883],{"type":47,"value":884},"\"run a Chow test at the detected breakpoint date to test whether the structural break is statistically significant\"",{"type":47,"value":787},{"title":7,"searchDepth":887,"depth":887,"links":888},2,[889,890,891,892,893,894,895,896],{"id":44,"depth":887,"text":48},{"id":150,"depth":887,"text":153},{"id":228,"depth":887,"text":231},{"id":352,"depth":887,"text":355},{"id":508,"depth":887,"text":511},{"id":637,"depth":887,"text":640},{"id":697,"depth":887,"text":700},{"id":740,"depth":887,"text":743},"markdown","content:tools:055.change-point-detection.md","content","tools/055.change-point-detection.md","tools/055.change-point-detection","md",{"loc":4},1775502471848]