Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Innovation metrics, R&D management research, and technology forecasting
.claude/skills/brycewang-stanford-innovation-management-guide/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 77% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 64% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 117% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 102% | 0% |
A skill for conducting research on innovation management, technology strategy, and R&D performance. Covers innovation measurement, technology forecasting, diffusion modeling, patent-publication linkage, and bibliometric analysis of research portfolios.
| Metric | Definition | Data Source | |--------|-----------|-------------| | R&D intensity | R&D spending / Revenue | Annual reports, Compustat | | Patent count | Granted patents per year | USPTO, EPO | | Citation-weighted patents | Patents weighted by forward citations | PatentsView | | New product revenue share | Revenue from products < 3 years old | Internal data | | Time to market | Concept to commercial launch | Project records | | Innovation efficiency | Revenue from new products / R&D spend | Combined internal data |
pythonimport pandas as pd import numpy as np def compute_innovation_scorecard(firm_data: pd.DataFrame) -> pd.DataFrame: """ Compute a multi-dimensional innovation scorecard for firms. firm_data columns: firm_id, rd_spend, revenue, patents_filed, patents_granted, citation_count, new_product_revenue, employees """ scorecard = pd.DataFrame() scorecard["firm_id"] = firm_data["firm_id"] # Input metrics scorecard["rd_intensity"] = firm_data["rd_spend"] / firm_data["revenue"] scorecard["rd_per_employee"] = firm_data["rd_spend"] / firm_data["employees"] # Output metrics scorecard["patent_yield"] = ( firm_data["patents_granted"] / (firm_data["rd_spend"] / 1e6) ) scorecard["citation_impact"] = ( firm_data["citation_count"] / firm_data["patents_granted"].clip(lower=1) ) scorecard["new_product_share"] = ( firm_data["new_product_revenue"] / firm_data["revenue"] ) # Efficiency scorecard["innovation_efficiency"] = ( firm_data["new_product_revenue"] / firm_data["rd_spend"] ) # Normalize to percentile ranks within the sample for col in scorecard.columns[1:]: scorecard[f"{col}_rank"] = scorecard[col].rank(pct=True) # Composite score (equal weights) rank_cols = [c for c in scorecard.columns if c.endswith("_rank")] scorecard["composite_score"] = scorecard[rank_cols].mean(axis=1) return scorecard.sort_values("composite_score", ascending=False)
The Bass model is the foundational framework for forecasting technology adoption:
pythonfrom scipy.optimize import curve_fit def bass_model(t: np.ndarray, p: float, q: float, m: float) -> np.ndarray: """ Bass diffusion model for cumulative adoption. t: time periods (0, 1, 2, ...) p: coefficient of innovation (external influence) q: coefficient of imitation (internal influence) m: market potential (total eventual adopters) Returns cumulative adoption at each time period. """ return m * (1 - np.exp(-(p + q) * t)) / (1 + (q / p) * np.exp(-(p + q) * t)) def bass_incremental(t: np.ndarray, p: float, q: float, m: float) -> np.ndarray: """Bass model incremental (new adopters per period).""" F = bass_model(t, p, q, m) / m f = (p + q * F) * (1 - F) return m * f def fit_bass_model(adoption_data: np.ndarray) -> dict: """ Fit Bass diffusion parameters to observed adoption data. adoption_data: cumulative adoption counts per period. """ t = np.arange(len(adoption_data)) try: popt, pcov = curve_fit( bass_model, t, adoption_data, p0=[0.01, 0.3, adoption_data[-1] * 2], bounds=([0, 0, adoption_data[-1]], [1, 2, adoption_data[-1] * 10]), maxfev=10000, ) return { "p_innovation": round(popt[0], 6), "q_imitation": round(popt[1], 6), "m_potential": round(popt[2], 0), "peak_period": round(np.log(popt[1] / popt[0]) / (popt[0] + popt[1]), 1), "q_p_ratio": round(popt[1] / popt[0], 2), } except RuntimeError: return {"error": "convergence_failed"}
| Technology | p (innovation) | q (imitation) | q/p ratio | |-----------|---------------|---------------|-----------| | Consumer electronics | 0.01-0.03 | 0.3-0.5 | 10-50 | | Enterprise software | 0.005-0.02 | 0.2-0.4 | 10-80 | | Medical devices | 0.001-0.01 | 0.1-0.3 | 10-300 | | Social media platforms | 0.03-0.10 | 0.5-0.8 | 5-25 |
pythondef analyze_research_portfolio(publications: pd.DataFrame) -> dict: """ Bibliometric analysis of an organization's research portfolio. publications columns: doi, title, year, journal, citations, fields (list), authors (list), affiliations (list) """ # Publication trend annual_pubs = publications.groupby("year").size() # Citation impact citation_stats = { "total_citations": publications.citations.sum(), "mean_citations": publications.citations.mean(), "median_citations": publications.citations.median(), "h_index": compute_h_index(publications.citations.values), } # Research field distribution all_fields = [] for fields in publications.fields: all_fields.extend(fields) field_dist = pd.Series(all_fields).value_counts().head(20) # Collaboration patterns collab_rate = publications.affiliations.apply( lambda x: len(set(x)) > 1 ).mean() return { "total_publications": len(publications), "annual_trend": annual_pubs.to_dict(), "citation_impact": citation_stats, "top_fields": field_dist.to_dict(), "collaboration_rate": round(collab_rate, 3), } def compute_h_index(citations: np.ndarray) -> int: """Compute h-index from an array of citation counts.""" sorted_cites = np.sort(citations)[::-1] h = 0 for i, c in enumerate(sorted_cites): if c >= i + 1: h = i + 1 else: break return h
Technology performance typically follows an S-curve pattern:
| Method | Time Horizon | Data Requirements | Best For | |--------|-------------|-------------------|----------| | Delphi method | 5-30 years | Expert panels | Emerging technologies | | Trend extrapolation | 2-10 years | Historical time series | Incremental innovation | | Scenario planning | 5-20 years | Qualitative analysis | Strategic uncertainty | | Patent analysis | 3-10 years | Patent databases | Technology landscape | | Bibliometric mapping | 2-5 years | Publication data | Research front detection |
pythondef open_innovation_metrics(firm_patents: pd.DataFrame, firm_publications: pd.DataFrame, alliances: pd.DataFrame) -> dict: """ Compute open innovation indicators for a firm. """ # Inbound openness: external knowledge sourcing external_collab_pubs = firm_publications[ firm_publications.external_coauthors > 0 ] inbound_ratio = len(external_collab_pubs) / max(len(firm_publications), 1) # Outbound openness: technology licensing, spin-offs licensed_patents = firm_patents[firm_patents.licensed == True] outbound_ratio = len(licensed_patents) / max(len(firm_patents), 1) # Network diversity (alliance partner variety) partner_industries = alliances.partner_industry.nunique() return { "inbound_openness": round(inbound_ratio, 3), "outbound_openness": round(outbound_ratio, 3), "alliance_count": len(alliances), "partner_diversity": partner_industries, }
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | fail→pass | 17,927 | 18,231 | +2% | 1 | 1 | 0% | 3,444 | 6,096 | +77% | 0 | 0 | — |
case-11 | pass→pass | 18,441 | 16,325 | -11% | 1 | 1 | 0% | 2,755 | 5,177 | +88% | 0 | 0 | — |
case-12 | pass→pass | 13,047 | 12,662 | -3% | 1 | 1 | 0% | 2,244 | 4,597 | +105% | 0 | 0 | — |
case-01 | fail→fail | 21,877 | 20,856 | -5% | 1 | 1 | 0% | 4,651 | 6,142 | +32% | 0 | 0 | — |
case-02 | fail→fail | 17,871 | 15,419 | -14% | 1 | 1 | 0% | 3,579 | 5,548 | +55% | 0 | 0 | — |
case-03 | fail→fail | 25,837 | 16,101 | -38% | 1 | 1 | 0% | 4,191 | 5,683 | +36% | 0 | 0 | — |
case-04 | pass→pass | 13,653 | 12,884 | -6% | 1 | 1 | 0% | 2,726 | 4,782 | +75% | 0 | 0 | — |
case-06 | fail→fail | 12,764 | 15,772 | +24% | 1 | 1 | 0% | 2,651 | 5,243 | +98% | 0 | 0 | — |
case-07 | pass→pass | 18,909 | 15,641 | -17% | 1 | 1 | 0% | 3,262 | 5,132 | +57% | 0 | 0 | — |
case-08 | fail→pass | 19,556 | 15,762 | -19% | 1 | 1 | 0% | 3,193 | 5,231 | +64% | 0 | 0 | — |
case-09 | fail→fail | 20,656 | 16,232 | -21% | 1 | 1 | 0% | 2,960 | 5,279 | +78% | 0 | 0 | — |
case-10 | fail→pass | 16,928 | 13,372 | -21% | 1 | 1 | 0% | 2,987 | 5,011 | +68% | 0 | 0 | — |
case-13 | pass→pass | 6,962 | 4,667 | -33% | 1 | 1 | 0% | 1,029 | 3,195 | +210% | 0 | 0 | — |
case-14 | pass→pass | 18,944 | 17,578 | -7% | 1 | 1 | 0% | 2,818 | 5,199 | +84% | 0 | 0 | — |
case-15 | pass→pass | 15,261 | 13,436 | -12% | 1 | 1 | 0% | 2,302 | 4,736 | +106% | 0 | 0 | — |
case-16 | pass→pass | 8,414 | 3,861 | -54% | 1 | 1 | 0% | 1,507 | 3,098 | +106% | 0 | 0 | — |
case-17 | fail→pass | 18,195 | 25,551 | +40% | 1 | 1 | 0% | 3,078 | 6,685 | +117% | 0 | 0 | — |
case-18 | pass→pass | 15,610 | 23,457 | +50% | 1 | 1 | 0% | 2,650 | 6,228 | +135% | 0 | 0 | — |
case-19 | pass→pass | 14,643 | 13,513 | -8% | 1 | 1 | 0% | 2,379 | 4,683 | +97% | 0 | 0 | — |
case-20 | fail→pass | 12,818 | 11,735 | -8% | 1 | 1 | 0% | 2,308 | 4,656 | +102% | 0 | 0 | — |
case-21 | fail→fail | 22,915 | 20,430 | -11% | 1 | 1 | 0% | 3,772 | 5,927 | +57% | 0 | 0 | — |
case-22 | fail→fail | 23,565 | 22,687 | -4% | 1 | 1 | 0% | 4,687 | 7,141 | +52% | 0 | 0 | — |
case-23 | fail→fail | 19,688 | 32,408 | +65% | 1 | 1 | 0% | 3,941 | 7,838 | +99% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +22 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.