Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
150 changes: 150 additions & 0 deletions skills/sap-rpt1-oss-predictor/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
---
name: sap-rpt1-oss-predictor
description: Use SAP-RPT-1-OSS open source tabular foundation model for predictive analytics on SAP business data. Handles classification and regression tasks including customer churn prediction, delivery delay forecasting, payment default risk, demand planning, and financial anomaly detection. Use when asked to predict, forecast, classify, or analyze patterns in SAP tabular data exports (CSV/DataFrame). Runs locally via Hugging Face model.
---

# SAP-RPT-1-OSS Predictor

SAP-RPT-1-OSS is SAP's open source tabular foundation model (Apache 2.0) for predictions on structured business data. Unlike LLMs that predict text, RPT-1 predicts field values in table rows using in-context learning—no model training required.

**Repository**: https://github.com/SAP-samples/sap-rpt-1-oss
**Model**: https://huggingface.co/SAP/sap-rpt-1-oss

## Setup

### 1. Install Package

```bash
pip install git+https://github.com/SAP-samples/sap-rpt-1-oss
```

### 2. Hugging Face Authentication

Model weights require HF login and license acceptance:

```bash
# Install HF CLI
pip install huggingface_hub

# Login (creates ~/.huggingface/token)
huggingface-cli login
```

Then accept model terms at: https://huggingface.co/SAP/sap-rpt-1-oss

### 3. Hardware Requirements

| Config | GPU Memory | Context Size | Bagging | Use Case |
|--------|------------|--------------|---------|----------|
| Optimal | 80GB (A100) | 8192 | 8 | Production, best accuracy |
| Standard | 40GB (A6000) | 4096 | 4 | Good balance |
| Minimal | 24GB (RTX 4090) | 2048 | 2 | Development |
| CPU | N/A | 1024 | 1 | Testing only (slow) |

## Quick Start

### Classification (Customer Churn, Payment Default)

```python
import pandas as pd
from sap_rpt_oss import SAP_RPT_OSS_Classifier

# Load SAP data export
df = pd.read_csv("sap_customers.csv")
X = df.drop(columns=["CHURN_STATUS"])
y = df["CHURN_STATUS"]

# Split data
X_train, X_test = X[:400], X[400:]
y_train, y_test = y[:400], y[400:]

# Initialize and predict
clf = SAP_RPT_OSS_Classifier(max_context_size=4096, bagging=4)
clf.fit(X_train, y_train)

predictions = clf.predict(X_test)
probabilities = clf.predict_proba(X_test)
```

### Regression (Delivery Delay Days, Demand Quantity)

```python
from sap_rpt_oss import SAP_RPT_OSS_Regressor

reg = SAP_RPT_OSS_Regressor(max_context_size=4096, bagging=4)
reg.fit(X_train, y_train)
predictions = reg.predict(X_test)
```

## Core Workflow

1. **Extract SAP data** → Export to CSV from relevant tables
2. **Prepare dataset** → Include 50-500 rows with known outcomes
3. **Rename fields** → Use semantic names (see Data Preparation)
4. **Run prediction** → Fit on training data, predict on new data
5. **Interpret results** → Probabilities for classification, values for regression

## SAP Use Cases

See `references/sap-use-cases.md` for detailed extraction queries:

- **FI-AR**: Payment default probability (BSID, BSAD, KNA1)
- **FI-GL**: Journal entry anomaly detection (ACDOCA, BKPF)
- **SD**: Delivery delay prediction (VBAK, VBAP, LIKP)
- **SD**: Customer churn likelihood (VBRK, VBRP, KNA1)
- **MM**: Vendor performance scoring (EKKO, EKPO, EBAN)
- **PP**: Production delay risk (AFKO, AFPO)

## Data Preparation

### Semantic Column Names (Important!)

RPT-1-OSS uses an LLM to embed column names and values. Descriptive names improve accuracy:

