# Disenpoi Ctr Eval

> Evaluates a model's ability to predict user check-in behavior (CTR) in location-based recommendation by disentangling sequential and geographical influences. It probes how well the model handles data sparsity and cold-start scenarios using real-world POI interaction logs. Use when the user wants to benchmark on Foursquare Tokyo, Foursquare New York, Meituan, or asks about evaluating this task. Reports AUC.

- Skill: `qhjqhj00/disenpoi-ctr-eval` (Agent Skill)
- Install (CLI): `npx skillmds add qhjqhj00/disenpoi-ctr-eval`
- Raw SKILL.md: https://api.skillmd.com/api/skills/qhjqhj00/disenpoi-ctr-eval/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: qhjqhj00 (https://skillmd.com/u/qhjqhj00)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/qhjqhj00/disenpoi-ctr-eval

---


# disenpoi-ctr-eval

> DisenPOI: Disentangling Sequential and Geographical Influence for Point-of-Interest Recommendation — Qin et al. (2022) (arXiv:2210.16591, 2022)

## What this evaluates

Evaluates a model's ability to predict user check-in behavior (CTR) in location-based recommendation by disentangling sequential and geographical influences. It probes how well the model handles data sparsity and cold-start scenarios using real-world POI interaction logs.

## Datasets

- **Foursquare Tokyo** — total 573703; splits: train (-1), val (-1), test (-1)
- **Foursquare New York** — total 227428; splits: train (-1), val (-1), test (-1)
- **Meituan** — total 470095; splits: train (-1), val (-1), test (-1)

## Metrics

- `AUC` **(primary)** — range: [0, 1]
  - Area under the Receiver Operating Characteristic curve. Measures the probability that a randomly chosen positive interaction is ranked higher than a negative one.
- `Logloss` — range: [0, ∞)
  - Binary cross-entropy loss. Measures the performance of a classification model where the prediction is a probability value between 0 and 1. Lower values indicate better calibration.

## Input / output format

**Input**: User's chronological check-in sequence (positive samples) and randomly sampled unvisited POIs (negative samples).

**Output**: Predicted probability score for each user-POI pair, used for CTR ranking.

## Scoring recipe

```python
def compute_auc(y_true, y_pred):
    # y_true: 1 for positive, 0 for negative
    # y_pred: predicted probabilities
    from sklearn.metrics import roc_auc_score
    return roc_auc_score(y_true, y_pred)

def compute_logloss(y_true, y_pred):
    from sklearn.metrics import log_loss
    return log_loss(y_true, y_pred)
```

## Common pitfalls

- Uses chronological split with last interaction per user for test, not random split.
- Negative sampling is random unvisited POIs, not hard negatives or popularity-based.
- Cold-start evaluation divides sequences into 5 folds (20% to 100%), which differs from standard train/val/test.

## Evidence (verbatim from paper)

> We sort the recorded user interactions in each dataset in chronological order. All visited POIs and the corresponding previous visiting subsequences make up the positive samples. For each positive sample, we randomly select one of the user’s unvisited POIs as the negative sample. The last interaction of each user is reserved for evaluation, while the remaining part is used for training. The evaluation set is then randomly split into two equal-sized subsets as test and validation set respectively. Since we have constructed training and evaluation set with positive and negative samples, we adopt AUC and Logloss as evaluation metrics, which is a common practice in CTR prediction

## Citation

```bibtex
@misc{qin2022disenpoi,
  title={DisenPOI: Disentangling Sequential and Geographical Influence for Point-of-Interest Recommendation},
  author={Qin et al. (2022)},
  year={2022},
  note={arXiv:2210.16591}
}
```

- arXiv: 2210.16591

