Skip to main content

average-fee-estimation

Solve questions about estimating the average fee a card scheme would charge for a transaction. Use this skill for questions asking about average fees per card scheme (e.g., "what would be the average fee that GlobalCard would charge for a transaction value of 50 EUR?"), comparing which card scheme is cheapest or most expensive, or filtering by credit/debit status, account type, or merchant category code description.

Informações da origem

Repositório
zjunlp/DataMind
Última atividade na origem
5 de julho de 2026 às 09:13
Idioma detectado do SKILL.md
inglês
Estrelas
149
Forks
13

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
Average_Fee_Estimation
description
Solve questions about estimating the average fee a card scheme would charge for a transaction. Use this skill for questions asking about average fees per card scheme (e.g., "what would be the average fee that GlobalCard would charge for a transaction value of 50 EUR?"), comparing which card scheme is cheapest or most expensive, or filtering by credit/debit status, account type, or merchant category code description.
# Average Fee Estimation ## Core Formula ``` fee = fixed_amount + rate * transaction_value / 10000 ``` All values in EUR. The **average fee** is the arithmetic mean of fees computed across all matching rules in `fees.json`. ## Data Files - `fees.json`: 1000 fee rules (card_scheme, account_type, merchant_category_code, aci, is_credit, capture_delay, monthly_fraud_level, monthly_volume, intracountry, fixed_amount, rate) - `merchant_category_codes.csv`: columns `mcc` (int) and `description` (string) — use this to look up MCC code from a description ## Null / Empty = "Applies to All" For every field in `fees.json`: - **Scalar fields** (is_credit, capture_delay, intracountry, etc.): `null` → rule applies to all values - **List fields** (account_type, merchant_category_code, aci): empty list `[]` → rule applies to all values When the question specifies a filter value, **include a rule if** the rule's field is null/empty OR the field explicitly contains that value. ## Question Type Patterns ### Type 1: Credit/debit filter only > "For credit transactions, what is the average fee that card scheme X would charge for Y EUR?" ```python import json with open('fees.json') as f: fees = json.load(f) matching = [r for r in fees if r['card_scheme'] == 'X' and (r['is_credit'] is None or r['is_credit'] == True)] # True for credit fee_values = [r['fixed_amount'] + r['rate'] * Y / 10000 for r in matching] answer = round(sum(fee_values) / len(fee_values), 6) ``` ### Type 2: Account type filter > "For account type T, what is the average fee that card scheme X would charge for Y EUR?" ```python matching = [r for r in fees if r['card_scheme'] == 'X' and (r['account_type'] == [] or 'T' in r['account_type'])] fee_values = [r['fixed_amount'] + r['rate'] * Y / 10000 for r in matching] answer = round(sum(fee_values) / len(fee_values), 6) ``` ### Type 3: Account type + MCC description filter > "For account type T and the MCC description: [description], what is the average fee that card scheme X would charge for Y EUR?" First look up the MCC code: ```python import pandas as pd mcc_df = pd.read_csv('merchant_category_codes.csv') # Match by substring or full description mcc_code = mcc_df[mcc_df['description'].str.contains('keyword', case=False)]['mcc'].values[0] ``` Then filter: ```python matching = [r for r in fees if r['card_scheme'] == 'X' and (r['account_type'] == [] or 'T' in r['account_type']) and (r['merchant_category_code'] == [] or mcc_code in r['merchant_category_code'])] fee_values = [r['fixed_amount'] + r['rate'] * Y / 10000 for r in matching] answer = round(sum(fee_values) / len(fee_values), 6) ``` ### Type 4: Cheapest / most expensive card scheme > "In the average scenario, which card scheme would provide the cheapest/most expensive fee for Y EUR?" Average ALL rules per card scheme (no filtering): ```python from collections import defaultdict scheme_fees = defaultdict(list) for r in fees: fee = r['fixed_amount'] + r['rate'] * Y / 10000 scheme_fees[r['card_scheme']].append(fee) scheme_avg = {s: sum(fl)/len(fl) for s, fl in scheme_fees.items()} cheapest = min(scheme_avg, key=scheme_avg.get) most_expensive = max(scheme_avg, key=scheme_avg.get) ``` ## Implementation Notes 1. **Empty list `[]` vs null**: In `fees.json`, list fields use `[]` (not null) to mean "all". Check with `r['account_type'] == []`, not `r['account_type'] is None`. 2. **MCC lookup**: Use `str.contains()` with a distinctive keyword from the description. The `mcc` column is an integer. 3. **No other data files needed**: For average fee questions, only `fees.json` and (for MCC) `merchant_category_codes.csv` are required. Do not filter by payments.csv data. 4. **Output format**: Round to 6 decimal places. If the question asks for a card scheme name (cheapest/most expensive), return the scheme name string. 5. **"Not Applicable" rule**: Only use if the question is genuinely unanswerable (e.g., no rules match, undefined scenario). For "average scenario" questions, average ALL rules across the card scheme without additional filtering. ## Verified Examples | Task | Query | Approach | Answer | |------|-------|----------|--------| | 1277 | GlobalCard, credit, 50 EUR | is_credit=True or null | 0.315937 | | 1279 | SwiftCharge, credit, 50 EUR | is_credit=True or null | 0.338686 | | 1281 | GlobalCard, credit, 100 EUR | is_credit=True or null | 0.560694 | | 1538 | NexPay, acct_type=R, 1000 EUR | acct=R or [] | 5.625868 | | 1570 | NexPay, acct_type=D, 1000 EUR | acct=D or [] | 5.504371 | | 1574 | NexPay, acct_type=D, 5000 EUR | acct=D or [] | 27.250479 | | 1577 | GlobalCard, acct_type=D, 1234 EUR | acct=D or [] | 6.580365 | | 1341 | GlobalCard, acct=H, MCC=5813, 50 EUR | acct=H or [], MCC=5813 or [] | 0.369324 | | 1347 | SwiftCharge, acct=H, MCC=5813, 100 EUR | acct=H or [], MCC=5813 or [] | 0.626512 | | 1508 | Most expensive for 50 EUR | all rules per scheme | NexPay | | 1510 | Most expensive for 100 EUR | all rules per scheme | NexPay | | 1515 | Cheapest for 5000 EUR | all rules per scheme | GlobalCard |
Ver no GitHub