```python
# Good: Model understands business context
CUSTOMER_CREDIT_LIMIT, DAYS_SINCE_LAST_ORDER, PAYMENT_DELAY_DAYS

# Bad: Generic names lose semantic value
COL1, VALUE, FIELD_A
```

Use `scripts/prepare_sap_data.py` to rename SAP technical fields:

```python
from scripts.prepare_sap_data import SAPDataPrep

prep = SAPDataPrep()
df = prep.rename_sap_fields(df) # BUKRS → COMPANY_CODE, etc.
```

### Dataset Size
- Minimum: 50 training examples
- Recommended: 200-500 examples
- Maximum context: 8192 rows (GPU dependent)

## Scripts

- `scripts/rpt1_oss_predict.py` - Local model prediction wrapper
- `scripts/prepare_sap_data.py` - SAP field renaming and SQL templates
- `scripts/batch_predict.py` - Chunked processing for large datasets

## Alternative: RPT Playground API

For users with SAP access, the closed-source RPT-1 is available via API:

```python
from scripts.rpt1_api import RPT1Client

client = RPT1Client(token="YOUR_RPT_TOKEN") # Get from rpt-playground.sap.com
result = client.predict(data="data.csv", target_column="TARGET", task_type="classification")
```

See `references/api-reference.md` for RPT Playground API documentation.

## Limitations

