Skip to content
Data
Skill

/scikit-survival

Build, evaluate, and audit right-censored or competing-risk survival workflows with scikit-survival, including leakage-safe preprocessing, model selection, probability prediction, and censoring-aware metrics.

From plugin
k-dense-ai-scientific-agent-skills-2
45k165 skills
Install
$ npx -y skills add K-Dense-AI/scientific-agent-skills --skill scikit-survival --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/scikit-survival

Context preview

The summary Claude sees to decide when to auto-load this skill.

Build, evaluate, and audit right-censored or competing-risk survival workflows with scikit-survival, including leakage-safe preprocessing, model selection, probability prediction, and censoring-aware metrics.

SKILL.md

scikit-survival.SKILL.md
name: scikit-survival
description: Build, evaluate, and audit right-censored or competing-risk survival workflows with scikit-survival, including leakage-safe preprocessing, model selection, probability prediction, and censoring-aware metrics.
license: MIT
compatibility: Requires Python 3.11+, uv, and the pinned scikit-survival 0.28.0 stack for executable examples. Bundled CLIs are local and network-free by default.
allowed-tools: Read Write Edit Bash
metadata:
  version: "1.2"
  skill-author: K-Dense Inc.

scikit-survival

Scope

Use this skill for scikit-survival 0.28.0 workflows involving:

  • right-censored structured outcomes;
  • Cox PH, Coxnet, IPC ridge, survival trees, forests, boosting, and SVMs;
  • discrimination, prediction error, calibration-oriented checks, and time-dependent prediction;
  • nonparametric cumulative incidence with competing risks;
  • scikit-learn pipelines, nested model selection, and reproducible reports.

scikit-survival primarily models right-censored outcomes. Its built-in competing-risk support is nonparametric cumulative incidence; it does not provide Fine-Gray regression. Do not present model output as clinical advice, causal evidence, or proof of clinical utility.

Current release and installation

Verified 2026-07-23:

  • Latest stable: **scikit-survival 0.28.0**, released 2026-07-05.
  • Python: **3.11 or later**; PyPI wheels cover CPython 3.11-3.14 on Linux

x86-64, macOS x86-64/ARM64, and Windows x86-64.

  • Runtime bounds: NumPy >=2.0.0, pandas >=2.2.0, SciPy >=1.13.0,

scikit-learn >=1.9.0,<1.10, OSQP >=1.0.2, narwhals >=2.0.1.

  • 0.28 adds pandas/Polars estimator support through narwhals and removes

`criterion` from `GradientBoostingSurvivalAnalysis`.

Create an isolated environment and install the tested snapshot:

uv venv --python 3.11
source .venv/bin/activate
uv pip install \
  "scikit-survival==0.28.0" \
  "scikit-learn==1.9.0" \
  "numpy==2.4.6" \
  "pandas==3.0.5" \
  "scipy==1.17.1" \
  "ecos==2.0.14" \
  "osqp==1.1.3" \
  "joblib==1.5.3" \
  "numexpr==2.14.2" \
  "narwhals==2.24.0"

Binary wheels are preferred. A source build requires a C/C++ compiler; OSQP may also require CMake. This skill is MIT-licensed; the upstream scikit-survival package is GPL-3.0-or-later, so review upstream licensing before redistribution.

Non-negotiable workflow

1. **Define the estimand and event coding.** Decide whether the target is all-event survival, cause-specific hazard, or cause-specific cumulative incidence. 2. **Validate outcomes.** Standard estimators need a two-field structured array: boolean event first, observed time second. Competing-risk CIF instead needs a separate integer event vector: 0=censored, 1..K=causes. 3. **Split before learned preprocessing.** Never fit imputers, encoders, scalers, feature selectors, or alpha choices on all rows before splitting. 4. **Fit preprocessing inside a pipeline.** Unknown categories and missingness must be handled using training-fold state only. 5. **Tune without reusing evaluation data.** Use nested CV when reporting cross-validated tuned performance, or reserve a truly untouched final holdout. 6. **Fit censoring distributions on training data.** IPCW concordance, dynamic AUC, and Brier metrics receive `survival_train`, never a pooled train+test outcome. 7. **Restrict evaluation times.** Use a strictly increasing grid inside test follow-up and below the end of training support where the estimated censoring survival remains positive. 8. **Match predictions to metrics.** Concordance/dynamic AUC consume higher-is-riskier scores. Brier metrics consume survival probabilities with shape `(n_test, n_times)`, not risk scores or unevaluated step functions. 9. **Handle competing causes explicitly.** Standard survival probabilities and CIFs answer different questions. Never estimate event-specific probability with `1 - Kaplan-Meier` while censoring competing events. 10. **Report limits.** Separate discrimination, calibration, prediction error, and cumulative incidence. None alone establishes decision or clinical utility.

Outcome construction

from sksurv.util import Surv

y = Surv.from_arrays(event=event_bool, time=observed_time)
# Equivalent for pandas or Polars:
y = Surv.from_dataframe("event", "time", frame)

The first field is boolean (`True`=event, `False`=right-censored); the second is floating-point time. Field names may vary, but field order and meaning may not. Use `references/data-handling.md` before loading custom or competing-risk data.

Leakage-safe pipeline

from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sksurv.linear_model import CoxPHSurvivalAnalysis

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, stratify=y["event"], random_state=20260723
)

preprocess = ColumnTransformer(
    [
        ("num", make_pipeline(SimpleImputer(strategy="median"), StandardScaler()), numeric),
        (
            "cat",
            make_pipeline(
                SimpleImputer(strategy="most_frequent"),
                OneHotEncoder(handle_unknown="ignore", drop="first", sparse_output=False),
            ),
            categorical,
        ),
    ],
    sparse_threshold=0.0,
)
model = make_pipeline(preprocess, CoxPHSurvivalAnalysis(alpha=0.1, ties="efron"))
model.fit(X_train, y_train)
risk = model.predict(X_test)

The split precedes every learned transformation. For repeated or grouped records, use a group-aware split; for temporal deployment, use a time-respecting split.

Model choice

  • `CoxPHSurvivalAnalysis`: interpretable log-hazard coefficients under proportional

hazards; `alpha` is ridge shrinkage and `ties` is `"breslow"` or `"efron"`.

  • `CoxnetSurvivalAnalysis`: LASSO/elasti
Read more
Ships withk-dense-ai-scientific-agent-skills-2

🔔 Claude Scientific Skills is now Scientific Agent Skills. Same skills, broader compatibility — now works with any AI agent that supports the open Agent Skills standard, not just Claude.

Get the whole plugin
Stats
44,851
Stars
4,066
Forks
Active
Maintenance
Python
Language
MIT
License
12h ago
Last commit
11mo ago
Created

Repo: K-Dense-AI/scientific-agent-skills