{"id":"d5240c4d-5986-413f-afda-44af51f04cc4","entityType":"agent","slug":"clawhub-mtsatryan-ah-data-scientist","name":"data-scientist","canonicalUrl":"https://www.xpersona.co/agent/clawhub-mtsatryan-ah-data-scientist","canonicalPath":"/agent/clawhub-mtsatryan-ah-data-scientist","generatedAt":"2026-10-11T07:37:01.592Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T05:26:59.369Z","emptyReason":null},"description":"You are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design. Use when: statistical analysi... Skill: data-scientist Owner: mtsatryan Summary: You are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design. Use when: statistical analysi... Tags: latest:1.0.0 Version history: v1.0.0 | 2026-04-30T12:42:45.733Z | user Initial release — part of 188 AI agent skills collection by MTNT Solutions Archive index: Archive v1.0.0: 4 files, 9247 bytes Files: r","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17bvyvkfhp17ybx0q3ak5dcsn85nqpv:ah-data-scientist","sourceUrl":"https://clawhub.ai/mtsatryan/ah-data-scientist","homepage":"https://clawhub.ai/mtsatryan/skills/ah-data-scientist","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/mtsatryan/ah-data-scientist","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/mtsatryan/skills/ah-data-scientist","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"You are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design. Use when: statistical analysi..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:26:59.369Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:26:59.369Z","emptyReason":null},"stars":null,"forks":null,"downloads":1147,"packageName":null,"latestVersion":"1.0.0","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:26:59.311Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T05:26:59.369Z","lastCrawledAt":"2026-10-11T05:26:59.311Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T05:26:59.311Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.0","createdAt":"2026-04-30T12:42:45.733Z","changelog":"Initial release — part of 188 AI agent skills collection by MTNT Solutions","fileCount":4,"zipByteSize":9247}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17bvyvkfhp17ybx0q3ak5dcsn85nqpv:ah-data-scientist","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mtsatryan-ah-data-scientist/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mtsatryan-ah-data-scientist/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mtsatryan-ah-data-scientist/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-mtsatryan-ah-data-scientist/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-mtsatryan-ah-data-scientist/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-mtsatryan-ah-data-scientist/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T07:37:01.592Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mtsatryan-ah-data-scientist/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mtsatryan-ah-data-scientist/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mtsatryan-ah-data-scientist/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mtsatryan-ah-data-scientist/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T05:26:59.369Z","emptyReason":null},"readme":"Skill: data-scientist\n\nOwner: mtsatryan\n\nSummary: You are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design. Use when: statistical analysi...\n\nTags: latest:1.0.0\n\nVersion history:\n\nv1.0.0 | 2026-04-30T12:42:45.733Z | user\n\nInitial release — part of 188 AI agent skills collection by MTNT Solutions\n\nArchive index:\n\nArchive v1.0.0: 4 files, 9247 bytes\n\nFiles: references/examples.md (23437b), skill-card.md (1955b), SKILL.md (3567b), _meta.json (136b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: data-scientist\ndescription: 'You are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design. Use when: statistical analysis and hypothesis testing, machine learning model development and evaluation, data visualization and storytelling, experimental design and a/b testing, feature engineering and selection.'\n---\n\n# Data Scientist\n\nYou are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design.\n\n## Core Expertise\n- Statistical analysis and hypothesis testing\n- Machine learning model development and evaluation\n- Data visualization and storytelling\n- Experimental design and A/B testing\n- Feature engineering and selection\n- Time series analysis and forecasting\n- Deep learning and neural networks\n- Causal inference and econometrics\n\n## Technical Skills\n- **Languages**: Python, R, SQL, Scala, Julia\n- **ML Libraries**: scikit-learn, XGBoost, LightGBM, CatBoost\n- **Deep Learning**: TensorFlow, PyTorch, Keras, JAX\n- **Data Manipulation**: pandas, numpy, polars, dplyr\n- **Visualization**: matplotlib, seaborn, plotly, ggplot2, Tableau\n- **Big Data**: Spark, Dask, Ray, Databricks\n- **Cloud Platforms**: AWS SageMaker, Google AI Platform, Azure ML\n\n## Statistical Analysis Framework\n> 📎 **Code example 1** (python) — see [references/examples.md](references/examples.md)\n\n## Machine Learning Pipeline\n> 📎 **Code example 2** (python) — see [references/examples.md](references/examples.md)\n\n## Time Series Analysis\n> 📎 **Code example 3** (python) — see [references/examples.md](references/examples.md)\n\n## A/B Testing Framework\n> 📎 **Code example 4** (python) — see [references/examples.md](references/examples.md)\n\n## Data Visualization Suite\n> 📎 **Code example 5** (python) — see [references/examples.md](references/examples.md)\n\n## Best Practices\n1. **Data Quality**: Always validate and clean data before analysis\n2. **Reproducibility**: Use random seeds and version control for experiments\n3. **Cross-Validation**: Use proper validation techniques to avoid overfitting\n4. **Feature Engineering**: Invest time in creating meaningful features\n5. **Model Interpretability**: Use SHAP, LIME for model explanation\n6. **Statistical Significance**: Don't confuse statistical and practical significance\n7. **Documentation**: Document assumptions, methodologies, and findings\n\n## Experimental Design\n- Design experiments with proper controls and randomization\n- Calculate required sample sizes before data collection\n- Account for multiple testing corrections\n- Use appropriate statistical tests for your data type\n- Consider confounding variables and bias sources\n- Plan for missing data and outlier handling\n\n## Approach\n- Start with exploratory data analysis and data quality assessment\n- Define clear hypotheses and success metrics\n- Choose appropriate statistical methods and models\n- Validate results using multiple approaches\n- Communicate findings with clear visualizations\n- Document methodology and provide reproducible code\n\n## Output Format\n- Provide complete analysis notebooks with explanations\n- Include statistical test results and interpretations\n- Create comprehensive visualizations and dashboards\n- Document assumptions and limitations\n- Provide actionable recommendations based on findings\n- Include code for reproducibility and further analysis\n\n---\n\n\n## Reference Materials\n\nFor detailed code examples and implementation patterns, see [references/examples.md](references/examples.md).\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7fhxm2kjnxpxwkk5x3h3xj1985nhw1\",\n  \"slug\": \"ah-data-scientist\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1777552965733\n}\n\nFile v1.0.0:references/examples.md\n\n# Data Scientist — Code Examples\n\n## Example 1\n\n```python\nimport pandas as pd\nimport numpy as np\nimport scipy.stats as stats\nfrom scipy.stats import ttest_ind, chi2_contingency, mannwhitneyu\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import classification_report, confusion_matrix\n\nclass StatisticalAnalyzer:\n    def __init__(self, data):\n        self.data = data\n        self.results = {}\n    \n    def descriptive_statistics(self, columns=None):\n        \"\"\"Generate comprehensive descriptive statistics\"\"\"\n        if columns is None:\n            columns = self.data.select_dtypes(include=[np.number]).columns\n        \n        stats_summary = {}\n        for col in columns:\n            stats_summary[col] = {\n                'count': self.data[col].count(),\n                'mean': self.data[col].mean(),\n                'median': self.data[col].median(),\n                'std': self.data[col].std(),\n                'min': self.data[col].min(),\n                'max': self.data[col].max(),\n                'q25': self.data[col].quantile(0.25),\n                'q75': self.data[col].quantile(0.75),\n                'skewness': stats.skew(self.data[col].dropna()),\n                'kurtosis': stats.kurtosis(self.data[col].dropna())\n            }\n        \n        return pd.DataFrame(stats_summary).T\n    \n    def hypothesis_testing(self, group_col, target_col, test_type='auto'):\n        \"\"\"Perform appropriate hypothesis tests\"\"\"\n        groups = self.data[group_col].unique()\n        \n        if len(groups) != 2:\n            raise ValueError(\"Currently supports only two-group comparisons\")\n        \n        group1 = self.data[self.data[group_col] == groups[0]][target_col].dropna()\n        group2 = self.data[self.data[group_col] == groups[1]][target_col].dropna()\n        \n        # Normality tests\n        _, p_norm1 = stats.shapiro(group1.sample(min(5000, len(group1))))\n        _, p_norm2 = stats.shapiro(group2.sample(min(5000, len(group2))))\n        \n        # Equal variance test\n        _, p_var = stats.levene(group1, group2)\n        \n        results = {\n            'group1_size': len(group1),\n            'group2_size': len(group2),\n            'group1_mean': group1.mean(),\n            'group2_mean': group2.mean(),\n            'normality_p1': p_norm1,\n            'normality_p2': p_norm2,\n            'equal_variance_p': p_var\n        }\n        \n        # Choose appropriate test\n        if test_type == 'auto':\n            if p_norm1 > 0.05 and p_norm2 > 0.05:\n                # Both normal, use t-test\n                if p_var > 0.05:\n                    # Equal variances\n                    stat, p_value = ttest_ind(group1, group2)\n                    test_used = \"Independent t-test (equal variances)\"\n                else:\n                    # Unequal variances\n                    stat, p_value = ttest_ind(group1, group2, equal_var=False)\n                    test_used = \"Welch's t-test (unequal variances)\"\n            else:\n                # Non-normal, use Mann-Whitney U\n                stat, p_value = mannwhitneyu(group1, group2, alternative='two-sided')\n                test_used = \"Mann-Whitney U test\"\n        \n        results.update({\n            'test_used': test_used,\n            'test_statistic': stat,\n            'p_value': p_value,\n            'significant': p_value < 0.05,\n            'effect_size': self._calculate_effect_size(group1, group2)\n        })\n        \n        return results\n    \n    def _calculate_effect_size(self, group1, group2):\n        \"\"\"Calculate Cohen's d for effect size\"\"\"\n        pooled_std = np.sqrt(((len(group1) - 1) * group1.var() + \n                             (len(group2) - 1) * group2.var()) / \n                            (len(group1) + len(group2) - 2))\n        return (group1.mean() - group2.mean()) / pooled_std\n```\n\n## Example 2\n\n```python\nfrom sklearn.model_selection import cross_val_score, GridSearchCV, StratifiedKFold\nfrom sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.svm import SVC\nfrom sklearn.metrics import roc_auc_score, precision_recall_curve\nimport xgboost as xgb\nimport lightgbm as lgb\n\nclass MLPipeline:\n    def __init__(self, random_state=42):\n        self.random_state = random_state\n        self.models = {}\n        self.best_model = None\n        self.feature_importance = None\n    \n    def feature_engineering(self, X, y=None, numeric_features=None, categorical_features=None):\n        \"\"\"Advanced feature engineering\"\"\"\n        X_engineered = X.copy()\n        \n        # Numeric feature engineering\n        if numeric_features:\n            for col in numeric_features:\n                # Log transformation for skewed features\n                if X[col].skew() > 1:\n                    X_engineered[f'{col}_log'] = np.log1p(X[col])\n                \n                # Polynomial features for important variables\n                X_engineered[f'{col}_squared'] = X[col] ** 2\n                X_engineered[f'{col}_sqrt'] = np.sqrt(X[col])\n                \n                # Binning for non-linear relationships\n                X_engineered[f'{col}_binned'] = pd.cut(X[col], bins=5, labels=False)\n        \n        # Categorical feature engineering\n        if categorical_features:\n            for col in categorical_features:\n                # Target encoding (if y is provided)\n                if y is not None:\n                    target_mean = y.groupby(X[col]).mean()\n                    X_engineered[f'{col}_target_encoded'] = X[col].map(target_mean)\n                \n                # Frequency encoding\n                freq_map = X[col].value_counts(normalize=True)\n                X_engineered[f'{col}_frequency'] = X[col].map(freq_map)\n        \n        # Interaction features\n        if len(numeric_features) >= 2:\n            for i, col1 in enumerate(numeric_features):\n                for col2 in numeric_features[i+1:]:\n                    X_engineered[f'{col1}_{col2}_interaction'] = X[col1] * X[col2]\n                    X_engineered[f'{col1}_{col2}_ratio'] = X[col1] / (X[col2] + 1e-8)\n        \n        return X_engineered\n    \n    def model_comparison(self, X_train, X_test, y_train, y_test):\n        \"\"\"Compare multiple ML algorithms\"\"\"\n        models = {\n            'Logistic Regression': LogisticRegression(random_state=self.random_state),\n            'Random Forest': RandomForestClassifier(random_state=self.random_state),\n            'Gradient Boosting': GradientBoostingClassifier(random_state=self.random_state),\n            'XGBoost': xgb.XGBClassifier(random_state=self.random_state),\n            'LightGBM': lgb.LGBMClassifier(random_state=self.random_state)\n        }\n        \n        results = {}\n        cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=self.random_state)\n        \n        for name, model in models.items():\n            # Cross-validation\n            cv_scores = cross_val_score(model, X_train, y_train, cv=cv, scoring='roc_auc')\n            \n            # Fit and predict\n            model.fit(X_train, y_train)\n            y_pred = model.predict_proba(X_test)[:, 1]\n            test_auc = roc_auc_score(y_test, y_pred)\n            \n            results[name] = {\n                'cv_mean': cv_scores.mean(),\n                'cv_std': cv_scores.std(),\n                'test_auc': test_auc,\n                'model': model\n            }\n            \n            self.models[name] = model\n        \n        # Select best model\n        best_model_name = max(results.keys(), key=lambda x: results[x]['test_auc'])\n        self.best_model = self.models[best_model_name]\n        \n        return results\n    \n    def hyperparameter_tuning(self, X_train, y_train, model_type='xgboost'):\n        \"\"\"Advanced hyperparameter tuning\"\"\"\n        if model_type == 'xgboost':\n            param_grid = {\n                'n_estimators': [100, 200, 300],\n                'max_depth': [3, 4, 5, 6],\n                'learning_rate': [0.01, 0.1, 0.2],\n                'subsample': [0.8, 0.9, 1.0],\n                'colsample_bytree': [0.8, 0.9, 1.0]\n            }\n            model = xgb.XGBClassifier(random_state=self.random_state)\n        \n        elif model_type == 'lightgbm':\n            param_grid = {\n                'n_estimators': [100, 200, 300],\n                'max_depth': [3, 4, 5, 6],\n                'learning_rate': [0.01, 0.1, 0.2],\n                'feature_fraction': [0.8, 0.9, 1.0],\n                'bagging_fraction': [0.8, 0.9, 1.0]\n            }\n            model = lgb.LGBMClassifier(random_state=self.random_state)\n        \n        cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=self.random_state)\n        grid_search = GridSearchCV(\n            model, param_grid, cv=cv, scoring='roc_auc', \n            n_jobs=-1, verbose=1\n        )\n        \n        grid_search.fit(X_train, y_train)\n        self.best_model = grid_search.best_estimator_\n        \n        return grid_search.best_params_, grid_search.best_score_\n```\n\n## Example 3\n\n```python\nimport pandas as pd\nfrom statsmodels.tsa.seasonal import seasonal_decompose\nfrom statsmodels.tsa.stattools import adfuller\nfrom statsmodels.tsa.arima.model import ARIMA\nfrom sklearn.metrics import mean_absolute_error, mean_squared_error\nimport warnings\nwarnings.filterwarnings('ignore')\n\nclass TimeSeriesAnalyzer:\n    def __init__(self, data, date_col, value_col):\n        self.data = data.copy()\n        self.data[date_col] = pd.to_datetime(self.data[date_col])\n        self.data = self.data.set_index(date_col).sort_index()\n        self.ts = self.data[value_col]\n        self.forecast = None\n    \n    def exploratory_analysis(self):\n        \"\"\"Comprehensive time series EDA\"\"\"\n        results = {}\n        \n        # Basic statistics\n        results['basic_stats'] = {\n            'start_date': self.ts.index.min(),\n            'end_date': self.ts.index.max(),\n            'total_observations': len(self.ts),\n            'missing_values': self.ts.isnull().sum(),\n            'mean': self.ts.mean(),\n            'std': self.ts.std(),\n            'trend': 'increasing' if self.ts.iloc[-1] > self.ts.iloc[0] else 'decreasing'\n        }\n        \n        # Stationarity test\n        adf_result = adfuller(self.ts.dropna())\n        results['stationarity'] = {\n            'adf_statistic': adf_result[0],\n            'p_value': adf_result[1],\n            'is_stationary': adf_result[1] < 0.05,\n            'critical_values': adf_result[4]\n        }\n        \n        # Seasonal decomposition\n        if len(self.ts) >= 24:  # Need at least 2 seasons\n            decomposition = seasonal_decompose(self.ts.dropna(), period=12)\n            results['seasonality'] = {\n                'seasonal_strength': np.var(decomposition.seasonal) / np.var(self.ts.dropna()),\n                'trend_strength': np.var(decomposition.trend.dropna()) / np.var(self.ts.dropna())\n            }\n        \n        return results\n    \n    def arima_modeling(self, max_p=5, max_d=2, max_q=5):\n        \"\"\"Automatic ARIMA model selection\"\"\"\n        best_aic = np.inf\n        best_params = None\n        best_model = None\n        \n        for p in range(max_p + 1):\n            for d in range(max_d + 1):\n                for q in range(max_q + 1):\n                    try:\n                        model = ARIMA(self.ts.dropna(), order=(p, d, q))\n                        fitted_model = model.fit()\n                        \n                        if fitted_model.aic < best_aic:\n                            best_aic = fitted_model.aic\n                            best_params = (p, d, q)\n                            best_model = fitted_model\n                    except:\n                        continue\n        \n        return best_model, best_params, best_aic\n    \n    def forecast_evaluation(self, model, test_size=0.2):\n        \"\"\"Evaluate forecasting performance\"\"\"\n        split_point = int(len(self.ts) * (1 - test_size))\n        train_data = self.ts[:split_point]\n        test_data = self.ts[split_point:]\n        \n        # Fit model on training data\n        model_fit = ARIMA(train_data, order=model.order).fit()\n        \n        # Generate forecasts\n        forecast = model_fit.forecast(steps=len(test_data))\n        \n        # Calculate metrics\n        mae = mean_absolute_error(test_data, forecast)\n        mse = mean_squared_error(test_data, forecast)\n        rmse = np.sqrt(mse)\n        mape = np.mean(np.abs((test_data - forecast) / test_data)) * 100\n        \n        return {\n            'MAE': mae,\n            'MSE': mse,\n            'RMSE': rmse,\n            'MAPE': mape,\n            'forecast': forecast,\n            'actual': test_data\n        }\n```\n\n## Example 4\n\n```python\nimport numpy as np\nimport pandas as pd\nfrom scipy import stats\nfrom statsmodels.stats.power import ttest_power\nfrom statsmodels.stats.proportion import proportions_ztest\n\nclass ABTestAnalyzer:\n    def __init__(self):\n        self.results = {}\n    \n    def sample_size_calculation(self, baseline_rate, minimum_effect, alpha=0.05, power=0.8):\n        \"\"\"Calculate required sample size for A/B test\"\"\"\n        effect_size = minimum_effect / np.sqrt(baseline_rate * (1 - baseline_rate))\n        \n        n_per_group = ttest_power(effect_size, power, alpha) / 4\n        total_sample_size = n_per_group * 2\n        \n        return {\n            'samples_per_group': int(np.ceil(n_per_group)),\n            'total_sample_size': int(np.ceil(total_sample_size)),\n            'effect_size': effect_size,\n            'assumptions': {\n                'baseline_rate': baseline_rate,\n                'minimum_effect': minimum_effect,\n                'alpha': alpha,\n                'power': power\n            }\n        }\n    \n    def analyze_ab_test(self, control_data, treatment_data, metric_type='conversion'):\n        \"\"\"Comprehensive A/B test analysis\"\"\"\n        results = {}\n        \n        if metric_type == 'conversion':\n            # Conversion rate analysis\n            control_conversions = control_data.sum()\n            control_visitors = len(control_data)\n            treatment_conversions = treatment_data.sum()\n            treatment_visitors = len(treatment_data)\n            \n            control_rate = control_conversions / control_visitors\n            treatment_rate = treatment_conversions / treatment_visitors\n            \n            # Statistical test\n            counts = np.array([treatment_conversions, control_conversions])\n            nobs = np.array([treatment_visitors, control_visitors])\n            \n            z_stat, p_value = proportions_ztest(counts, nobs)\n            \n            # Confidence interval for difference\n            se_diff = np.sqrt(\n                (control_rate * (1 - control_rate) / control_visitors) +\n                (treatment_rate * (1 - treatment_rate) / treatment_visitors)\n            )\n            \n            diff = treatment_rate - control_rate\n            ci_lower = diff - 1.96 * se_diff\n            ci_upper = diff + 1.96 * se_diff\n            \n            results = {\n                'control_rate': control_rate,\n                'treatment_rate': treatment_rate,\n                'absolute_lift': diff,\n                'relative_lift': diff / control_rate,\n                'z_statistic': z_stat,\n                'p_value': p_value,\n                'significant': p_value < 0.05,\n                'confidence_interval': (ci_lower, ci_upper),\n                'sample_sizes': {'control': control_visitors, 'treatment': treatment_visitors}\n            }\n        \n        elif metric_type == 'continuous':\n            # Continuous metric analysis\n            control_mean = control_data.mean()\n            treatment_mean = treatment_data.mean()\n            \n            # T-test\n            t_stat, p_value = stats.ttest_ind(treatment_data, control_data)\n            \n            # Effect size (Cohen's d)\n            pooled_std = np.sqrt(((len(control_data) - 1) * control_data.var() + \n                                 (len(treatment_data) - 1) * treatment_data.var()) / \n                                (len(control_data) + len(treatment_data) - 2))\n            \n            cohens_d = (treatment_mean - control_mean) / pooled_std\n            \n            # Confidence interval\n            se_diff = pooled_std * np.sqrt(1/len(control_data) + 1/len(treatment_data))\n            diff = treatment_mean - control_mean\n            ci_lower = diff - 1.96 * se_diff\n            ci_upper = diff + 1.96 * se_diff\n            \n            results = {\n                'control_mean': control_mean,\n                'treatment_mean': treatment_mean,\n                'absolute_difference': diff,\n                'relative_difference': diff / control_mean,\n                't_statistic': t_stat,\n                'p_value': p_value,\n                'significant': p_value < 0.05,\n                'cohens_d': cohens_d,\n                'confidence_interval': (ci_lower, ci_upper),\n                'sample_sizes': {'control': len(control_data), 'treatment': len(treatment_data)}\n            }\n        \n        return results\n    \n    def sequential_testing(self, control_conversions, control_visitors, \n                          treatment_conversions, treatment_visitors, alpha=0.05):\n        \"\"\"Sequential analysis for early stopping\"\"\"\n        # Calculate current rates\n        control_rate = control_conversions / control_visitors\n        treatment_rate = treatment_conversions / treatment_visitors\n        \n        # Z-test for current data\n        counts = np.array([treatment_conversions, control_conversions])\n        nobs = np.array([treatment_visitors, control_visitors])\n        \n        z_stat, p_value = proportions_ztest(counts, nobs)\n        \n        # Adjusted alpha for sequential testing (Bonferroni correction)\n        adjusted_alpha = alpha / np.log(max(control_visitors, treatment_visitors))\n        \n        return {\n            'current_p_value': p_value,\n            'adjusted_alpha': adjusted_alpha,\n            'can_stop': p_value < adjusted_alpha,\n            'recommendation': 'Stop test' if p_value < adjusted_alpha else 'Continue test',\n            'control_rate': control_rate,\n            'treatment_rate': treatment_rate,\n            'sample_sizes': {'control': control_visitors, 'treatment': treatment_visitors}\n        }\n```\n\n## Example 5\n\n```python\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport plotly.graph_objects as go\nimport plotly.express as px\nfrom plotly.subplots import make_subplots\n\nclass DataVisualization:\n    def __init__(self, style='seaborn'):\n        plt.style.use(style)\n        self.colors = sns.color_palette(\"husl\", 8)\n    \n    def correlation_analysis(self, data, method='pearson'):\n        \"\"\"Advanced correlation analysis with visualization\"\"\"\n        # Calculate correlations\n        corr_matrix = data.corr(method=method)\n        \n        # Create subplots\n        fig, axes = plt.subplots(2, 2, figsize=(15, 12))\n        \n        # Heatmap\n        sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0, \n                   square=True, ax=axes[0,0])\n        axes[0,0].set_title('Correlation Heatmap')\n        \n        # Clustermap for hierarchical clustering\n        g = sns.clustermap(corr_matrix, cmap='coolwarm', center=0, \n                          square=True, figsize=(8, 6))\n        plt.setp(g.ax_heatmap.get_xticklabels(), rotation=45)\n        plt.setp(g.ax_heatmap.get_yticklabels(), rotation=0)\n        \n        # Network graph of strong correlations\n        strong_corr = corr_matrix.abs() > 0.7\n        edges = []\n        for i in range(len(strong_corr.columns)):\n            for j in range(i+1, len(strong_corr.columns)):\n                if strong_corr.iloc[i, j]:\n                    edges.append((strong_corr.columns[i], strong_corr.columns[j], \n                                corr_matrix.iloc[i, j]))\n        \n        return corr_matrix, edges\n    \n    def distribution_analysis(self, data, column):\n        \"\"\"Comprehensive distribution analysis\"\"\"\n        fig, axes = plt.subplots(2, 3, figsize=(18, 12))\n        \n        # Histogram with KDE\n        sns.histplot(data[column], kde=True, ax=axes[0,0])\n        axes[0,0].set_title(f'Distribution of {column}')\n        \n        # Box plot\n        sns.boxplot(y=data[column], ax=axes[0,1])\n        axes[0,1].set_title(f'Box Plot of {column}')\n        \n        # Q-Q plot\n        stats.probplot(data[column].dropna(), dist=\"norm\", plot=axes[0,2])\n        axes[0,2].set_title(f'Q-Q Plot of {column}')\n        \n        # Violin plot\n        sns.violinplot(y=data[column], ax=axes[1,0])\n        axes[1,0].set_title(f'Violin Plot of {column}')\n        \n        # ECDF\n        x = np.sort(data[column].dropna())\n        y = np.arange(1, len(x) + 1) / len(x)\n        axes[1,1].plot(x, y, marker='.', linestyle='none')\n        axes[1,1].set_xlabel(column)\n        axes[1,1].set_ylabel('ECDF')\n        axes[1,1].set_title(f'ECDF of {column}')\n        \n        # Summary statistics\n        stats_text = f\"\"\"\n        Mean: {data[column].mean():.2f}\n        Median: {data[column].median():.2f}\n        Std: {data[column].std():.2f}\n        Skewness: {data[column].skew():.2f}\n        Kurtosis: {data[column].kurtosis():.2f}\n        \"\"\"\n        axes[1,2].text(0.1, 0.5, stats_text, fontsize=12, \n                      verticalalignment='center')\n        axes[1,2].axis('off')\n        \n        plt.tight_layout()\n        return fig\n    \n    def interactive_dashboard(self, data, target_col):\n        \"\"\"Create interactive Plotly dashboard\"\"\"\n        # Create subplots\n        fig = make_subplots(\n            rows=2, cols=2,\n            subplot_titles=('Feature Importance', 'Prediction Distribution', \n                          'Residual Analysis', 'Feature Correlation'),\n            specs=[[{\"secondary_y\": False}, {\"secondary_y\": False}],\n                   [{\"secondary_y\": False}, {\"secondary_y\": False}]]\n        )\n        \n        # Feature importance (assuming we have a model)\n        numeric_cols = data.select_dtypes(include=[np.number]).columns\n        correlations = data[numeric_cols].corrwith(data[target_col]).abs().sort_values(ascending=False)\n        \n        fig.add_trace(\n            go.Bar(x=correlations.values[:10], y=correlations.index[:10], \n                  orientation='h', name='Correlation with Target'),\n            row=1, col=1\n        )\n        \n        # Target distribution\n        fig.add_trace(\n            go.Histogram(x=data[target_col], name='Target Distribution'),\n            row=1, col=2\n        )\n        \n        # Scatter plot of top correlated feature vs target\n        top_feature = correlations.index[1]  # Skip target itself\n        fig.add_trace(\n            go.Scatter(x=data[top_feature], y=data[target_col], \n                      mode='markers', name=f'{top_feature} vs {target_col}'),\n            row=2, col=1\n        )\n        \n        # Correlation heatmap\n        corr_matrix = data[numeric_cols].corr()\n        fig.add_trace(\n            go.Heatmap(z=corr_matrix.values, \n                      x=corr_matrix.columns, \n                      y=corr_matrix.columns,\n                      colorscale='RdBu', zmid=0),\n            row=2, col=2\n        )\n        \n        fig.update_layout(height=800, showlegend=False, \n                         title_text=\"Data Science Dashboard\")\n        return fig\n```\n\nFile v1.0.0:skill-card.md\n\n## Description:\n\nYou are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[mtsatryan](https://clawhub.ai/user/mtsatryan)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, analysts, and data science teams use this skill to plan and produce statistical analyses, machine learning workflows, visualizations, experimental designs, and reproducible data science deliverables.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Generated analysis code may process local or sensitive datasets and may rely on third-party Python libraries in the user's environment.\n\nMitigation: Review generated analysis code before running it, especially on sensitive data, and confirm dependencies and data handling practices fit the deployment environment.\n\nRisk: Statistical or machine learning guidance can be misapplied if assumptions, validation choices, or data quality issues are not checked.\n\nMitigation: Validate datasets, methods, assumptions, and model results before using outputs for decisions.\n\n## Reference(s):\n\n- [Data Scientist Code Examples](references/examples.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, guidance]\n\n**Output Format:** [Markdown with code examples and analysis guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include reproducible analysis code, statistical interpretations, visualizations, notebook-style explanations, assumptions, limitations, and recommendations.]\n\n## Skill Version(s):\n\n1.0.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: data-scientist Owner: mtsatryan Summary: You are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design. Use when: statistical analysi... Tags: latest:1.0.0 Version history: v1.0.0 | 2026-04-30T12:42:45.733Z | user Initial release — part of 188 AI agent skills collection by MTNT Solutions Archive index: Archive v1.0.0: 4 files, 9247 bytes Files: r","codeSnippets":[],"executableExamples":[{"language":"python","snippet":"import pandas as pd\nimport numpy as np\nimport scipy.stats as stats\nfrom scipy.stats import ttest_ind, chi2_contingency, mannwhitneyu\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import classification_report, confusion_matrix\n\nclass StatisticalAnalyzer:\n    def __init__(self, data):\n        self.data = data\n        self.results = {}\n    \n    def descriptive_statistics(self, columns=None):\n        \"\"\"Generate comprehensive descriptive statistics\"\"\"\n        if columns is None:\n            columns = self.data.select_dtypes(include=[np.number]).columns\n        \n        stats_summary = {}\n        for col in columns:\n            stats_summary[col] = {\n                'count': self.data[col].count(),\n                'mean': self.data[col].mean(),\n                'median': self.data[col].median(),\n                'std': self.data[col].std(),\n                'min': self.data[col].min(),\n                'max': self.data[col].max(),\n                'q25': self.data[col].quantile(0.25),\n                'q75': self.data[col].quantile(0.75),\n                'skewness': stats.skew(self.data[col].dropna()),\n                'kurtosis': stats.kurtosis(self.data[col].dropna())\n            }\n        \n        return pd.DataFrame(stats_summary).T\n    \n    def hypothesis_testing(self, group_col, target_col, test_type='auto'):\n        \"\"\"Perform appropriate hypothesis tests\"\"\"\n        groups = self.data[group_col].unique()\n        \n        if len(groups) != 2:\n            raise ValueError(\"Currently supports only two-group comparisons\")\n        \n        group1 = self.data[self.data[group_col] == groups[0]][target_col].dropna()\n        group2 = self.data[self.data[group_col] == groups[1]][target_col].dropna()\n        \n        # Normality tests\n        _, p_norm1 = stats.shapiro(group1.sample(min(5000, len(group1))))\n        _, p_norm2 = stats.shapiro(group2.samp"},{"language":"python","snippet":"from sklearn.model_selection import cross_val_score, GridSearchCV, StratifiedKFold\nfrom sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.svm import SVC\nfrom sklearn.metrics import roc_auc_score, precision_recall_curve\nimport xgboost as xgb\nimport lightgbm as lgb\n\nclass MLPipeline:\n    def __init__(self, random_state=42):\n        self.random_state = random_state\n        self.models = {}\n        self.best_model = None\n        self.feature_importance = None\n    \n    def feature_engineering(self, X, y=None, numeric_features=None, categorical_features=None):\n        \"\"\"Advanced feature engineering\"\"\"\n        X_engineered = X.copy()\n        \n        # Numeric feature engineering\n        if numeric_features:\n            for col in numeric_features:\n                # Log transformation for skewed features\n                if X[col].skew() > 1:\n                    X_engineered[f'{col}_log'] = np.log1p(X[col])\n                \n                # Polynomial features for important variables\n                X_engineered[f'{col}_squared'] = X[col] ** 2\n                X_engineered[f'{col}_sqrt'] = np.sqrt(X[col])\n                \n                # Binning for non-linear relationships\n                X_engineered[f'{col}_binned'] = pd.cut(X[col], bins=5, labels=False)\n        \n        # Categorical feature engineering\n        if categorical_features:\n            for col in categorical_features:\n                # Target encoding (if y is provided)\n                if y is not None:\n                    target_mean = y.groupby(X[col]).mean()\n                    X_engineered[f'{col}_target_encoded'] = X[col].map(target_mean)\n                \n                # Frequency encoding\n                freq_map = X[col].value_counts(normalize=True)\n                X_engineered[f'{col}_frequency'] = X[col].map(freq_map)\n        \n        # Interaction features\n        if len(numeric_features) >= 2:\n          "},{"language":"python","snippet":"import pandas as pd\nfrom statsmodels.tsa.seasonal import seasonal_decompose\nfrom statsmodels.tsa.stattools import adfuller\nfrom statsmodels.tsa.arima.model import ARIMA\nfrom sklearn.metrics import mean_absolute_error, mean_squared_error\nimport warnings\nwarnings.filterwarnings('ignore')\n\nclass TimeSeriesAnalyzer:\n    def __init__(self, data, date_col, value_col):\n        self.data = data.copy()\n        self.data[date_col] = pd.to_datetime(self.data[date_col])\n        self.data = self.data.set_index(date_col).sort_index()\n        self.ts = self.data[value_col]\n        self.forecast = None\n    \n    def exploratory_analysis(self):\n        \"\"\"Comprehensive time series EDA\"\"\"\n        results = {}\n        \n        # Basic statistics\n        results['basic_stats'] = {\n            'start_date': self.ts.index.min(),\n            'end_date': self.ts.index.max(),\n            'total_observations': len(self.ts),\n            'missing_values': self.ts.isnull().sum(),\n            'mean': self.ts.mean(),\n            'std': self.ts.std(),\n            'trend': 'increasing' if self.ts.iloc[-1] > self.ts.iloc[0] else 'decreasing'\n        }\n        \n        # Stationarity test\n        adf_result = adfuller(self.ts.dropna())\n        results['stationarity'] = {\n            'adf_statistic': adf_result[0],\n            'p_value': adf_result[1],\n            'is_stationary': adf_result[1] < 0.05,\n            'critical_values': adf_result[4]\n        }\n        \n        # Seasonal decomposition\n        if len(self.ts) >= 24:  # Need at least 2 seasons\n            decomposition = seasonal_decompose(self.ts.dropna(), period=12)\n            results['seasonality'] = {\n                'seasonal_strength': np.var(decomposition.seasonal) / np.var(self.ts.dropna()),\n                'trend_strength': np.var(decomposition.trend.dropna()) / np.var(self.ts.dropna())\n            }\n        \n        return results\n    \n    def arima_modeling(self, max_p=5, max_d=2, max_q=5):\n        \"\"\"Automatic ARIMA model select"},{"language":"python","snippet":"import numpy as np\nimport pandas as pd\nfrom scipy import stats\nfrom statsmodels.stats.power import ttest_power\nfrom statsmodels.stats.proportion import proportions_ztest\n\nclass ABTestAnalyzer:\n    def __init__(self):\n        self.results = {}\n    \n    def sample_size_calculation(self, baseline_rate, minimum_effect, alpha=0.05, power=0.8):\n        \"\"\"Calculate required sample size for A/B test\"\"\"\n        effect_size = minimum_effect / np.sqrt(baseline_rate * (1 - baseline_rate))\n        \n        n_per_group = ttest_power(effect_size, power, alpha) / 4\n        total_sample_size = n_per_group * 2\n        \n        return {\n            'samples_per_group': int(np.ceil(n_per_group)),\n            'total_sample_size': int(np.ceil(total_sample_size)),\n            'effect_size': effect_size,\n            'assumptions': {\n                'baseline_rate': baseline_rate,\n                'minimum_effect': minimum_effect,\n                'alpha': alpha,\n                'power': power\n            }\n        }\n    \n    def analyze_ab_test(self, control_data, treatment_data, metric_type='conversion'):\n        \"\"\"Comprehensive A/B test analysis\"\"\"\n        results = {}\n        \n        if metric_type == 'conversion':\n            # Conversion rate analysis\n            control_conversions = control_data.sum()\n            control_visitors = len(control_data)\n            treatment_conversions = treatment_data.sum()\n            treatment_visitors = len(treatment_data)\n            \n            control_rate = control_conversions / control_visitors\n            treatment_rate = treatment_conversions / treatment_visitors\n            \n            # Statistical test\n            counts = np.array([treatment_conversions, control_conversions])\n            nobs = np.array([treatment_visitors, control_visitors])\n            \n            z_stat, p_value = proportions_ztest(counts, nobs)\n            \n            # Confidence interval for difference\n            se_diff = np.sqrt(\n                (control_ra"},{"language":"python","snippet":"import matplotlib.pyplot as plt\nimport seaborn as sns\nimport plotly.graph_objects as go\nimport plotly.express as px\nfrom plotly.subplots import make_subplots\n\nclass DataVisualization:\n    def __init__(self, style='seaborn'):\n        plt.style.use(style)\n        self.colors = sns.color_palette(\"husl\", 8)\n    \n    def correlation_analysis(self, data, method='pearson'):\n        \"\"\"Advanced correlation analysis with visualization\"\"\"\n        # Calculate correlations\n        corr_matrix = data.corr(method=method)\n        \n        # Create subplots\n        fig, axes = plt.subplots(2, 2, figsize=(15, 12))\n        \n        # Heatmap\n        sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0, \n                   square=True, ax=axes[0,0])\n        axes[0,0].set_title('Correlation Heatmap')\n        \n        # Clustermap for hierarchical clustering\n        g = sns.clustermap(corr_matrix, cmap='coolwarm', center=0, \n                          square=True, figsize=(8, 6))\n        plt.setp(g.ax_heatmap.get_xticklabels(), rotation=45)\n        plt.setp(g.ax_heatmap.get_yticklabels(), rotation=0)\n        \n        # Network graph of strong correlations\n        strong_corr = corr_matrix.abs() > 0.7\n        edges = []\n        for i in range(len(strong_corr.columns)):\n            for j in range(i+1, len(strong_corr.columns)):\n                if strong_corr.iloc[i, j]:\n                    edges.append((strong_corr.columns[i], strong_corr.columns[j], \n                                corr_matrix.iloc[i, j]))\n        \n        return corr_matrix, edges\n    \n    def distribution_analysis(self, data, column):\n        \"\"\"Comprehensive distribution analysis\"\"\"\n        fig, axes = plt.subplots(2, 3, figsize=(18, 12))\n        \n        # Histogram with KDE\n        sns.histplot(data[column], kde=True, ax=axes[0,0])\n        axes[0,0].set_title(f'Distribution of {column}')\n        \n        # Box plot\n        sns.boxplot(y=data[column], ax=axes[0,1])\n        axes[0,1].set_title(f'Box Plot of {"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: data-scientist\ndescription: 'You are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design. Use when: statistical analysis and hypothesis testing, machine learning model development and evaluation, data visualization and storytelling, experimental design and a/b testing, feature engineering and selection.'\n---\n\n# Data Scientist\n\nYou are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design.\n\n## Core Expertise\n- Statistical analysis and hypothesis testing\n- Machine learning model development and evaluation\n- Data visualization and storytelling\n- Experimental design and A/B testing\n- Feature engineering and selection\n- Time series analysis and forecasting\n- Deep learning and neural networks\n- Causal inference and econometrics\n\n## Technical Skills\n- **Languages**: Python, R, SQL, Scala, Julia\n- **ML Libraries**: scikit-learn, XGBoost, LightGBM, CatBoost\n- **Deep Learning**: TensorFlow, PyTorch, Keras, JAX\n- **Data Manipulation**: pandas, numpy, polars, dplyr\n- **Visualization**: matplotlib, seaborn, plotly, ggplot2, Tableau\n- **Big Data**: Spark, Dask, Ray, Databricks\n- **Cloud Platforms**: AWS SageMaker, Google AI Platform, Azure ML\n\n## Statistical Analysis Framework\n> 📎 **Code example 1** (python) — see [references/examples.md](references/examples.md)\n\n## Machine Learning Pipeline\n> 📎 **Code example 2** (python) — see [references/examples.md](references/examples.md)\n\n## Time Series Analysis\n> 📎 **Code example 3** (python) — see [references/examples.md](references/examples.md)\n\n## A/B Testing Framework\n> 📎 **Code example 4** (python) — see [references/examples.md](references/examples.md)\n\n## Data Visualization Suite\n> 📎 **Code example 5** (python) — see [references/examples.md](references/examples.md)\n\n## Best Practices\n1. **Data Quality**: Always validate and clean data before analysis\n2. **Reproducibility**: Use random seeds and version control for experiments\n3. **Cross-Validation**: Use proper validation techniques to avoid overfitting\n4. **Feature Engineering**: Invest time in creating meaningful features\n5. **Model Interpretability**: Use SHAP, LIME for model explanation\n6. **Statistical Significance**: Don't confuse statistical and practical significance\n7. **Documentation**: Document assumptions, methodologies, and findings\n\n## Experimental Design\n- Design experiments with proper controls and randomization\n- Calculate required sample sizes before data collection\n- Account for multiple testing corrections\n- Use appropriate statistical tests for your data type\n- Consider confounding variables and bias sources\n- Plan for missing data and outlier handling\n\n## Approach\n- Start with exploratory data analysis and data quality assessment\n- Define clear hypotheses and success metrics\n- Choose appropriate statistical methods and models\n- Validate results using multiple approaches\n- Communicate findings with "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7fhxm2kjnxpxwkk5x3h3xj1985nhw1\",\n  \"slug\": \"ah-data-scientist\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1777552965733\n}"},{"path":"references/examples.md","content":"# Data Scientist — Code Examples\n\n## Example 1\n\n```python\nimport pandas as pd\nimport numpy as np\nimport scipy.stats as stats\nfrom scipy.stats import ttest_ind, chi2_contingency, mannwhitneyu\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import classification_report, confusion_matrix\n\nclass StatisticalAnalyzer:\n    def __init__(self, data):\n        self.data = data\n        self.results = {}\n    \n    def descriptive_statistics(self, columns=None):\n        \"\"\"Generate comprehensive descriptive statistics\"\"\"\n        if columns is None:\n            columns = self.data.select_dtypes(include=[np.number]).columns\n        \n        stats_summary = {}\n        for col in columns:\n            stats_summary[col] = {\n                'count': self.data[col].count(),\n                'mean': self.data[col].mean(),\n                'median': self.data[col].median(),\n                'std': self.data[col].std(),\n                'min': self.data[col].min(),\n                'max': self.data[col].max(),\n                'q25': self.data[col].quantile(0.25),\n                'q75': self.data[col].quantile(0.75),\n                'skewness': stats.skew(self.data[col].dropna()),\n                'kurtosis': stats.kurtosis(self.data[col].dropna())\n            }\n        \n        return pd.DataFrame(stats_summary).T\n    \n    def hypothesis_testing(self, group_col, target_col, test_type='auto'):\n        \"\"\"Perform appropriate hypothesis tests\"\"\"\n        groups = self.data[group_col].unique()\n        \n        if len(groups) != 2:\n            raise ValueError(\"Currently supports only two-group comparisons\")\n        \n        group1 = self.data[self.data[group_col] == groups[0]][target_col].dropna()\n        group2 = self.data[self.data[group_col] == groups[1]][target_col].dropna()\n        \n        # Normality tests\n        _, p_norm1 = stats.shapiro(group1.sample(min(5000, len(group1))))\n        _, p_norm2 = stats.shapiro(group2.sample(min(5000, len(group2))))\n        \n        # Equal variance test\n        _, p_var = stats.levene(group1, group2)\n        \n        results = {\n            'group1_size': len(group1),\n            'group2_size': len(group2),\n            'group1_mean': group1.mean(),\n            'group2_mean': group2.mean(),\n            'normality_p1': p_norm1,\n            'normality_p2': p_norm2,\n            'equal_variance_p': p_var\n        }\n        \n        # Choose appropriate test\n        if test_type == 'auto':\n            if p_norm1 > 0.05 and p_norm2 > 0.05:\n                # Both normal, use t-test\n                if p_var > 0.05:\n                    # Equal variances\n                    stat, p_value = ttest_ind(group1, group2)\n                    test_used = \"Independent t-test (equal variances)\"\n                else:\n                    # Unequal variances\n                    stat, p_value = ttest_ind(group1, group2, equal_var=False)\n"},{"path":"skill-card.md","content":"## Description:\n\nYou are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[mtsatryan](https://clawhub.ai/user/mtsatryan)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, analysts, and data science teams use this skill to plan and produce statistical analyses, machine learning workflows, visualizations, experimental designs, and reproducible data science deliverables.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Generated analysis code may process local or sensitive datasets and may rely on third-party Python libraries in the user's environment.\n\nMitigation: Review generated analysis code before running it, especially on sensitive data, and confirm dependencies and data handling practices fit the deployment environment.\n\nRisk: Statistical or machine learning guidance can be misapplied if assumptions, validation choices, or data quality issues are not checked.\n\nMitigation: Validate datasets, methods, assumptions, and model results before using outputs for decisions.\n\n## Reference(s):\n\n- [Data Scientist Code Examples](references/examples.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, guidance]\n\n**Output Format:** [Markdown with code examples and analysis guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include reproducible analysis code, statistical interpretations, visualizations, notebook-style explanations, assumptions, limitations, and recommendations.]\n\n## Skill Version(s):\n\n1.0.0 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"You are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design. Use when: statistical analysi... Skill: data-scientist Owner: mtsatryan Summary: You are a data scientist with expertise in statistical analysis, machine learning, data visualization, and experimental design. Use when: statistical analysi... Tags: latest:1.0.0 Version history: v1.0.0 | 2026-04-30T12:42:45.733Z | user Initial release — part of 188 AI agent skills collection by MTNT Solutions Archive index: Archive v1.0.0: 4 files, 9247 bytes Files: r","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1281,"uniquenessScore":49,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T05:26:59.369Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T05:26:59.369Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:37:01.592Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}