- Tabular data only (no images, text documents)
- Requires labeled examples for in-context learning
- First prediction is slow (model loading)
- GPU strongly recommended for production use
24 changes: 24 additions & 0 deletions skills/sap-rpt1-oss-predictor/examples/customer_churn_sample.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
CUSTOMER_NUMBER,CUSTOMER_NAME,COUNTRY,ACCOUNT_GROUP,CREDIT_LIMIT,ORDERS_LAST_12M,REVENUE_LAST_12M,DAYS_SINCE_LAST_ORDER,AVG_ORDER_VALUE,AVG_PAYMENT_DELAY,LATE_PAYMENTS_COUNT,CREDIT_UTILIZATION,CHURN_STATUS
100001,Acme Corporation,US,ZIND,75000,15,185000,12,12333,2,0,0.45,ACTIVE
100002,Beta Industries,DE,ZIND,50000,8,62000,45,7750,5,1,0.38,ACTIVE
100003,Gamma Solutions,UK,ZSME,25000,3,18000,120,6000,15,2,0.22,AT_RISK
100004,Delta Corp,FR,ZIND,100000,0,0,380,0,35,5,0.0,CHURNED
100005,Epsilon Ltd,US,ZSME,30000,12,95000,8,7917,1,0,0.52,ACTIVE
100006,Zeta GmbH,DE,ZIND,60000,2,15000,200,7500,22,3,0.18,AT_RISK
100007,Eta Partners,UK,ZKEY,150000,25,450000,5,18000,0,0,0.65,ACTIVE
100008,Theta Inc,US,ZSME,20000,0,0,450,0,45,4,0.0,CHURNED
100009,Iota Systems,JP,ZIND,80000,6,48000,90,8000,8,1,0.28,AT_RISK
100010,Kappa Tech,US,ZKEY,200000,30,620000,3,20667,1,0,0.72,ACTIVE
100011,Lambda Corp,DE,ZSME,35000,4,28000,150,7000,18,2,0.15,AT_RISK
100012,Mu Industries,UK,ZIND,45000,1,5000,280,5000,30,4,0.08,CHURNED
100013,Nu Solutions,FR,ZSME,25000,9,72000,25,8000,3,0,0.42,ACTIVE
100014,Xi Partners,US,ZIND,90000,0,0,400,0,40,6,0.0,CHURNED
100015,Omicron Ltd,DE,ZKEY,120000,18,215000,10,11944,2,0,0.58,ACTIVE
100016,Pi GmbH,AT,ZSME,28000,5,35000,100,7000,12,2,0.25,AT_RISK
100017,Rho Corp,US,ZIND,55000,11,88000,20,8000,4,1,0.48,ACTIVE
100018,Sigma Tech,UK,ZSME,32000,2,12000,220,6000,25,3,0.12,AT_RISK
100019,Tau Inc,JP,ZIND,70000,0,0,365,0,38,5,0.0,CHURNED
100020,Upsilon Ltd,US,ZKEY,180000,22,380000,7,17273,1,0,0.62,ACTIVE
100021,NewCustomer1,DE,ZSME,40000,3,24000,85,8000,10,1,0.20,[PREDICT]
100022,NewCustomer2,US,ZIND,65000,7,52000,60,7429,6,1,0.32,[PREDICT]
100023,NewCustomer3,UK,ZKEY,95000,1,8000,180,8000,20,2,0.10,[PREDICT]
24 changes: 24 additions & 0 deletions skills/sap-rpt1-oss-predictor/examples/payment_default_sample.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
CUSTOMER_NUMBER,COMPANY_CODE,DOCUMENT_NUMBER,FISCAL_YEAR,INVOICE_AMOUNT,CURRENCY,PAYMENT_TERMS_DAYS,CREDIT_LIMIT,OUTSTANDING_BALANCE,HIST_AVG_DELAY,HIST_SEVERE_DELAYS,CUSTOMER_AGE_DAYS,INDUSTRY_CODE,PAYMENT_STATUS
100001,1000,5000001,2025,15000,USD,30,75000,25000,2,0,1825,MANUFACTURING,PAID
100002,1000,5000002,2025,8500,EUR,45,50000,18000,8,0,1460,RETAIL,PAID
100003,1000,5000003,2025,22000,GBP,30,25000,24000,25,2,730,SERVICES,DEFAULT
100004,1000,5000004,2025,5000,USD,60,100000,5000,1,0,2190,MANUFACTURING,PAID
100005,1000,5000005,2025,12000,USD,30,30000,28000,18,1,1095,RETAIL,DEFAULT
100006,2000,5000006,2025,45000,EUR,45,60000,52000,12,1,1825,WHOLESALE,DEFAULT
100007,1000,5000007,2025,3500,GBP,30,150000,15000,0,0,2555,TECHNOLOGY,PAID
100008,2000,5000008,2025,18000,USD,60,20000,19500,35,3,365,SERVICES,DEFAULT
100009,1000,5000009,2025,9000,JPY,45,80000,22000,5,0,1460,MANUFACTURING,PAID
100010,1000,5000010,2025,28000,USD,30,200000,45000,1,0,3285,TECHNOLOGY,PAID
100011,2000,5000011,2025,6500,EUR,45,35000,32000,22,2,730,RETAIL,DEFAULT
100012,1000,5000012,2025,11000,GBP,30,45000,8000,3,0,1825,WHOLESALE,PAID
100013,1000,5000013,2025,7500,USD,60,25000,12000,6,0,1095,SERVICES,PAID
100014,2000,5000014,2025,35000,EUR,30,90000,88000,42,4,1460,MANUFACTURING,DEFAULT
100015,1000,5000015,2025,4200,USD,45,120000,18000,2,0,2190,TECHNOLOGY,PAID
100016,1000,5000016,2025,16000,CHF,30,28000,26500,15,1,730,RETAIL,DEFAULT
100017,2000,5000017,2025,9800,USD,60,55000,14000,4,0,1825,WHOLESALE,PAID
100018,1000,5000018,2025,21000,EUR,45,32000,30000,28,2,365,SERVICES,DEFAULT
100019,1000,5000019,2025,5500,GBP,30,70000,8500,1,0,2555,MANUFACTURING,PAID
100020,2000,5000020,2025,13500,USD,30,180000,25000,2,0,1460,TECHNOLOGY,PAID
100021,1000,5000021,2025,19000,EUR,45,40000,38000,20,2,1095,RETAIL,[PREDICT]
100022,2000,5000022,2025,8000,USD,30,65000,15000,7,0,1825,SERVICES,[PREDICT]
100023,1000,5000023,2025,32000,GBP,60,95000,90000,30,3,730,WHOLESALE,[PREDICT]
Loading