# Tutorial: Backtesting
source: https://docs.chalk.ai/docs/fraud-6

## Try out new feature values on historical data.

If you want to skip ahead, you can find the full source code for this tutorial on
GitHub.

After you've created some features and resolvers,
you can use them to generate values for training.

Chalk tracks all the values of the features you
compute, and times at which those values were
computed.

First, we need to sample some user ids on which to
build a dataset.

```
from datetime import datetime, timezone, timedelta
from chalk.client import ChalkClient
from src.models import User

client = ChalkClient()

now = datetime.now(tz=timezone.utc)
ds = client.offline_query(
    output=[User.id],
    lower_bound=now - timedelta(hours=12),
    upper_bound=now,
)

```

```
from chalk.client import ChalkClient

client = ChalkClient()
dataset = client.offline_query(
    input={
        User.id: [],
    },
    output=[],
    recompute_features=True,
)


ds = client.offline_query(
    input={
    "fraud_model.id": spine["fraud_model.id"].to_list()
    },
    input_times=spine['__chalk__.CHALK_TS'].to_list(),
    output=[
        "fraud_model.id",
        "fraud_model.card_created_at",
    ],
    recompute_features=True
)
```





