-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpykt_bridge_quickstart.py
More file actions
54 lines (44 loc) · 1.65 KB
/
pykt_bridge_quickstart.py
File metadata and controls
54 lines (44 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""Export Orchid interactions to pyKT format and reuse pyKT predictions.
Run with:
PYTHONPATH=src python examples/pykt_bridge_quickstart.py
"""
from __future__ import annotations
from pathlib import Path
import pandas as pd
from orchid_ranker.learning_policy import KTValuePolicy
from orchid_ranker.pykt_bridge import PyKTPredictionAdapter, export_pykt_sequences, load_pykt_sequences
def main() -> None:
interactions = pd.DataFrame(
{
"user_id": ["u1", "u1", "u1", "u2", "u2", "u2"],
"item_id": ["q1", "q2", "q3", "q1", "q2", "q3"],
"concept_id": ["fractions", "fractions", "ratios", "fractions", "fractions", "ratios"],
"correct": [1, 0, 1, 0, 1, 1],
"timestamp": [1, 2, 3, 1, 2, 3],
"duration": [12, 18, 20, 15, 16, 17],
}
)
output = Path("/tmp/orchid_pykt_sequences.txt")
export_pykt_sequences(
interactions,
output,
concept_col="concept_id",
timestamp_col="timestamp",
duration_col="duration",
)
sequences = load_pykt_sequences(output)
predictions = pd.DataFrame(
{
"user_id": ["u1", "u1", "u1"],
"item_id": ["q1", "q2", "q3"],
"p_correct": [0.92, 0.62, 0.72],
}
)
adapter = PyKTPredictionAdapter(predictions, fallback="global_mean")
policy = KTValuePolicy(adapter, target_correct=0.70)
recs = policy.rank("u1", ["q1", "q2", "q3"], top_k=2)
print(f"Exported {len(sequences)} pyKT learner sequences")
print(f"Top item from pyKT predictions: {recs[0].item_id}")
print("pyKT bridge quickstart complete")
if __name__ == "__main__":
main()