|
--- |
|
title: Swift Stock Screener |
|
emoji: 💹 |
|
colorFrom: green |
|
colorTo: gray |
|
sdk: gradio |
|
sdk_version: 5.29.0 |
|
app_file: app.py |
|
pinned: true |
|
license: apache-2.0 |
|
short_description: Search over 12k companies by theme (VSS) or similarity (NNS) |
|
--- |
|
|
|
## Overview |
|
|
|
**Swift Stock Screener (SSS)** is an interactive application that enables semantic and similarity-based stock screening across ~13,000 equities. |
|
It combines **semantic vector search** on company descriptions with **nearest neighbor search** on financial fundamentals. |
|
|
|
The app allows two main modes: |
|
- **Theme search**: find stocks relevant to a concept (e.g., *“lithium”*, *“cloud computing”*). |
|
- **Ticker similarity search**: find peers to a given stock (e.g., *NVDA* → other semiconductors). |
|
|
|
Data (fundamentals and descriptions) is sourced from **Yahoo Finance**. Company **descriptions used in the semantic search** come directly from Yahoo Finance long summaries. |
|
|
|
--- |
|
|
|
## Features |
|
|
|
- **Semantic Theme Search** |
|
Uses `FinLang/finance-embeddings-investopedia` to embed queries and company descriptions. |
|
DuckDB with **HNSW vector index** executes approximate nearest neighbor search. |
|
Re-ranking adds: |
|
- **Literal rewards** (companies explicitly mentioning query terms boosted). |
|
- **Brevity penalties** (companies with very short descriptions are penalized). |
|
|
|
- **Ticker Similarity Search** |
|
Uses normalized numeric fundamentals (e.g., Market Cap, P/E, Revenue Growth, Volatility). |
|
Scikit-learn **NearestNeighbors** finds the closest peers. |
|
A **Similarity Index (0–100)** is computed with a gamma distribution scaling to give intuitive scores. |
|
|
|
- **Interactive Results Table** |
|
Paginated grid view with columns: |
|
- Name, Country, Sector, Market Cap |
|
- 1yr Return, Volatility, P/E, Revenue Growth, Dividend Yield, Beta |
|
Negative values are highlighted red. |
|
|
|
- **Dynamic Filtering** |
|
Click on a sector, industry, or country in the grid to filter results interactively. |
|
Multiple filters can be applied in succession. |
|
|
|
- **Company Details View** |
|
- Company name + Yahoo Finance description. |
|
- Full fundamentals table. |
|
- **Radar chart** of 5 normalized metrics: Beta, Debt/Equity, 1yr Return, Revenue Growth, Volatility. |
|
|
|
- **Controls** |
|
- **Theme box**: free text search. |
|
- **Ticker box**: find peers to a stock. |
|
- **Search** / **Reset** / **Random ticker** buttons. |
|
- Sorting by any metric. |
|
|
|
--- |
|
|
|
## Architecture |
|
|
|
- **Data**: Yahoo Finance fundamentals + descriptions. |
|
- **Embeddings**: `FinLang/finance-embeddings-investopedia` (768-dim vectors). |
|
- **Vector DB**: DuckDB with VSS extension + HNSW cosine index. |
|
- **Ticker similarity**: Scikit-learn `NearestNeighbors` with Euclidean distance over normalized features. |
|
- **UI**: Python + Gradio Blocks. |
|
- **Visualization**: Plotly for radar chart. |
|
|
|
--- |
|
|