Repository Analysis

facebook/prophet

Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth.

6.0 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of facebook/prophet, a Python project with 20,333 GitHub stars. SynthScan v2.0 examined 30,544 lines of code across 160 source files, recording 160 pattern matches distributed across 10 syntactic categories. The overall adjusted score of 6.0 places this repository in the Low AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

6.0
Adjusted Score
6.0
Raw Score
100%
Time Factor
2026-08-01
Last Push
20.3K
Stars
Python
Language
30.5K
Lines of Code
160
Files
160
Pattern Hits
2026-08-02
Scan Date
0.04
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 7MEDIUM 0LOW 153

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 160 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers65 hits · 60 pts
SeverityFileLineSnippetContext
LOWpython/setup.py62def maybe_install_cmdstan_toolchain() -> bool:CODE
LOWpython/prophet/serialize.py139def _handle_simple_attributes_backwards_compat(model_dict: dict[str, Any]) -> None:CODE
LOWpython/prophet/plot.py557def plot_cross_validation_metric(CODE
LOWpython/prophet/plot.py884def plot_forecast_component_plotly(CODE
LOWpython/prophet/plot.py955def get_forecast_component_plotly_props(CODE
LOWpython/prophet/plot.py1070def get_seasonality_plotly_props(CODE
LOWpython/prophet/diagnostics.py382def register_performance_metric(func: _PerformanceMetricT) -> _PerformanceMetricT:CODE
LOWpython/prophet/forecaster.py540 def make_seasonality_features(CODE
LOWpython/prophet/forecaster.py568 def construct_holiday_dataframe(self, dates: pd.Series[pd.Timestamp]) -> pd.DataFrame:CODE
LOWpython/prophet/forecaster.py782 def _prepare_regressors_for_predict(CODE
LOWpython/prophet/forecaster.py960 def make_all_seasonality_features(self, df: pd.DataFrame) -> tuple[CODE
LOWpython/prophet/forecaster.py1637 def predict_seasonal_components(self, df: pd.DataFrame) -> pd.DataFrame:CODE
LOWpython/prophet/forecaster.py1705 def sample_posterior_predictive(CODE
LOWpython/prophet/forecaster.py1923 def sample_predictive_trend_vectorized(CODE
LOWpython/prophet/forecaster.py2048 def _make_historical_mat_time(CODE
LOWpython/prophet/make_holidays.py14def get_country_holidays_class(country: str) -> type[holidays.HolidayBase]:CODE
LOWpython/prophet/tests/test_diagnostics.py87 def test_bad_parallel_methods(self, ts_short, backend):CODE
LOWpython/prophet/tests/test_diagnostics.py97 def test_check_single_cutoff_forecast_func_calls(self, ts_short, monkeypatch, backend):CODE
LOWpython/prophet/tests/test_diagnostics.py127 def test_check_extra_output_columns_cross_validation(self, ts_short, backend, extra_output_columns):CODE
LOWpython/prophet/tests/test_diagnostics.py140 def test_cross_validation_logistic_or_flat_growth(self, growth, ts_short, backend):CODE
LOWpython/prophet/tests/test_diagnostics.py153 def test_cross_validation_extra_regressors(self, ts_short, backend):CODE
LOWpython/prophet/tests/test_diagnostics.py180 def test_cross_validation_metrics_with_regressor_predictor(self, backend):CODE
LOWpython/prophet/tests/test_diagnostics.py208 def test_cross_validation_with_regressor_predictor(self, backend, monkeypatch):CODE
LOWpython/prophet/tests/test_diagnostics.py239 def test_cross_validation_default_value_check(self, ts_short, backend):CODE
LOWpython/prophet/tests/test_diagnostics.py250 def test_cross_validation_custom_cutoffs(self, ts_short, backend):CODE
LOWpython/prophet/tests/test_diagnostics.py263 def test_cross_validation_uncertainty_disabled(self, ts_short, backend):CODE
LOWpython/prophet/tests/conftest.py39def pytest_collection_modifyitems(config, items):CODE
LOWpython/prophet/tests/test_utilities.py13 def test_regressor_coefficients(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py109 def test_fit_predict_no_changepoints(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py119 def test_fit_predict_no_changepoints_mcmc(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py128 def test_fit_changepoint_not_in_history(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py448 def test_fourier_series_weekly(self, daily_univariate_ts):CODE
LOWpython/prophet/tests/test_prophet.py454 def test_fourier_series_yearly(self, daily_univariate_ts):CODE
LOWpython/prophet/tests/test_prophet.py462 def test_auto_weekly_seasonality(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py73 def test_fit_predict_large_numbers(self, large_numbers_ts, backend, scaling, expected):CODE
LOWpython/prophet/tests/test_prophet.py85 def test_fit_predict_sampling(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py98 def test_fit_predict_no_seasons(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py140 def test_fit_predict_duplicates(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py154 def test_fit_predict_constant_history(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py166 def test_fit_predict_uncertainty_disabled(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py198 def test_setup_dataframe_ds_column(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py223 def test_logistic_floor_minmax(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py243 def test_make_future_dataframe(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py257 def test_make_future_dataframe_include_history(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py269 def test_invalid_growth_input(self, backend):CODE
LOWpython/prophet/tests/test_prophet.py410 def test_set_changepoint_range(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py426 def test_get_zero_changepoints(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py436 def test_override_n_changepoints(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py499 def test_auto_yearly_seasonality(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py530 def test_yearly_seasonality_warns_on_short_history(self, caplog, backend):CODE
LOWpython/prophet/tests/test_prophet.py544 def test_yearly_seasonality_no_warning_on_auto(self, caplog, backend):CODE
LOWpython/prophet/tests/test_prophet.py553 def test_auto_daily_seasonality(self, daily_univariate_ts, subdaily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py587 def test_set_seasonality_mode(self, backend):CODE
LOWpython/prophet/tests/test_prophet.py649 def test_custom_monthly_seasonality(self, backend):CODE
LOWpython/prophet/tests/test_prophet.py660 def test_duplicate_component_names(self, backend):CODE
LOWpython/prophet/tests/test_prophet.py676 def test_custom_fourier_order(self, backend):CODE
LOWpython/prophet/tests/test_prophet.py723 def test_conditional_custom_seasonality(self, daily_univariate_ts, backend):CODE
LOWpython/prophet/tests/test_prophet.py765 def test_holidays_lower_window(self, backend):CODE
LOWpython/prophet/tests/test_prophet.py782 def test_holidays_upper_window(self, backend):CODE
LOWpython/prophet/tests/test_prophet.py873 def test_fit_predict_with_country_holidays(self, daily_univariate_ts, backend):CODE
5 more matches not shown…
Over-Commented Block48 hits · 48 pts
SeverityFileLineSnippetContext
LOWR/R/plot.R1# Copyright (c) Facebook, Inc. and its affiliates.COMMENT
LOWR/R/plot.R21}COMMENT
LOWR/R/plot.R81#'COMMENT
LOWR/R/plot.R161 1)))COMMENT
LOWR/R/plot.R241 }COMMENT
LOWR/R/plot.R281 }COMMENT
LOWR/R/plot.R401#' significant. (Default 0.01)COMMENT
LOWR/R/plot.R441#'COMMENT
LOWR/R/plot.R501 attachAtBottom = TRUE)COMMENT
LOWR/R/plot.R521#' As a concrete example, if metric='mse', then this plot will show theCOMMENT
LOWR/R/prophet.R21#' provided, then the model object will be instantiated but not fit; useCOMMENT
LOWR/R/prophet.R41#' @param holidays data frame with columns holiday (character) and ds (dateCOMMENT
LOWR/R/prophet.R61#' the trend using the MAP estimate of the extrapolated generative model. IfCOMMENT
LOWR/R/prophet.R281COMMENT
LOWR/R/prophet.R301#' Prepare dataframe for fitting or predicting.COMMENT
LOWR/R/prophet.R381 df[[name]] <- (df[[name]] - props$mu) / props$stdCOMMENT
LOWR/R/prophet.R561#' @param holidays Dataframe containing holidays, as returned byCOMMENT
LOWR/R/prophet.R641#' Decreasing the prior scale will add additional regularization. If noCOMMENT
LOWR/R/prophet.R701#'COMMENT
LOWR/R/prophet.R881COMMENT
LOWR/R/prophet.R981COMMENT
LOWR/R/prophet.R1081#'COMMENT
LOWR/R/prophet.R1101#' last points in the time series.COMMENT
LOWR/R/prophet.R1121#' Initialize logistic growth.COMMENT
LOWR/R/prophet.R1161#'COMMENT
LOWR/R/prophet.R1281 return(m)COMMENT
LOWR/R/prophet.R1341#' Evaluate the flat trend function.COMMENT
LOWR/R/prophet.R1381#'COMMENT
LOWR/R/prophet.R1521#' @param df Dataframe with dates for predictions (column ds), and capacityCOMMENT
LOWR/R/prophet.R1561#' Simulate observations from the extrapolated generative model.COMMENT
LOWR/R/prophet.R1641#' @param m Prophet model object.COMMENT
LOWR/R/utilities.R1# Copyright (c) Facebook, Inc. and its affiliates.COMMENT
LOWR/R/utilities.R21#' \item{center: The mean of the regressor if it was standardized. Otherwise 0.}COMMENT
LOWR/R/data.R1# Copyright (c) Facebook, Inc. and its affiliates.COMMENT
LOWR/R/stan_backends.R81#' @param model Model object.COMMENT
LOWR/R/stan_backends.R161#' @return A named list containing "stan_fit" (the fitted stan object),COMMENT
LOWR/R/diagnostics.R1# Copyright (c) Facebook, Inc. and its affiliates.COMMENT
LOWR/R/diagnostics.R61#' technique described in https://robjhyndman.com/hyndsight/tscv/ .COMMENT
LOWR/R/diagnostics.R141COMMENT
LOWR/R/diagnostics.R181 # Merge yhat, y, and cutoff.COMMENT
LOWR/R/diagnostics.R241#'COMMENT
LOWR/R/diagnostics.R261#' will compute it separately for each horizon. The default ofCOMMENT
LOWR/R/diagnostics.R501#' Mean absolute percent errorCOMMENT
LOWR/R/diagnostics.R521#' @param w Aggregation window size.COMMENT
LOWR/R/diagnostics.R541#' @return Array of symmetric mean absolute percent errors.COMMENT
LOWdocs/_config.yml21# https://github.com/blog/2277-what-s-new-in-github-pages-with-jekyll-3-3COMMENT
LOWdocs/_config.yml41 secondary: "#f9f9f9"COMMENT
LOWdocs/_data/nav_docs.yml21# - id: CCOMMENT
Cross-Language Confusion4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHpython/prophet/forecaster.py1098 if not component_cols.equals(self.train_component_cols):CODE
HIGHpython/prophet/tests/test_diagnostics.py430 assert m1.changepoints.equals(m2.changepoints)CODE
HIGHpython/prophet/tests/test_serialize.py41 assert v.equals(m2.__dict__[k])CODE
HIGHpython/prophet/tests/test_serialize.py115 assert v.equals(m2.__dict__[k])CODE
Unused Imports17 hits · 17 pts
SeverityFileLineSnippetContext
LOWpython/prophet/serialize.py6CODE
LOWpython/prophet/plot.py6CODE
LOWpython/prophet/models.py6CODE
LOWpython/prophet/diagnostics.py6CODE
LOWpython/prophet/diagnostics.py30CODE
LOWpython/prophet/__init__.py6CODE
LOWpython/prophet/__init__.py7CODE
LOWpython/prophet/forecaster.py6CODE
LOWpython/prophet/utilities.py6CODE
LOWpython/prophet/make_holidays.py6CODE
LOWpython_shim/fbprophet/serialize.py6CODE
LOWpython_shim/fbprophet/plot.py6CODE
LOWpython_shim/fbprophet/models.py6CODE
LOWpython_shim/fbprophet/diagnostics.py6CODE
LOWpython_shim/fbprophet/__init__.py8CODE
LOWpython_shim/fbprophet/forecaster.py6CODE
LOWpython_shim/fbprophet/make_holidays.py6CODE
Cross-File Repetition3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHpython/prophet/diagnostics.py0mean absolute scale error parameters ---------- df: cross-validation results dataframe. w: aggregation window size. retuSTRING
HIGHpython/prophet/tests/test_diagnostics.py0mean absolute scale error parameters ---------- df: cross-validation results dataframe. w: aggregation window size. retuSTRING
HIGHdocs/_docs/diagnostics.md0mean absolute scale error parameters ---------- df: cross-validation results dataframe. w: aggregation window size. retuSTRING
Deep Nesting9 hits · 9 pts
SeverityFileLineSnippetContext
LOWpython/prophet/serialize.py42CODE
LOWpython/prophet/serialize.py149CODE
LOWpython/prophet/plot.py127CODE
LOWpython/prophet/plot.py431CODE
LOWpython/prophet/diagnostics.py93CODE
LOWpython/prophet/forecaster.py1705CODE
LOWpython/prophet/forecaster.py1968CODE
LOWpython/prophet/tests/test_serialize.py18CODE
LOWpython/prophet/tests/test_serialize.py60CODE
Redundant / Tautological Comments5 hits · 6 pts
SeverityFileLineSnippetContext
LOWpython/prophet/diagnostics.py204 # Check if the initial windowCOMMENT
LOWpython/scripts/generate_holidays_file.py24 # Check if anything convertedCOMMENT
LOWR/R/diagnostics.R124 # Check if the initial window (that is, the amount of time between theCOMMENT
LOWdocs/api/prophet/diagnostics.html308</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="c1"># Check if the initialCODE
LOWdocs/api/prophet/diagnostics.html1081</span><span id="cross_validation-205"><a href="#cross_validation-205"><span class="linenos">205</span></a> <span claCODE
Modern Structural Boilerplate4 hits · 4 pts
SeverityFileLineSnippetContext
LOWpython/prophet/models.py74 def set_options(self, **kwargs: Unpack[_IStanBackendOptions]) -> None:CODE
LOWpython/prophet/__init__.py9__all__ = ["Prophet", "__version__"]CODE
LOWpython/prophet/forecaster.py459 def set_changepoints(self) -> None:CODE
LOWpython/prophet/forecaster.py1171 def set_auto_seasonalities(self) -> None:CODE
Excessive Try-Catch Wrapping3 hits · 3 pts
SeverityFileLineSnippetContext
LOWpython/setup.py69 except Exception:CODE
LOWpython/prophet/models.py244 except Exception:CODE
LOWpython/prophet/forecaster.py210 except Exception as e:CODE
AI Structural Patterns2 hits · 2 pts
SeverityFileLineSnippetContext
LOWpython/prophet/plot.py647CODE
LOWpython/prophet/forecaster.py130CODE