[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-statistical-analysis":3,"mdc--hfrtd8-key":37,"related-org-anthropic-statistical-analysis":1368,"related-repo-anthropic-statistical-analysis":1557},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"statistical-analysis","apply statistical analysis methods","Apply statistical methods including descriptive stats, trend analysis, outlier detection, and hypothesis testing. Use when analyzing distributions, testing for significance, detecting anomalies, computing correlations, or interpreting statistical results.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"anthropic","Anthropic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fanthropic.png","anthropics",[13,17,20,23],{"name":14,"slug":15,"type":16},"Data Analysis","data-analysis","tag",{"name":18,"slug":19,"type":16},"Python","python",{"name":21,"slug":22,"type":16},"Analytics","analytics",{"name":24,"slug":25,"type":16},"Statistics","statistics",22885,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins","2026-04-06T17:57:19.09592",null,2736,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Open source repository of plugins primarily intended for knowledge workers to use in Claude Cowork","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fknowledge-work-plugins\u002Ftree\u002FHEAD\u002Fdata\u002Fskills\u002Fstatistical-analysis","---\nname: statistical-analysis\ndescription: Apply statistical methods including descriptive stats, trend analysis, outlier detection, and hypothesis testing. Use when analyzing distributions, testing for significance, detecting anomalies, computing correlations, or interpreting statistical results.\nuser-invocable: false\n---\n\n# Statistical Analysis Skill\n\nDescriptive statistics, trend analysis, outlier detection, hypothesis testing, and guidance on when to be cautious about statistical claims.\n\n## Descriptive Statistics Methodology\n\n### Central Tendency\n\nChoose the right measure of center based on the data:\n\n| Situation | Use | Why |\n|---|---|---|\n| Symmetric distribution, no outliers | Mean | Most efficient estimator |\n| Skewed distribution | Median | Robust to outliers |\n| Categorical or ordinal data | Mode | Only option for non-numeric |\n| Highly skewed with outliers (e.g., revenue per user) | Median + mean | Report both; the gap shows skew |\n\n**Always report mean and median together for business metrics.** If they diverge significantly, the data is skewed and the mean alone is misleading.\n\n### Spread and Variability\n\n- **Standard deviation**: How far values typically fall from the mean. Use with normally distributed data.\n- **Interquartile range (IQR)**: Distance from p25 to p75. Robust to outliers. Use with skewed data.\n- **Coefficient of variation (CV)**: StdDev \u002F Mean. Use to compare variability across metrics with different scales.\n- **Range**: Max minus min. Sensitive to outliers but gives a quick sense of data extent.\n\n### Percentiles for Business Context\n\nReport key percentiles to tell a richer story than mean alone:\n\n```\np1:   Bottom 1% (floor \u002F minimum typical value)\np5:   Low end of normal range\np25:  First quartile\np50:  Median (typical user)\np75:  Third quartile\np90:  Top 10% \u002F power users\np95:  High end of normal range\np99:  Top 1% \u002F extreme users\n```\n\n**Example narrative**: \"The median session duration is 4.2 minutes, but the top 10% of users spend over 22 minutes per session, pulling the mean up to 7.8 minutes.\"\n\n### Describing Distributions\n\nCharacterize every numeric distribution you analyze:\n\n- **Shape**: Normal, right-skewed, left-skewed, bimodal, uniform, heavy-tailed\n- **Center**: Mean and median (and the gap between them)\n- **Spread**: Standard deviation or IQR\n- **Outliers**: How many and how extreme\n- **Bounds**: Is there a natural floor (zero) or ceiling (100%)?\n\n## Trend Analysis and Forecasting\n\n### Identifying Trends\n\n**Moving averages** to smooth noise:\n```python\n# 7-day moving average (good for daily data with weekly seasonality)\ndf['ma_7d'] = df['metric'].rolling(window=7, min_periods=1).mean()\n\n# 28-day moving average (smooths weekly AND monthly patterns)\ndf['ma_28d'] = df['metric'].rolling(window=28, min_periods=1).mean()\n```\n\n**Period-over-period comparison**:\n- Week-over-week (WoW): Compare to same day last week\n- Month-over-month (MoM): Compare to same month prior\n- Year-over-year (YoY): Gold standard for seasonal businesses\n- Same-day-last-year: Compare specific calendar day\n\n**Growth rates**:\n```\nSimple growth: (current - previous) \u002F previous\nCAGR: (ending \u002F beginning) ^ (1 \u002F years) - 1\nLog growth: ln(current \u002F previous)  -- better for volatile series\n```\n\n### Seasonality Detection\n\nCheck for periodic patterns:\n1. Plot the raw time series -- visual inspection first\n2. Compute day-of-week averages: is there a clear weekly pattern?\n3. Compute month-of-year averages: is there an annual cycle?\n4. When comparing periods, always use YoY or same-period comparisons to avoid conflating trend with seasonality\n\n### Forecasting (Simple Methods)\n\nFor business analysts (not data scientists), use straightforward methods:\n\n- **Naive forecast**: Tomorrow = today. Use as a baseline.\n- **Seasonal naive**: Tomorrow = same day last week\u002Fyear.\n- **Linear trend**: Fit a line to historical data. Only for clearly linear trends.\n- **Moving average forecast**: Use trailing average as the forecast.\n\n**Always communicate uncertainty**. Provide a range, not a point estimate:\n- \"We expect 10K-12K signups next month based on the 3-month trend\"\n- NOT \"We will get exactly 11,234 signups next month\"\n\n**When to escalate to a data scientist**: Non-linear trends, multiple seasonalities, external factors (marketing spend, holidays), or when forecast accuracy matters for resource allocation.\n\n## Outlier and Anomaly Detection\n\n### Statistical Methods\n\n**Z-score method** (for normally distributed data):\n```python\nz_scores = (df['value'] - df['value'].mean()) \u002F df['value'].std()\noutliers = df[abs(z_scores) > 3]  # More than 3 standard deviations\n```\n\n**IQR method** (robust to non-normal distributions):\n```python\nQ1 = df['value'].quantile(0.25)\nQ3 = df['value'].quantile(0.75)\nIQR = Q3 - Q1\nlower_bound = Q1 - 1.5 * IQR\nupper_bound = Q3 + 1.5 * IQR\noutliers = df[(df['value'] \u003C lower_bound) | (df['value'] > upper_bound)]\n```\n\n**Percentile method** (simplest):\n```python\noutliers = df[(df['value'] \u003C df['value'].quantile(0.01)) |\n              (df['value'] > df['value'].quantile(0.99))]\n```\n\n### Handling Outliers\n\nDo NOT automatically remove outliers. Instead:\n\n1. **Investigate**: Is this a data error, a genuine extreme value, or a different population?\n2. **Data errors**: Fix or remove (e.g., negative ages, timestamps in year 1970)\n3. **Genuine extremes**: Keep them but consider using robust statistics (median instead of mean)\n4. **Different population**: Segment them out for separate analysis (e.g., enterprise vs. SMB customers)\n\n**Report what you did**: \"We excluded 47 records (0.3%) with transaction amounts >$50K, which represent bulk enterprise orders analyzed separately.\"\n\n### Time Series Anomaly Detection\n\nFor detecting unusual values in a time series:\n\n1. Compute expected value (moving average or same-period-last-year)\n2. Compute deviation from expected\n3. Flag deviations beyond a threshold (typically 2-3 standard deviations of the residuals)\n4. Distinguish between point anomalies (single unusual value) and change points (sustained shift)\n\n## Hypothesis Testing Basics\n\n### When to Use\n\nUse hypothesis testing when you need to determine whether an observed difference is likely real or could be due to random chance. Common scenarios:\n\n- A\u002FB test results: Is variant B actually better than A?\n- Before\u002Fafter comparison: Did the product change actually move the metric?\n- Segment comparison: Do enterprise customers really have higher retention?\n\n### The Framework\n\n1. **Null hypothesis (H0)**: There is no difference (the default assumption)\n2. **Alternative hypothesis (H1)**: There is a difference\n3. **Choose significance level (alpha)**: Typically 0.05 (5% chance of false positive)\n4. **Compute test statistic and p-value**\n5. **Interpret**: If p \u003C alpha, reject H0 (evidence of a real difference)\n\n### Common Tests\n\n| Scenario | Test | When to Use |\n|---|---|---|\n| Compare two group means | t-test (independent) | Normal data, two groups |\n| Compare two group proportions | z-test for proportions | Conversion rates, binary outcomes |\n| Compare paired measurements | Paired t-test | Before\u002Fafter on same entities |\n| Compare 3+ group means | ANOVA | Multiple segments or variants |\n| Non-normal data, two groups | Mann-Whitney U test | Skewed metrics, ordinal data |\n| Association between categories | Chi-squared test | Two categorical variables |\n\n### Practical Significance vs. Statistical Significance\n\n**Statistical significance** means the difference is unlikely due to chance.\n\n**Practical significance** means the difference is large enough to matter for business decisions.\n\nA difference can be statistically significant but practically meaningless (common with large samples). Always report:\n- **Effect size**: How big is the difference? (e.g., \"Variant B improved conversion by 0.3 percentage points\")\n- **Confidence interval**: What's the range of plausible true effects?\n- **Business impact**: What does this translate to in revenue, users, or other business terms?\n\n### Sample Size Considerations\n\n- Small samples produce unreliable results, even with significant p-values\n- Rule of thumb for proportions: Need at least 30 events per group for basic reliability\n- For detecting small effects (e.g., 1% conversion rate change), you may need thousands of observations per group\n- If your sample is small, say so: \"With only 200 observations per group, we have limited power to detect effects smaller than X%\"\n\n## When to Be Cautious About Statistical Claims\n\n### Correlation Is Not Causation\n\nWhen you find a correlation, explicitly consider:\n- **Reverse causation**: Maybe B causes A, not A causes B\n- **Confounding variables**: Maybe C causes both A and B\n- **Coincidence**: With enough variables, spurious correlations are inevitable\n\n**What you can say**: \"Users who use feature X have 30% higher retention\"\n**What you cannot say without more evidence**: \"Feature X causes 30% higher retention\"\n\n### Multiple Comparisons Problem\n\nWhen you test many hypotheses, some will be \"significant\" by chance:\n- Testing 20 metrics at p=0.05 means ~1 will be falsely significant\n- If you looked at many segments before finding one that's different, note that\n- Adjust for multiple comparisons with Bonferroni correction (divide alpha by number of tests) or report how many tests were run\n\n### Simpson's Paradox\n\nA trend in aggregated data can reverse when data is segmented:\n- Always check whether the conclusion holds across key segments\n- Example: Overall conversion goes up, but conversion goes down in every segment -- because the mix shifted toward a higher-converting segment\n\n### Survivorship Bias\n\nYou can only analyze entities that \"survived\" to be in your dataset:\n- Analyzing active users ignores those who churned\n- Analyzing successful companies ignores those that failed\n- Always ask: \"Who is missing from this dataset, and would their inclusion change the conclusion?\"\n\n### Ecological Fallacy\n\nAggregate trends may not apply to individuals:\n- \"Countries with higher X have higher Y\" does NOT mean \"individuals with higher X have higher Y\"\n- Be careful about applying group-level findings to individual cases\n\n### Anchoring on Specific Numbers\n\nBe wary of false precision:\n- \"Churn will be 4.73% next quarter\" implies more certainty than is warranted\n- Prefer ranges: \"We expect churn between 4-6% based on historical patterns\"\n- Round appropriately: \"About 5%\" is often more honest than \"4.73%\"\n",{"data":38,"body":40},{"name":4,"description":6,"user-invocable":39},false,{"type":41,"children":42},"root",[43,52,58,65,72,77,182,193,199,244,250,255,268,278,284,289,342,348,354,364,420,430,453,462,471,477,482,506,512,517,560,570,583,593,599,605,615,638,648,704,714,737,743,748,791,801,807,812,835,841,847,852,870,876,927,933,1067,1073,1083,1093,1098,1131,1137,1160,1166,1172,1177,1210,1227,1233,1238,1256,1262,1267,1280,1286,1291,1309,1315,1320,1333,1339,1344,1362],{"type":44,"tag":45,"props":46,"children":48},"element","h1",{"id":47},"statistical-analysis-skill",[49],{"type":50,"value":51},"text","Statistical Analysis Skill",{"type":44,"tag":53,"props":54,"children":55},"p",{},[56],{"type":50,"value":57},"Descriptive statistics, trend analysis, outlier detection, hypothesis testing, and guidance on when to be cautious about statistical claims.",{"type":44,"tag":59,"props":60,"children":62},"h2",{"id":61},"descriptive-statistics-methodology",[63],{"type":50,"value":64},"Descriptive Statistics Methodology",{"type":44,"tag":66,"props":67,"children":69},"h3",{"id":68},"central-tendency",[70],{"type":50,"value":71},"Central Tendency",{"type":44,"tag":53,"props":73,"children":74},{},[75],{"type":50,"value":76},"Choose the right measure of center based on the data:",{"type":44,"tag":78,"props":79,"children":80},"table",{},[81,105],{"type":44,"tag":82,"props":83,"children":84},"thead",{},[85],{"type":44,"tag":86,"props":87,"children":88},"tr",{},[89,95,100],{"type":44,"tag":90,"props":91,"children":92},"th",{},[93],{"type":50,"value":94},"Situation",{"type":44,"tag":90,"props":96,"children":97},{},[98],{"type":50,"value":99},"Use",{"type":44,"tag":90,"props":101,"children":102},{},[103],{"type":50,"value":104},"Why",{"type":44,"tag":106,"props":107,"children":108},"tbody",{},[109,128,146,164],{"type":44,"tag":86,"props":110,"children":111},{},[112,118,123],{"type":44,"tag":113,"props":114,"children":115},"td",{},[116],{"type":50,"value":117},"Symmetric distribution, no outliers",{"type":44,"tag":113,"props":119,"children":120},{},[121],{"type":50,"value":122},"Mean",{"type":44,"tag":113,"props":124,"children":125},{},[126],{"type":50,"value":127},"Most efficient estimator",{"type":44,"tag":86,"props":129,"children":130},{},[131,136,141],{"type":44,"tag":113,"props":132,"children":133},{},[134],{"type":50,"value":135},"Skewed distribution",{"type":44,"tag":113,"props":137,"children":138},{},[139],{"type":50,"value":140},"Median",{"type":44,"tag":113,"props":142,"children":143},{},[144],{"type":50,"value":145},"Robust to outliers",{"type":44,"tag":86,"props":147,"children":148},{},[149,154,159],{"type":44,"tag":113,"props":150,"children":151},{},[152],{"type":50,"value":153},"Categorical or ordinal data",{"type":44,"tag":113,"props":155,"children":156},{},[157],{"type":50,"value":158},"Mode",{"type":44,"tag":113,"props":160,"children":161},{},[162],{"type":50,"value":163},"Only option for non-numeric",{"type":44,"tag":86,"props":165,"children":166},{},[167,172,177],{"type":44,"tag":113,"props":168,"children":169},{},[170],{"type":50,"value":171},"Highly skewed with outliers (e.g., revenue per user)",{"type":44,"tag":113,"props":173,"children":174},{},[175],{"type":50,"value":176},"Median + mean",{"type":44,"tag":113,"props":178,"children":179},{},[180],{"type":50,"value":181},"Report both; the gap shows skew",{"type":44,"tag":53,"props":183,"children":184},{},[185,191],{"type":44,"tag":186,"props":187,"children":188},"strong",{},[189],{"type":50,"value":190},"Always report mean and median together for business metrics.",{"type":50,"value":192}," If they diverge significantly, the data is skewed and the mean alone is misleading.",{"type":44,"tag":66,"props":194,"children":196},{"id":195},"spread-and-variability",[197],{"type":50,"value":198},"Spread and Variability",{"type":44,"tag":200,"props":201,"children":202},"ul",{},[203,214,224,234],{"type":44,"tag":204,"props":205,"children":206},"li",{},[207,212],{"type":44,"tag":186,"props":208,"children":209},{},[210],{"type":50,"value":211},"Standard deviation",{"type":50,"value":213},": How far values typically fall from the mean. Use with normally distributed data.",{"type":44,"tag":204,"props":215,"children":216},{},[217,222],{"type":44,"tag":186,"props":218,"children":219},{},[220],{"type":50,"value":221},"Interquartile range (IQR)",{"type":50,"value":223},": Distance from p25 to p75. Robust to outliers. Use with skewed data.",{"type":44,"tag":204,"props":225,"children":226},{},[227,232],{"type":44,"tag":186,"props":228,"children":229},{},[230],{"type":50,"value":231},"Coefficient of variation (CV)",{"type":50,"value":233},": StdDev \u002F Mean. Use to compare variability across metrics with different scales.",{"type":44,"tag":204,"props":235,"children":236},{},[237,242],{"type":44,"tag":186,"props":238,"children":239},{},[240],{"type":50,"value":241},"Range",{"type":50,"value":243},": Max minus min. Sensitive to outliers but gives a quick sense of data extent.",{"type":44,"tag":66,"props":245,"children":247},{"id":246},"percentiles-for-business-context",[248],{"type":50,"value":249},"Percentiles for Business Context",{"type":44,"tag":53,"props":251,"children":252},{},[253],{"type":50,"value":254},"Report key percentiles to tell a richer story than mean alone:",{"type":44,"tag":256,"props":257,"children":261},"pre",{"className":258,"code":260,"language":50},[259],"language-text","p1:   Bottom 1% (floor \u002F minimum typical value)\np5:   Low end of normal range\np25:  First quartile\np50:  Median (typical user)\np75:  Third quartile\np90:  Top 10% \u002F power users\np95:  High end of normal range\np99:  Top 1% \u002F extreme users\n",[262],{"type":44,"tag":263,"props":264,"children":266},"code",{"__ignoreMap":265},"",[267],{"type":50,"value":260},{"type":44,"tag":53,"props":269,"children":270},{},[271,276],{"type":44,"tag":186,"props":272,"children":273},{},[274],{"type":50,"value":275},"Example narrative",{"type":50,"value":277},": \"The median session duration is 4.2 minutes, but the top 10% of users spend over 22 minutes per session, pulling the mean up to 7.8 minutes.\"",{"type":44,"tag":66,"props":279,"children":281},{"id":280},"describing-distributions",[282],{"type":50,"value":283},"Describing Distributions",{"type":44,"tag":53,"props":285,"children":286},{},[287],{"type":50,"value":288},"Characterize every numeric distribution you analyze:",{"type":44,"tag":200,"props":290,"children":291},{},[292,302,312,322,332],{"type":44,"tag":204,"props":293,"children":294},{},[295,300],{"type":44,"tag":186,"props":296,"children":297},{},[298],{"type":50,"value":299},"Shape",{"type":50,"value":301},": Normal, right-skewed, left-skewed, bimodal, uniform, heavy-tailed",{"type":44,"tag":204,"props":303,"children":304},{},[305,310],{"type":44,"tag":186,"props":306,"children":307},{},[308],{"type":50,"value":309},"Center",{"type":50,"value":311},": Mean and median (and the gap between them)",{"type":44,"tag":204,"props":313,"children":314},{},[315,320],{"type":44,"tag":186,"props":316,"children":317},{},[318],{"type":50,"value":319},"Spread",{"type":50,"value":321},": Standard deviation or IQR",{"type":44,"tag":204,"props":323,"children":324},{},[325,330],{"type":44,"tag":186,"props":326,"children":327},{},[328],{"type":50,"value":329},"Outliers",{"type":50,"value":331},": How many and how extreme",{"type":44,"tag":204,"props":333,"children":334},{},[335,340],{"type":44,"tag":186,"props":336,"children":337},{},[338],{"type":50,"value":339},"Bounds",{"type":50,"value":341},": Is there a natural floor (zero) or ceiling (100%)?",{"type":44,"tag":59,"props":343,"children":345},{"id":344},"trend-analysis-and-forecasting",[346],{"type":50,"value":347},"Trend Analysis and Forecasting",{"type":44,"tag":66,"props":349,"children":351},{"id":350},"identifying-trends",[352],{"type":50,"value":353},"Identifying Trends",{"type":44,"tag":53,"props":355,"children":356},{},[357,362],{"type":44,"tag":186,"props":358,"children":359},{},[360],{"type":50,"value":361},"Moving averages",{"type":50,"value":363}," to smooth noise:",{"type":44,"tag":256,"props":365,"children":368},{"className":366,"code":367,"language":19,"meta":265,"style":265},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# 7-day moving average (good for daily data with weekly seasonality)\ndf['ma_7d'] = df['metric'].rolling(window=7, min_periods=1).mean()\n\n# 28-day moving average (smooths weekly AND monthly patterns)\ndf['ma_28d'] = df['metric'].rolling(window=28, min_periods=1).mean()\n",[369],{"type":44,"tag":263,"props":370,"children":371},{"__ignoreMap":265},[372,383,392,402,411],{"type":44,"tag":373,"props":374,"children":377},"span",{"class":375,"line":376},"line",1,[378],{"type":44,"tag":373,"props":379,"children":380},{},[381],{"type":50,"value":382},"# 7-day moving average (good for daily data with weekly seasonality)\n",{"type":44,"tag":373,"props":384,"children":386},{"class":375,"line":385},2,[387],{"type":44,"tag":373,"props":388,"children":389},{},[390],{"type":50,"value":391},"df['ma_7d'] = df['metric'].rolling(window=7, min_periods=1).mean()\n",{"type":44,"tag":373,"props":393,"children":395},{"class":375,"line":394},3,[396],{"type":44,"tag":373,"props":397,"children":399},{"emptyLinePlaceholder":398},true,[400],{"type":50,"value":401},"\n",{"type":44,"tag":373,"props":403,"children":405},{"class":375,"line":404},4,[406],{"type":44,"tag":373,"props":407,"children":408},{},[409],{"type":50,"value":410},"# 28-day moving average (smooths weekly AND monthly patterns)\n",{"type":44,"tag":373,"props":412,"children":414},{"class":375,"line":413},5,[415],{"type":44,"tag":373,"props":416,"children":417},{},[418],{"type":50,"value":419},"df['ma_28d'] = df['metric'].rolling(window=28, min_periods=1).mean()\n",{"type":44,"tag":53,"props":421,"children":422},{},[423,428],{"type":44,"tag":186,"props":424,"children":425},{},[426],{"type":50,"value":427},"Period-over-period comparison",{"type":50,"value":429},":",{"type":44,"tag":200,"props":431,"children":432},{},[433,438,443,448],{"type":44,"tag":204,"props":434,"children":435},{},[436],{"type":50,"value":437},"Week-over-week (WoW): Compare to same day last week",{"type":44,"tag":204,"props":439,"children":440},{},[441],{"type":50,"value":442},"Month-over-month (MoM): Compare to same month prior",{"type":44,"tag":204,"props":444,"children":445},{},[446],{"type":50,"value":447},"Year-over-year (YoY): Gold standard for seasonal businesses",{"type":44,"tag":204,"props":449,"children":450},{},[451],{"type":50,"value":452},"Same-day-last-year: Compare specific calendar day",{"type":44,"tag":53,"props":454,"children":455},{},[456,461],{"type":44,"tag":186,"props":457,"children":458},{},[459],{"type":50,"value":460},"Growth rates",{"type":50,"value":429},{"type":44,"tag":256,"props":463,"children":466},{"className":464,"code":465,"language":50},[259],"Simple growth: (current - previous) \u002F previous\nCAGR: (ending \u002F beginning) ^ (1 \u002F years) - 1\nLog growth: ln(current \u002F previous)  -- better for volatile series\n",[467],{"type":44,"tag":263,"props":468,"children":469},{"__ignoreMap":265},[470],{"type":50,"value":465},{"type":44,"tag":66,"props":472,"children":474},{"id":473},"seasonality-detection",[475],{"type":50,"value":476},"Seasonality Detection",{"type":44,"tag":53,"props":478,"children":479},{},[480],{"type":50,"value":481},"Check for periodic patterns:",{"type":44,"tag":483,"props":484,"children":485},"ol",{},[486,491,496,501],{"type":44,"tag":204,"props":487,"children":488},{},[489],{"type":50,"value":490},"Plot the raw time series -- visual inspection first",{"type":44,"tag":204,"props":492,"children":493},{},[494],{"type":50,"value":495},"Compute day-of-week averages: is there a clear weekly pattern?",{"type":44,"tag":204,"props":497,"children":498},{},[499],{"type":50,"value":500},"Compute month-of-year averages: is there an annual cycle?",{"type":44,"tag":204,"props":502,"children":503},{},[504],{"type":50,"value":505},"When comparing periods, always use YoY or same-period comparisons to avoid conflating trend with seasonality",{"type":44,"tag":66,"props":507,"children":509},{"id":508},"forecasting-simple-methods",[510],{"type":50,"value":511},"Forecasting (Simple Methods)",{"type":44,"tag":53,"props":513,"children":514},{},[515],{"type":50,"value":516},"For business analysts (not data scientists), use straightforward methods:",{"type":44,"tag":200,"props":518,"children":519},{},[520,530,540,550],{"type":44,"tag":204,"props":521,"children":522},{},[523,528],{"type":44,"tag":186,"props":524,"children":525},{},[526],{"type":50,"value":527},"Naive forecast",{"type":50,"value":529},": Tomorrow = today. Use as a baseline.",{"type":44,"tag":204,"props":531,"children":532},{},[533,538],{"type":44,"tag":186,"props":534,"children":535},{},[536],{"type":50,"value":537},"Seasonal naive",{"type":50,"value":539},": Tomorrow = same day last week\u002Fyear.",{"type":44,"tag":204,"props":541,"children":542},{},[543,548],{"type":44,"tag":186,"props":544,"children":545},{},[546],{"type":50,"value":547},"Linear trend",{"type":50,"value":549},": Fit a line to historical data. Only for clearly linear trends.",{"type":44,"tag":204,"props":551,"children":552},{},[553,558],{"type":44,"tag":186,"props":554,"children":555},{},[556],{"type":50,"value":557},"Moving average forecast",{"type":50,"value":559},": Use trailing average as the forecast.",{"type":44,"tag":53,"props":561,"children":562},{},[563,568],{"type":44,"tag":186,"props":564,"children":565},{},[566],{"type":50,"value":567},"Always communicate uncertainty",{"type":50,"value":569},". Provide a range, not a point estimate:",{"type":44,"tag":200,"props":571,"children":572},{},[573,578],{"type":44,"tag":204,"props":574,"children":575},{},[576],{"type":50,"value":577},"\"We expect 10K-12K signups next month based on the 3-month trend\"",{"type":44,"tag":204,"props":579,"children":580},{},[581],{"type":50,"value":582},"NOT \"We will get exactly 11,234 signups next month\"",{"type":44,"tag":53,"props":584,"children":585},{},[586,591],{"type":44,"tag":186,"props":587,"children":588},{},[589],{"type":50,"value":590},"When to escalate to a data scientist",{"type":50,"value":592},": Non-linear trends, multiple seasonalities, external factors (marketing spend, holidays), or when forecast accuracy matters for resource allocation.",{"type":44,"tag":59,"props":594,"children":596},{"id":595},"outlier-and-anomaly-detection",[597],{"type":50,"value":598},"Outlier and Anomaly Detection",{"type":44,"tag":66,"props":600,"children":602},{"id":601},"statistical-methods",[603],{"type":50,"value":604},"Statistical Methods",{"type":44,"tag":53,"props":606,"children":607},{},[608,613],{"type":44,"tag":186,"props":609,"children":610},{},[611],{"type":50,"value":612},"Z-score method",{"type":50,"value":614}," (for normally distributed data):",{"type":44,"tag":256,"props":616,"children":618},{"className":366,"code":617,"language":19,"meta":265,"style":265},"z_scores = (df['value'] - df['value'].mean()) \u002F df['value'].std()\noutliers = df[abs(z_scores) > 3]  # More than 3 standard deviations\n",[619],{"type":44,"tag":263,"props":620,"children":621},{"__ignoreMap":265},[622,630],{"type":44,"tag":373,"props":623,"children":624},{"class":375,"line":376},[625],{"type":44,"tag":373,"props":626,"children":627},{},[628],{"type":50,"value":629},"z_scores = (df['value'] - df['value'].mean()) \u002F df['value'].std()\n",{"type":44,"tag":373,"props":631,"children":632},{"class":375,"line":385},[633],{"type":44,"tag":373,"props":634,"children":635},{},[636],{"type":50,"value":637},"outliers = df[abs(z_scores) > 3]  # More than 3 standard deviations\n",{"type":44,"tag":53,"props":639,"children":640},{},[641,646],{"type":44,"tag":186,"props":642,"children":643},{},[644],{"type":50,"value":645},"IQR method",{"type":50,"value":647}," (robust to non-normal distributions):",{"type":44,"tag":256,"props":649,"children":651},{"className":366,"code":650,"language":19,"meta":265,"style":265},"Q1 = df['value'].quantile(0.25)\nQ3 = df['value'].quantile(0.75)\nIQR = Q3 - Q1\nlower_bound = Q1 - 1.5 * IQR\nupper_bound = Q3 + 1.5 * IQR\noutliers = df[(df['value'] \u003C lower_bound) | (df['value'] > upper_bound)]\n",[652],{"type":44,"tag":263,"props":653,"children":654},{"__ignoreMap":265},[655,663,671,679,687,695],{"type":44,"tag":373,"props":656,"children":657},{"class":375,"line":376},[658],{"type":44,"tag":373,"props":659,"children":660},{},[661],{"type":50,"value":662},"Q1 = df['value'].quantile(0.25)\n",{"type":44,"tag":373,"props":664,"children":665},{"class":375,"line":385},[666],{"type":44,"tag":373,"props":667,"children":668},{},[669],{"type":50,"value":670},"Q3 = df['value'].quantile(0.75)\n",{"type":44,"tag":373,"props":672,"children":673},{"class":375,"line":394},[674],{"type":44,"tag":373,"props":675,"children":676},{},[677],{"type":50,"value":678},"IQR = Q3 - Q1\n",{"type":44,"tag":373,"props":680,"children":681},{"class":375,"line":404},[682],{"type":44,"tag":373,"props":683,"children":684},{},[685],{"type":50,"value":686},"lower_bound = Q1 - 1.5 * IQR\n",{"type":44,"tag":373,"props":688,"children":689},{"class":375,"line":413},[690],{"type":44,"tag":373,"props":691,"children":692},{},[693],{"type":50,"value":694},"upper_bound = Q3 + 1.5 * IQR\n",{"type":44,"tag":373,"props":696,"children":698},{"class":375,"line":697},6,[699],{"type":44,"tag":373,"props":700,"children":701},{},[702],{"type":50,"value":703},"outliers = df[(df['value'] \u003C lower_bound) | (df['value'] > upper_bound)]\n",{"type":44,"tag":53,"props":705,"children":706},{},[707,712],{"type":44,"tag":186,"props":708,"children":709},{},[710],{"type":50,"value":711},"Percentile method",{"type":50,"value":713}," (simplest):",{"type":44,"tag":256,"props":715,"children":717},{"className":366,"code":716,"language":19,"meta":265,"style":265},"outliers = df[(df['value'] \u003C df['value'].quantile(0.01)) |\n              (df['value'] > df['value'].quantile(0.99))]\n",[718],{"type":44,"tag":263,"props":719,"children":720},{"__ignoreMap":265},[721,729],{"type":44,"tag":373,"props":722,"children":723},{"class":375,"line":376},[724],{"type":44,"tag":373,"props":725,"children":726},{},[727],{"type":50,"value":728},"outliers = df[(df['value'] \u003C df['value'].quantile(0.01)) |\n",{"type":44,"tag":373,"props":730,"children":731},{"class":375,"line":385},[732],{"type":44,"tag":373,"props":733,"children":734},{},[735],{"type":50,"value":736},"              (df['value'] > df['value'].quantile(0.99))]\n",{"type":44,"tag":66,"props":738,"children":740},{"id":739},"handling-outliers",[741],{"type":50,"value":742},"Handling Outliers",{"type":44,"tag":53,"props":744,"children":745},{},[746],{"type":50,"value":747},"Do NOT automatically remove outliers. Instead:",{"type":44,"tag":483,"props":749,"children":750},{},[751,761,771,781],{"type":44,"tag":204,"props":752,"children":753},{},[754,759],{"type":44,"tag":186,"props":755,"children":756},{},[757],{"type":50,"value":758},"Investigate",{"type":50,"value":760},": Is this a data error, a genuine extreme value, or a different population?",{"type":44,"tag":204,"props":762,"children":763},{},[764,769],{"type":44,"tag":186,"props":765,"children":766},{},[767],{"type":50,"value":768},"Data errors",{"type":50,"value":770},": Fix or remove (e.g., negative ages, timestamps in year 1970)",{"type":44,"tag":204,"props":772,"children":773},{},[774,779],{"type":44,"tag":186,"props":775,"children":776},{},[777],{"type":50,"value":778},"Genuine extremes",{"type":50,"value":780},": Keep them but consider using robust statistics (median instead of mean)",{"type":44,"tag":204,"props":782,"children":783},{},[784,789],{"type":44,"tag":186,"props":785,"children":786},{},[787],{"type":50,"value":788},"Different population",{"type":50,"value":790},": Segment them out for separate analysis (e.g., enterprise vs. SMB customers)",{"type":44,"tag":53,"props":792,"children":793},{},[794,799],{"type":44,"tag":186,"props":795,"children":796},{},[797],{"type":50,"value":798},"Report what you did",{"type":50,"value":800},": \"We excluded 47 records (0.3%) with transaction amounts >$50K, which represent bulk enterprise orders analyzed separately.\"",{"type":44,"tag":66,"props":802,"children":804},{"id":803},"time-series-anomaly-detection",[805],{"type":50,"value":806},"Time Series Anomaly Detection",{"type":44,"tag":53,"props":808,"children":809},{},[810],{"type":50,"value":811},"For detecting unusual values in a time series:",{"type":44,"tag":483,"props":813,"children":814},{},[815,820,825,830],{"type":44,"tag":204,"props":816,"children":817},{},[818],{"type":50,"value":819},"Compute expected value (moving average or same-period-last-year)",{"type":44,"tag":204,"props":821,"children":822},{},[823],{"type":50,"value":824},"Compute deviation from expected",{"type":44,"tag":204,"props":826,"children":827},{},[828],{"type":50,"value":829},"Flag deviations beyond a threshold (typically 2-3 standard deviations of the residuals)",{"type":44,"tag":204,"props":831,"children":832},{},[833],{"type":50,"value":834},"Distinguish between point anomalies (single unusual value) and change points (sustained shift)",{"type":44,"tag":59,"props":836,"children":838},{"id":837},"hypothesis-testing-basics",[839],{"type":50,"value":840},"Hypothesis Testing Basics",{"type":44,"tag":66,"props":842,"children":844},{"id":843},"when-to-use",[845],{"type":50,"value":846},"When to Use",{"type":44,"tag":53,"props":848,"children":849},{},[850],{"type":50,"value":851},"Use hypothesis testing when you need to determine whether an observed difference is likely real or could be due to random chance. Common scenarios:",{"type":44,"tag":200,"props":853,"children":854},{},[855,860,865],{"type":44,"tag":204,"props":856,"children":857},{},[858],{"type":50,"value":859},"A\u002FB test results: Is variant B actually better than A?",{"type":44,"tag":204,"props":861,"children":862},{},[863],{"type":50,"value":864},"Before\u002Fafter comparison: Did the product change actually move the metric?",{"type":44,"tag":204,"props":866,"children":867},{},[868],{"type":50,"value":869},"Segment comparison: Do enterprise customers really have higher retention?",{"type":44,"tag":66,"props":871,"children":873},{"id":872},"the-framework",[874],{"type":50,"value":875},"The Framework",{"type":44,"tag":483,"props":877,"children":878},{},[879,889,899,909,917],{"type":44,"tag":204,"props":880,"children":881},{},[882,887],{"type":44,"tag":186,"props":883,"children":884},{},[885],{"type":50,"value":886},"Null hypothesis (H0)",{"type":50,"value":888},": There is no difference (the default assumption)",{"type":44,"tag":204,"props":890,"children":891},{},[892,897],{"type":44,"tag":186,"props":893,"children":894},{},[895],{"type":50,"value":896},"Alternative hypothesis (H1)",{"type":50,"value":898},": There is a difference",{"type":44,"tag":204,"props":900,"children":901},{},[902,907],{"type":44,"tag":186,"props":903,"children":904},{},[905],{"type":50,"value":906},"Choose significance level (alpha)",{"type":50,"value":908},": Typically 0.05 (5% chance of false positive)",{"type":44,"tag":204,"props":910,"children":911},{},[912],{"type":44,"tag":186,"props":913,"children":914},{},[915],{"type":50,"value":916},"Compute test statistic and p-value",{"type":44,"tag":204,"props":918,"children":919},{},[920,925],{"type":44,"tag":186,"props":921,"children":922},{},[923],{"type":50,"value":924},"Interpret",{"type":50,"value":926},": If p \u003C alpha, reject H0 (evidence of a real difference)",{"type":44,"tag":66,"props":928,"children":930},{"id":929},"common-tests",[931],{"type":50,"value":932},"Common Tests",{"type":44,"tag":78,"props":934,"children":935},{},[936,956],{"type":44,"tag":82,"props":937,"children":938},{},[939],{"type":44,"tag":86,"props":940,"children":941},{},[942,947,952],{"type":44,"tag":90,"props":943,"children":944},{},[945],{"type":50,"value":946},"Scenario",{"type":44,"tag":90,"props":948,"children":949},{},[950],{"type":50,"value":951},"Test",{"type":44,"tag":90,"props":953,"children":954},{},[955],{"type":50,"value":846},{"type":44,"tag":106,"props":957,"children":958},{},[959,977,995,1013,1031,1049],{"type":44,"tag":86,"props":960,"children":961},{},[962,967,972],{"type":44,"tag":113,"props":963,"children":964},{},[965],{"type":50,"value":966},"Compare two group means",{"type":44,"tag":113,"props":968,"children":969},{},[970],{"type":50,"value":971},"t-test (independent)",{"type":44,"tag":113,"props":973,"children":974},{},[975],{"type":50,"value":976},"Normal data, two groups",{"type":44,"tag":86,"props":978,"children":979},{},[980,985,990],{"type":44,"tag":113,"props":981,"children":982},{},[983],{"type":50,"value":984},"Compare two group proportions",{"type":44,"tag":113,"props":986,"children":987},{},[988],{"type":50,"value":989},"z-test for proportions",{"type":44,"tag":113,"props":991,"children":992},{},[993],{"type":50,"value":994},"Conversion rates, binary outcomes",{"type":44,"tag":86,"props":996,"children":997},{},[998,1003,1008],{"type":44,"tag":113,"props":999,"children":1000},{},[1001],{"type":50,"value":1002},"Compare paired measurements",{"type":44,"tag":113,"props":1004,"children":1005},{},[1006],{"type":50,"value":1007},"Paired t-test",{"type":44,"tag":113,"props":1009,"children":1010},{},[1011],{"type":50,"value":1012},"Before\u002Fafter on same entities",{"type":44,"tag":86,"props":1014,"children":1015},{},[1016,1021,1026],{"type":44,"tag":113,"props":1017,"children":1018},{},[1019],{"type":50,"value":1020},"Compare 3+ group means",{"type":44,"tag":113,"props":1022,"children":1023},{},[1024],{"type":50,"value":1025},"ANOVA",{"type":44,"tag":113,"props":1027,"children":1028},{},[1029],{"type":50,"value":1030},"Multiple segments or variants",{"type":44,"tag":86,"props":1032,"children":1033},{},[1034,1039,1044],{"type":44,"tag":113,"props":1035,"children":1036},{},[1037],{"type":50,"value":1038},"Non-normal data, two groups",{"type":44,"tag":113,"props":1040,"children":1041},{},[1042],{"type":50,"value":1043},"Mann-Whitney U test",{"type":44,"tag":113,"props":1045,"children":1046},{},[1047],{"type":50,"value":1048},"Skewed metrics, ordinal data",{"type":44,"tag":86,"props":1050,"children":1051},{},[1052,1057,1062],{"type":44,"tag":113,"props":1053,"children":1054},{},[1055],{"type":50,"value":1056},"Association between categories",{"type":44,"tag":113,"props":1058,"children":1059},{},[1060],{"type":50,"value":1061},"Chi-squared test",{"type":44,"tag":113,"props":1063,"children":1064},{},[1065],{"type":50,"value":1066},"Two categorical variables",{"type":44,"tag":66,"props":1068,"children":1070},{"id":1069},"practical-significance-vs-statistical-significance",[1071],{"type":50,"value":1072},"Practical Significance vs. Statistical Significance",{"type":44,"tag":53,"props":1074,"children":1075},{},[1076,1081],{"type":44,"tag":186,"props":1077,"children":1078},{},[1079],{"type":50,"value":1080},"Statistical significance",{"type":50,"value":1082}," means the difference is unlikely due to chance.",{"type":44,"tag":53,"props":1084,"children":1085},{},[1086,1091],{"type":44,"tag":186,"props":1087,"children":1088},{},[1089],{"type":50,"value":1090},"Practical significance",{"type":50,"value":1092}," means the difference is large enough to matter for business decisions.",{"type":44,"tag":53,"props":1094,"children":1095},{},[1096],{"type":50,"value":1097},"A difference can be statistically significant but practically meaningless (common with large samples). Always report:",{"type":44,"tag":200,"props":1099,"children":1100},{},[1101,1111,1121],{"type":44,"tag":204,"props":1102,"children":1103},{},[1104,1109],{"type":44,"tag":186,"props":1105,"children":1106},{},[1107],{"type":50,"value":1108},"Effect size",{"type":50,"value":1110},": How big is the difference? (e.g., \"Variant B improved conversion by 0.3 percentage points\")",{"type":44,"tag":204,"props":1112,"children":1113},{},[1114,1119],{"type":44,"tag":186,"props":1115,"children":1116},{},[1117],{"type":50,"value":1118},"Confidence interval",{"type":50,"value":1120},": What's the range of plausible true effects?",{"type":44,"tag":204,"props":1122,"children":1123},{},[1124,1129],{"type":44,"tag":186,"props":1125,"children":1126},{},[1127],{"type":50,"value":1128},"Business impact",{"type":50,"value":1130},": What does this translate to in revenue, users, or other business terms?",{"type":44,"tag":66,"props":1132,"children":1134},{"id":1133},"sample-size-considerations",[1135],{"type":50,"value":1136},"Sample Size Considerations",{"type":44,"tag":200,"props":1138,"children":1139},{},[1140,1145,1150,1155],{"type":44,"tag":204,"props":1141,"children":1142},{},[1143],{"type":50,"value":1144},"Small samples produce unreliable results, even with significant p-values",{"type":44,"tag":204,"props":1146,"children":1147},{},[1148],{"type":50,"value":1149},"Rule of thumb for proportions: Need at least 30 events per group for basic reliability",{"type":44,"tag":204,"props":1151,"children":1152},{},[1153],{"type":50,"value":1154},"For detecting small effects (e.g., 1% conversion rate change), you may need thousands of observations per group",{"type":44,"tag":204,"props":1156,"children":1157},{},[1158],{"type":50,"value":1159},"If your sample is small, say so: \"With only 200 observations per group, we have limited power to detect effects smaller than X%\"",{"type":44,"tag":59,"props":1161,"children":1163},{"id":1162},"when-to-be-cautious-about-statistical-claims",[1164],{"type":50,"value":1165},"When to Be Cautious About Statistical Claims",{"type":44,"tag":66,"props":1167,"children":1169},{"id":1168},"correlation-is-not-causation",[1170],{"type":50,"value":1171},"Correlation Is Not Causation",{"type":44,"tag":53,"props":1173,"children":1174},{},[1175],{"type":50,"value":1176},"When you find a correlation, explicitly consider:",{"type":44,"tag":200,"props":1178,"children":1179},{},[1180,1190,1200],{"type":44,"tag":204,"props":1181,"children":1182},{},[1183,1188],{"type":44,"tag":186,"props":1184,"children":1185},{},[1186],{"type":50,"value":1187},"Reverse causation",{"type":50,"value":1189},": Maybe B causes A, not A causes B",{"type":44,"tag":204,"props":1191,"children":1192},{},[1193,1198],{"type":44,"tag":186,"props":1194,"children":1195},{},[1196],{"type":50,"value":1197},"Confounding variables",{"type":50,"value":1199},": Maybe C causes both A and B",{"type":44,"tag":204,"props":1201,"children":1202},{},[1203,1208],{"type":44,"tag":186,"props":1204,"children":1205},{},[1206],{"type":50,"value":1207},"Coincidence",{"type":50,"value":1209},": With enough variables, spurious correlations are inevitable",{"type":44,"tag":53,"props":1211,"children":1212},{},[1213,1218,1220,1225],{"type":44,"tag":186,"props":1214,"children":1215},{},[1216],{"type":50,"value":1217},"What you can say",{"type":50,"value":1219},": \"Users who use feature X have 30% higher retention\"\n",{"type":44,"tag":186,"props":1221,"children":1222},{},[1223],{"type":50,"value":1224},"What you cannot say without more evidence",{"type":50,"value":1226},": \"Feature X causes 30% higher retention\"",{"type":44,"tag":66,"props":1228,"children":1230},{"id":1229},"multiple-comparisons-problem",[1231],{"type":50,"value":1232},"Multiple Comparisons Problem",{"type":44,"tag":53,"props":1234,"children":1235},{},[1236],{"type":50,"value":1237},"When you test many hypotheses, some will be \"significant\" by chance:",{"type":44,"tag":200,"props":1239,"children":1240},{},[1241,1246,1251],{"type":44,"tag":204,"props":1242,"children":1243},{},[1244],{"type":50,"value":1245},"Testing 20 metrics at p=0.05 means ~1 will be falsely significant",{"type":44,"tag":204,"props":1247,"children":1248},{},[1249],{"type":50,"value":1250},"If you looked at many segments before finding one that's different, note that",{"type":44,"tag":204,"props":1252,"children":1253},{},[1254],{"type":50,"value":1255},"Adjust for multiple comparisons with Bonferroni correction (divide alpha by number of tests) or report how many tests were run",{"type":44,"tag":66,"props":1257,"children":1259},{"id":1258},"simpsons-paradox",[1260],{"type":50,"value":1261},"Simpson's Paradox",{"type":44,"tag":53,"props":1263,"children":1264},{},[1265],{"type":50,"value":1266},"A trend in aggregated data can reverse when data is segmented:",{"type":44,"tag":200,"props":1268,"children":1269},{},[1270,1275],{"type":44,"tag":204,"props":1271,"children":1272},{},[1273],{"type":50,"value":1274},"Always check whether the conclusion holds across key segments",{"type":44,"tag":204,"props":1276,"children":1277},{},[1278],{"type":50,"value":1279},"Example: Overall conversion goes up, but conversion goes down in every segment -- because the mix shifted toward a higher-converting segment",{"type":44,"tag":66,"props":1281,"children":1283},{"id":1282},"survivorship-bias",[1284],{"type":50,"value":1285},"Survivorship Bias",{"type":44,"tag":53,"props":1287,"children":1288},{},[1289],{"type":50,"value":1290},"You can only analyze entities that \"survived\" to be in your dataset:",{"type":44,"tag":200,"props":1292,"children":1293},{},[1294,1299,1304],{"type":44,"tag":204,"props":1295,"children":1296},{},[1297],{"type":50,"value":1298},"Analyzing active users ignores those who churned",{"type":44,"tag":204,"props":1300,"children":1301},{},[1302],{"type":50,"value":1303},"Analyzing successful companies ignores those that failed",{"type":44,"tag":204,"props":1305,"children":1306},{},[1307],{"type":50,"value":1308},"Always ask: \"Who is missing from this dataset, and would their inclusion change the conclusion?\"",{"type":44,"tag":66,"props":1310,"children":1312},{"id":1311},"ecological-fallacy",[1313],{"type":50,"value":1314},"Ecological Fallacy",{"type":44,"tag":53,"props":1316,"children":1317},{},[1318],{"type":50,"value":1319},"Aggregate trends may not apply to individuals:",{"type":44,"tag":200,"props":1321,"children":1322},{},[1323,1328],{"type":44,"tag":204,"props":1324,"children":1325},{},[1326],{"type":50,"value":1327},"\"Countries with higher X have higher Y\" does NOT mean \"individuals with higher X have higher Y\"",{"type":44,"tag":204,"props":1329,"children":1330},{},[1331],{"type":50,"value":1332},"Be careful about applying group-level findings to individual cases",{"type":44,"tag":66,"props":1334,"children":1336},{"id":1335},"anchoring-on-specific-numbers",[1337],{"type":50,"value":1338},"Anchoring on Specific Numbers",{"type":44,"tag":53,"props":1340,"children":1341},{},[1342],{"type":50,"value":1343},"Be wary of false precision:",{"type":44,"tag":200,"props":1345,"children":1346},{},[1347,1352,1357],{"type":44,"tag":204,"props":1348,"children":1349},{},[1350],{"type":50,"value":1351},"\"Churn will be 4.73% next quarter\" implies more certainty than is warranted",{"type":44,"tag":204,"props":1353,"children":1354},{},[1355],{"type":50,"value":1356},"Prefer ranges: \"We expect churn between 4-6% based on historical patterns\"",{"type":44,"tag":204,"props":1358,"children":1359},{},[1360],{"type":50,"value":1361},"Round appropriately: \"About 5%\" is often more honest than \"4.73%\"",{"type":44,"tag":1363,"props":1364,"children":1365},"style",{},[1366],{"type":50,"value":1367},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1369,"total":1556},[1370,1391,1405,1417,1436,1449,1470,1490,1504,1519,1527,1540],{"slug":1371,"name":1371,"fn":1372,"description":1373,"org":1374,"tags":1375,"stars":1388,"repoUrl":1389,"updatedAt":1390},"algorithmic-art","create algorithmic art with p5.js","Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1376,1379,1382,1385],{"name":1377,"slug":1378,"type":16},"Creative","creative",{"name":1380,"slug":1381,"type":16},"Design","design",{"name":1383,"slug":1384,"type":16},"Generative Art","generative-art",{"name":1386,"slug":1387,"type":16},"JavaScript","javascript",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-04-06T17:56:15.455818",{"slug":1392,"name":1392,"fn":1393,"description":1394,"org":1395,"tags":1396,"stars":1388,"repoUrl":1389,"updatedAt":1404},"brand-guidelines","apply Anthropic brand colors and typography","Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1397,1400,1401],{"name":1398,"slug":1399,"type":16},"Branding","branding",{"name":1380,"slug":1381,"type":16},{"name":1402,"slug":1403,"type":16},"Typography","typography","2026-04-06T17:56:05.042852",{"slug":1406,"name":1406,"fn":1407,"description":1408,"org":1409,"tags":1410,"stars":1388,"repoUrl":1389,"updatedAt":1416},"canvas-design","create posters and visual art as PNG or PDF","Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1411,1412,1413],{"name":1377,"slug":1378,"type":16},{"name":1380,"slug":1381,"type":16},{"name":1414,"slug":1415,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":1418,"name":1418,"fn":1419,"description":1420,"org":1421,"tags":1422,"stars":1388,"repoUrl":1389,"updatedAt":1435},"claude-api","build apps with the Claude API","Reference for the Claude API \u002F Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration.\nTRIGGER — read BEFORE opening the target file; don't skip because it \"looks like a one-liner\" — whenever: the prompt names Claude\u002FAnthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`, `[1m]`); the user asks about an LLM (pricing\u002Fmodel choice\u002Flimits\u002Fcaching) — never answer from memory; OR the task is LLM-shaped with provider unstated (agent\u002FMCP\u002Ftool-definition\u002Fmulti-agent\u002FRAG\u002FLLM-judge\u002Fcomputer-use; generate\u002Fsummarize\u002Fextract\u002Fclassify\u002Frewrite\u002Fconverse over NL; debugging refusals\u002Fcutoffs\u002Fstreaming\u002Ftool-calls\u002Ftokens).\nSKIP only when another provider is being worked on (overrides all triggers): OpenAI\u002FGPT\u002FGemini\u002FLlama\u002FMistral\u002FCohere\u002FOllama named in the query; OR `grep -rE 'openai|langchain_openai|google.generativeai|genai|mistralai|cohere|ollama'` over the project hits (run this grep FIRST if no provider named — don't Read the file).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1423,1426,1427,1430,1432],{"name":1424,"slug":1425,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":1428,"slug":1429,"type":16},"Anthropic SDK","anthropic-sdk",{"name":1431,"slug":1418,"type":16},"Claude API",{"name":1433,"slug":1434,"type":16},"LLM","llm","2026-07-28T05:36:08.213335",{"slug":1437,"name":1437,"fn":1438,"description":1439,"org":1440,"tags":1441,"stars":1388,"repoUrl":1389,"updatedAt":1448},"doc-coauthoring","co-author documentation and technical specs","Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1442,1445],{"name":1443,"slug":1444,"type":16},"Documentation","documentation",{"name":1446,"slug":1447,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":1450,"name":1450,"fn":1451,"description":1452,"org":1453,"tags":1454,"stars":1388,"repoUrl":1389,"updatedAt":1469},"docx","create and edit Word documents","Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files) or Word templates (.dotx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', '.dotx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx or .dotx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1455,1458,1460,1463,1466],{"name":1456,"slug":1457,"type":16},"Documents","documents",{"name":1459,"slug":1450,"type":16},"DOCX",{"name":1461,"slug":1462,"type":16},"Office","office",{"name":1464,"slug":1465,"type":16},"Templates","templates",{"name":1467,"slug":1468,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":1471,"name":1471,"fn":1472,"description":1473,"org":1474,"tags":1475,"stars":1388,"repoUrl":1389,"updatedAt":1489},"frontend-design","design production-grade frontend interfaces","Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1476,1477,1480,1483,1486],{"name":1380,"slug":1381,"type":16},{"name":1478,"slug":1479,"type":16},"Frontend","frontend",{"name":1481,"slug":1482,"type":16},"React","react",{"name":1484,"slug":1485,"type":16},"Tailwind CSS","tailwind-css",{"name":1487,"slug":1488,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",{"slug":1491,"name":1491,"fn":1492,"description":1493,"org":1494,"tags":1495,"stars":1388,"repoUrl":1389,"updatedAt":1503},"internal-comms","write internal company communications","A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1496,1499,1500],{"name":1497,"slug":1498,"type":16},"Communications","communications",{"name":1464,"slug":1465,"type":16},{"name":1501,"slug":1502,"type":16},"Writing","writing","2026-04-06T17:56:20.695522",{"slug":1505,"name":1505,"fn":1506,"description":1507,"org":1508,"tags":1509,"stars":1388,"repoUrl":1389,"updatedAt":1518},"mcp-builder","build MCP servers","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node\u002FTypeScript (MCP SDK).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1510,1511,1514,1515],{"name":1424,"slug":1425,"type":16},{"name":1512,"slug":1513,"type":16},"API Development","api-development",{"name":1433,"slug":1434,"type":16},{"name":1516,"slug":1517,"type":16},"MCP","mcp","2026-04-06T17:56:10.357665",{"slug":1415,"name":1415,"fn":1520,"description":1521,"org":1522,"tags":1523,"stars":1388,"repoUrl":1389,"updatedAt":1526},"read edit and manipulate PDF files","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1524,1525],{"name":1456,"slug":1457,"type":16},{"name":1414,"slug":1415,"type":16},"2026-04-06T17:56:02.483316",{"slug":1528,"name":1528,"fn":1529,"description":1530,"org":1531,"tags":1532,"stars":1388,"repoUrl":1389,"updatedAt":1539},"pptx","create and edit PowerPoint presentations","Use this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates (.potx), layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx or .potx filename, regardless of what they plan to do with the content afterward. If a .pptx or .potx file needs to be opened, created, or touched, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1533,1536],{"name":1534,"slug":1535,"type":16},"PowerPoint","powerpoint",{"name":1537,"slug":1538,"type":16},"Presentations","presentations","2026-07-18T05:16:24.1471",{"slug":1541,"name":1541,"fn":1542,"description":1543,"org":1544,"tags":1545,"stars":1388,"repoUrl":1389,"updatedAt":1555},"skill-creator","create and optimize agent skills","Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1546,1547,1548,1551,1554],{"name":1424,"slug":1425,"type":16},{"name":1443,"slug":1444,"type":16},{"name":1549,"slug":1550,"type":16},"Evals","evals",{"name":1552,"slug":1553,"type":16},"Performance","performance",{"name":1446,"slug":1447,"type":16},"2026-04-19T06:45:40.804",490,{"items":1558,"total":1661},[1559,1573,1589,1601,1617,1636,1648],{"slug":1560,"name":1560,"fn":1561,"description":1562,"org":1563,"tags":1564,"stars":26,"repoUrl":27,"updatedAt":1572},"accessibility-review","run WCAG accessibility audits","Run a WCAG 2.1 AA accessibility audit on a design or page. Trigger with \"audit accessibility\", \"check a11y\", \"is this accessible?\", or when reviewing a design for color contrast, keyboard navigation, touch target size, or screen reader behavior before handoff.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1565,1568,1569],{"name":1566,"slug":1567,"type":16},"Accessibility","accessibility",{"name":1380,"slug":1381,"type":16},{"name":1570,"slug":1571,"type":16},"WCAG","wcag","2026-04-06T17:58:05.682394",{"slug":1574,"name":1574,"fn":1575,"description":1576,"org":1577,"tags":1578,"stars":26,"repoUrl":27,"updatedAt":1588},"account-research","research accounts for sales intel","Research a company or person and get actionable sales intel. Works standalone with web search, supercharged when you connect enrichment tools or your CRM. Trigger with \"research [company]\", \"look up [person]\", \"intel on [prospect]\", \"who is [name] at [company]\", or \"tell me about [company]\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1579,1582,1585],{"name":1580,"slug":1581,"type":16},"CRM","crm",{"name":1583,"slug":1584,"type":16},"Research","research",{"name":1586,"slug":1587,"type":16},"Sales","sales","2026-04-06T17:56:41.410418",{"slug":1590,"name":1590,"fn":1591,"description":1592,"org":1593,"tags":1594,"stars":26,"repoUrl":27,"updatedAt":1600},"analyze","answer data questions and run analyses","Answer data questions -- from quick lookups to full analyses. Use when looking up a single metric, investigating what's driving a trend or drop, comparing segments over time, or preparing a formal data report for stakeholders.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1595,1596,1597],{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":1598,"slug":1599,"type":16},"SQL","sql","2026-04-06T17:57:21.593647",{"slug":1602,"name":1602,"fn":1603,"description":1604,"org":1605,"tags":1606,"stars":26,"repoUrl":27,"updatedAt":1616},"architecture","create and evaluate architecture decision records","Create or evaluate an architecture decision record (ADR). Use when choosing between technologies (e.g., Kafka vs SQS), documenting a design decision with trade-offs and consequences, reviewing a system design proposal, or designing a new component from requirements and constraints.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1607,1610,1612,1613],{"name":1608,"slug":1609,"type":16},"ADR","adr",{"name":1611,"slug":1602,"type":16},"Architecture",{"name":1443,"slug":1444,"type":16},{"name":1614,"slug":1615,"type":16},"Engineering","engineering","2026-04-06T17:57:49.26444",{"slug":1618,"name":1618,"fn":1619,"description":1620,"org":1621,"tags":1622,"stars":26,"repoUrl":27,"updatedAt":1635},"audit-support","support SOX 404 control testing","Support SOX 404 compliance with control testing methodology, sample selection, and documentation standards. Use when generating testing workpapers, selecting audit samples, classifying control deficiencies, or preparing for internal or external audits.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1623,1626,1629,1632],{"name":1624,"slug":1625,"type":16},"Audit","audit",{"name":1627,"slug":1628,"type":16},"Finance","finance",{"name":1630,"slug":1631,"type":16},"Regulatory Compliance","regulatory-compliance",{"name":1633,"slug":1634,"type":16},"SOX","sox","2026-04-06T17:57:36.714815",{"slug":1637,"name":1637,"fn":1638,"description":1639,"org":1640,"tags":1641,"stars":26,"repoUrl":27,"updatedAt":1647},"brand-review","review content against brand voice","Review content against your brand voice, style guide, and messaging pillars, flagging deviations by severity with specific before\u002Fafter fixes. Use when checking a draft before it ships, when auditing copy for voice consistency and terminology, or when screening for unsubstantiated claims, missing disclaimers, and other legal flags.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1642,1643,1646],{"name":1398,"slug":1399,"type":16},{"name":1644,"slug":1645,"type":16},"Marketing","marketing",{"name":1501,"slug":1502,"type":16},"2026-04-06T17:58:19.548331",{"slug":1649,"name":1649,"fn":1650,"description":1651,"org":1652,"tags":1653,"stars":26,"repoUrl":27,"updatedAt":1660},"brand-voice-enforcement","enforce brand voice in content","This skill applies brand guidelines to content creation. It should be used when the user asks to \"write an email\", \"draft a proposal\", \"create a pitch deck\", \"write a LinkedIn post\", \"draft a presentation\", \"write a Slack message\", \"draft sales content\", or any content creation request where brand voice should be applied. Also triggers on \"on-brand\", \"brand voice\", \"enforce voice\", \"apply brand guidelines\", \"brand-aligned content\", \"write in our voice\", \"use our brand tone\", \"make this sound like us\", \"rewrite this in our tone\", or \"this doesn't sound on-brand\". Not for generating guidelines from scratch (use guideline-generation) or discovering brand materials (use discover-brand).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1654,1655,1656,1659],{"name":1398,"slug":1399,"type":16},{"name":1497,"slug":1498,"type":16},{"name":1657,"slug":1658,"type":16},"Content Creation","content-creation",{"name":1501,"slug":1502,"type":16},"2026-04-06T18:00:23.528956",200]