Japan Anime Figure Demand Features avatar

Japan Anime Figure Demand Features

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Japan Anime Figure Demand Features

Japan Anime Figure Demand Features

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

atushi ino

atushi ino

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Japan Anime Figure Demand Feature Vectors

Fixed-dimension (48), normalized feature vectors for 650+ Japan anime/figure SKUs — purpose-built for AI agents, ML training pipelines and quant research.

Derived from the multi-shop price snapshot published by japan-anime-figure-price-data. No scraping happens at run time: this Actor re-projects an already-collected dataset into a machine-consumable feature matrix.

What this is not: it is not a back-tested price forecast. See Limitations before you build on it.


Quick start

npx @apify/apify-cli run atushi/japan-anime-figure-demand-features --input '{
"hasPriceOnly": true,
"minDemandScore": 0.35,
"limit": 50
}'

Call it from Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("japan-anime-figure-demand-features").call(
run_input={"hasPriceOnly": True, "minDemandScore": 0.35, "limit": 50}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["figureId"], item["demandScore"], item["vector"][:5])

Call it over HTTP

curl -s "https://api.apify.com/v2/acts/atushi~japan-anime-figure-demand-features/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"hasPriceOnly": true, "limit": 10}' | jq '.[0] | {figureId, demandScore, featureDim}'

Output shape

Every dataset item:

FieldTypeMeaning
schemaVersionstringFeature-vector schema version (semver)
featureDimintLength of vector; always 48 today
figureIdstringStable upstream SKU id
name, series, manufacturer, category, janCodestringIdentity
demandScorenumberComposite demand proxy in [0,1]
historyobjectpoints, firstSeen, lastSeen, velocityAvailable
coverageobjecthasOfferDetail, offerDetailRows, hasAggregatePrice, hasMsrp, hasJan
featuresobject48 named features (canonical order)
featureNamesarrayOrdered names; featureNames[i] ↔ vector[i]
vectorarray48 floats in featureNames order

The full schema manifest ships in the run's key-value store as FEATURE_MANIFEST (dimension, ordered names, per-dimension documentation and normalization constants). Fetch it once and build your column mapping from it instead of hard-coding indices.

Feature groups

GroupCountExamples
Price8price_min_norm, msrp_norm, discount_depth, premium_ratio
Supply8stock_ratio, offer_count_norm, shop_diversity_ratio
Cross-shop dispersion4shop_price_cv, cheapest_shop_advantage, instock_price_premium
Temporal8age_days_norm, release_year_norm, velocity_7d, history_available
Metadata completeness8has_msrp, has_jan, confidence
Categorical / identity8is_scale_figure, manufacturer_pop_norm, hash-bucket embeddings
Relative price rank3price_rank_in_series, price_rank_in_category, price_rank_in_manufacturer
Composite1demand_score

Normalization: every component lies in [0,1], except instock_price_premium and velocity_* which are clipped to [-1,1]. Absolute prices are divided by 50,000 JPY and offer counts by 30 — both constants are exposed in the manifest.

demand_score

demand_score = 0.35 * stock_ratio
+ 0.25 * log_offer_count_norm
+ 0.20 * discount_depth
+ 0.10 * (1 - age_days_norm)
+ 0.10 * (1 - price_spread_ratio)

A supply-side demand-pressure proxy. It is not a forecast and has not been back-tested against realised sales.


Limitations

  • Single collection point. The shipped upstream snapshot was captured on one date, so history.points is 1 for the 132 rows that carry offer detail and 0 for the rest. velocity_7d / velocity_30d are therefore emitted as 0.0. Gate on history_available == 1.0 before using velocity features; where it is 0.0 the values carry no information.
  • Aggregate-only rows. 181 upstream rows advertise a non-zero offer count (and often a price) while shipping an empty offers[] array. Price features still resolve from the aggregate figures, but every per-shop feature (shop_price_cv, shop_price_range_ratio, cheapest_shop_advantage, distinct_shop_norm, shop_diversity_ratio, instock_price_premium) is 0.0 for them — read coverage.hasOfferDetail first, or pass requireOfferDetail: true.
  • Sparse price coverage. 292 of 654 upstream rows carry a price; the rest have metadata only. Use hasPriceOnly: true to exclude them.
  • Hash-bucket embeddings. manufacturer_bucket_norm and friends are deterministic SHA-256 buckets, not trained embeddings. They give models a stable categorical signal, not semantics.
  • Japan-market scope. Figures, hobby goods and their secondary market only.

Pricing

Pay-Per-Event, $0.002 per dataset item returned — the account-standard price point shared by 46 of 73 portfolio Actors. A one-time Actor-start event applies per run ($0.00005 per GB of memory). No subscription, no minimum.

Input reference

FieldTypeDefaultNotes
figureIdsstring[]–Restrict to specific upstream SKUs
series / character / manufacturerstring–Case-insensitive partial match
categoriesstring[]–Scale Figure, Anime Figure
minDemandScore / maxDemandScorenumber–Filter on demandScore
hasPriceOnlyboolfalseDrop rows with no observed price
requireOfferDetailboolfalseDrop rows with an empty offers[]
includeFeaturesbooltrueAttach named feature dict
includeVectorbooltrueAttach ordered vector
limit / offsetint100 / 0Ordered by descending demandScore, then figureId

Provenance

Upstream dataset: japan-anime-figure-price-data (MyFigureList primary, 23 distinct shops observed, JAN/GTIN keyed where available). Each record carries sourcesMerged and confidence from the upstream collector via provenance in the manifest pipeline.

License

MIT.