Repository files navigation

TSDR

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

TSDR is a plug-and-play debiasing framework for Knowledge Tracing (KT). It is designed for educational logs that are selectively observed rather than randomly sampled. In real adaptive learning systems, exercise recommendation, student skipping, and self-selection can make the logged interactions Missing Not At Random (MNAR). Training KT models only on these observed logs may therefore mix true mastery with the data collection policy and produce biased knowledge-state estimates.

Selection bias in knowledge tracing

Core Idea

TSDR reframes KT training as debiased risk estimation over the full space of potential student-concept interactions, not only the interactions that happen to be observed.

The framework contains three components:

  • KT predictor: predicts the probability that a student answers the next question correctly from historical interactions.
  • Propensity model: estimates the probability that a concept or item is observed under the current student state.
  • Imputation model: estimates the counterfactual prediction error for unobserved interactions.

The doubly robust objective combines propensity-based correction with error imputation. It can remain unbiased if either the propensity model or the imputation model is accurate. However, directly applying doubly robust learning to sequential KT can introduce high variance and unstable training. TSDR therefore adds a temporal smoothness regularizer to the imputation trajectory, reducing variance accumulation while preserving the doubly robust correction.

Features

  • Supports multiple KT backbones: DKT, AKT, simpleKT, FoLiBiKT, SparseKT, and DisKT.
  • Provides baseline, IPW-only, imputation-only, and doubly robust training modes.
  • Adds temporal smoothness through the --lambda hyperparameter.
  • Uses student-stratified cross-validation and reports AUC, ACC, and RMSE.

Repository Structure

TSDR/
README.md
main.py
train.py
data_loaders.py
preprocess_data.py
configs/
example.yaml
images/
i.png
models/
__init__.py
akt.py
diskt.py
dkt.py
drkt.py
folibikt.py
simplekt.py
sparsekt.py

Installation

Create a Python environment and install the main dependencies:

pip install torch numpy pandas scipy scikit-learn accelerate pyyaml tqdm

The exact PyTorch installation command may depend on your CUDA version. See the official PyTorch installation guide if GPU support is needed.

Data

By default, datasets are expected under:

./dataset/<data_name>/

The training script reads the dataset path from configs/example.yaml:

dataset_path: "./dataset"

Each processed dataset should contain a preprocessed_df.csv file. If raw data are used, run or adapt preprocess_data.py for the corresponding dataset.

Quick Start

Train a standard KT baseline:

python main.py --model_name akt --data_name prob --baseline

Train with the full TSDR objective:

python main.py --model_name akt --data_name prob --dr --lambda 0.3

Train with inverse propensity weighting only:

python main.py --model_name akt --data_name prob --ipw

Train with imputation only:

python main.py --model_name akt --data_name prob --imput

Main Arguments

ArgumentDescription
--model_nameKT backbone. Choices: dkt, akt, simplekt, folibikt, sparsekt, diskt.
--data_nameDataset name under ./dataset.
--baselineTrain the original backbone without debiasing.
--ipwUse inverse propensity weighting.
--imputUse the imputation model without IPW correction.
--drUse doubly robust learning.
--lambdaTemporal smoothness strength.
--dropoutDropout probability.
--batch_sizeTraining and evaluation batch size.
--embedding_sizeEmbedding size for supported backbones.
--lrLearning rate.
--optimizerOptimizer name.
--modeOptional experiment mode for controlled settings.

The training-mode flags --baseline, --ipw, --imput, and --dr are mutually exclusive. If none is specified, the script defaults to baseline training.

Supported Backbones

The current implementation supports:

  • dkt
  • akt
  • simplekt
  • folibikt
  • sparsekt
  • diskt

TSDR wraps these backbones during training. The additional propensity and imputation modules are used for debiased offline training, while online inference can still use the KT predictor.

Code Credits

Part of this codebase is adapted from and extended upon DisKT. We thank the original authors for their open-source contribution.

About

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

TSDR

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

TSDR is a plug-and-play debiasing framework for Knowledge Tracing (KT). It is designed for educational logs that are selectively observed rather than randomly sampled. In real adaptive learning systems, exercise recommendation, student skipping, and self-selection can make the logged interactions Missing Not At Random (MNAR). Training KT models only on these observed logs may therefore mix true mastery with the data collection policy and produce biased knowledge-state estimates.

Selection bias in knowledge tracing

Core Idea

TSDR reframes KT training as debiased risk estimation over the full space of potential student-concept interactions, not only the interactions that happen to be observed.

The framework contains three components:

  • KT predictor: predicts the probability that a student answers the next question correctly from historical interactions.
  • Propensity model: estimates the probability that a concept or item is observed under the current student state.
  • Imputation model: estimates the counterfactual prediction error for unobserved interactions.

The doubly robust objective combines propensity-based correction with error imputation. It can remain unbiased if either the propensity model or the imputation model is accurate. However, directly applying doubly robust learning to sequential KT can introduce high variance and unstable training. TSDR therefore adds a temporal smoothness regularizer to the imputation trajectory, reducing variance accumulation while preserving the doubly robust correction.

Features

  • Supports multiple KT backbones: DKT, AKT, simpleKT, FoLiBiKT, SparseKT, and DisKT.
  • Provides baseline, IPW-only, imputation-only, and doubly robust training modes.
  • Adds temporal smoothness through the --lambda hyperparameter.
  • Uses student-stratified cross-validation and reports AUC, ACC, and RMSE.

Repository Structure

TSDR/
README.md
main.py
train.py
data_loaders.py
preprocess_data.py
configs/
example.yaml
images/
i.png
models/
__init__.py
akt.py
diskt.py
dkt.py
drkt.py
folibikt.py
simplekt.py
sparsekt.py

Installation

Create a Python environment and install the main dependencies:

pip install torch numpy pandas scipy scikit-learn accelerate pyyaml tqdm

The exact PyTorch installation command may depend on your CUDA version. See the official PyTorch installation guide if GPU support is needed.

Data

By default, datasets are expected under:

./dataset/<data_name>/

The training script reads the dataset path from configs/example.yaml:

dataset_path: "./dataset"

Each processed dataset should contain a preprocessed_df.csv file. If raw data are used, run or adapt preprocess_data.py for the corresponding dataset.

Quick Start

Train a standard KT baseline:

python main.py --model_name akt --data_name prob --baseline

Train with the full TSDR objective:

python main.py --model_name akt --data_name prob --dr --lambda 0.3

Train with inverse propensity weighting only:

python main.py --model_name akt --data_name prob --ipw

Train with imputation only:

python main.py --model_name akt --data_name prob --imput

Main Arguments

ArgumentDescription
--model_nameKT backbone. Choices: dkt, akt, simplekt, folibikt, sparsekt, diskt.
--data_nameDataset name under ./dataset.
--baselineTrain the original backbone without debiasing.
--ipwUse inverse propensity weighting.
--imputUse the imputation model without IPW correction.
--drUse doubly robust learning.
--lambdaTemporal smoothness strength.
--dropoutDropout probability.
--batch_sizeTraining and evaluation batch size.
--embedding_sizeEmbedding size for supported backbones.
--lrLearning rate.
--optimizerOptimizer name.
--modeOptional experiment mode for controlled settings.

The training-mode flags --baseline, --ipw, --imput, and --dr are mutually exclusive. If none is specified, the script defaults to baseline training.

Supported Backbones

The current implementation supports:

  • dkt
  • akt
  • simplekt
  • folibikt
  • sparsekt
  • diskt

TSDR wraps these backbones during training. The additional propensity and imputation modules are used for debiased offline training, while online inference can still use the KT predictor.

Code Credits

Part of this codebase is adapted from and extended upon DisKT. We thank the original authors for their open-source contribution.

About

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TSDR

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

TSDR is a plug-and-play debiasing framework for Knowledge Tracing (KT). It is designed for educational logs that are selectively observed rather than randomly sampled. In real adaptive learning systems, exercise recommendation, student skipping, and self-selection can make the logged interactions Missing Not At Random (MNAR). Training KT models only on these observed logs may therefore mix true mastery with the data collection policy and produce biased knowledge-state estimates.

Selection bias in knowledge tracing

Core Idea

TSDR reframes KT training as debiased risk estimation over the full space of potential student-concept interactions, not only the interactions that happen to be observed.

The framework contains three components:

  • KT predictor: predicts the probability that a student answers the next question correctly from historical interactions.
  • Propensity model: estimates the probability that a concept or item is observed under the current student state.
  • Imputation model: estimates the counterfactual prediction error for unobserved interactions.

The doubly robust objective combines propensity-based correction with error imputation. It can remain unbiased if either the propensity model or the imputation model is accurate. However, directly applying doubly robust learning to sequential KT can introduce high variance and unstable training. TSDR therefore adds a temporal smoothness regularizer to the imputation trajectory, reducing variance accumulation while preserving the doubly robust correction.

Features

  • Supports multiple KT backbones: DKT, AKT, simpleKT, FoLiBiKT, SparseKT, and DisKT.
  • Provides baseline, IPW-only, imputation-only, and doubly robust training modes.
  • Adds temporal smoothness through the --lambda hyperparameter.
  • Uses student-stratified cross-validation and reports AUC, ACC, and RMSE.

Repository Structure

TSDR/
README.md
main.py
train.py
data_loaders.py
preprocess_data.py
configs/
example.yaml
images/
i.png
models/
__init__.py
akt.py
diskt.py
dkt.py
drkt.py
folibikt.py
simplekt.py
sparsekt.py

Installation

Create a Python environment and install the main dependencies:

pip install torch numpy pandas scipy scikit-learn accelerate pyyaml tqdm

The exact PyTorch installation command may depend on your CUDA version. See the official PyTorch installation guide if GPU support is needed.

Data

By default, datasets are expected under:

./dataset/<data_name>/

The training script reads the dataset path from configs/example.yaml:

dataset_path: "./dataset"

Each processed dataset should contain a preprocessed_df.csv file. If raw data are used, run or adapt preprocess_data.py for the corresponding dataset.

Quick Start

Train a standard KT baseline:

python main.py --model_name akt --data_name prob --baseline

Train with the full TSDR objective:

python main.py --model_name akt --data_name prob --dr --lambda 0.3

Train with inverse propensity weighting only:

python main.py --model_name akt --data_name prob --ipw

Train with imputation only:

python main.py --model_name akt --data_name prob --imput

Main Arguments

ArgumentDescription
--model_nameKT backbone. Choices: dkt, akt, simplekt, folibikt, sparsekt, diskt.
--data_nameDataset name under ./dataset.
--baselineTrain the original backbone without debiasing.
--ipwUse inverse propensity weighting.
--imputUse the imputation model without IPW correction.
--drUse doubly robust learning.
--lambdaTemporal smoothness strength.
--dropoutDropout probability.
--batch_sizeTraining and evaluation batch size.
--embedding_sizeEmbedding size for supported backbones.
--lrLearning rate.
--optimizerOptimizer name.
--modeOptional experiment mode for controlled settings.

The training-mode flags --baseline, --ipw, --imput, and --dr are mutually exclusive. If none is specified, the script defaults to baseline training.

Supported Backbones

The current implementation supports:

  • dkt
  • akt
  • simplekt
  • folibikt
  • sparsekt
  • diskt

TSDR wraps these backbones during training. The additional propensity and imputation modules are used for debiased offline training, while online inference can still use the KT predictor.

Code Credits

Part of this codebase is adapted from and extended upon DisKT. We thank the original authors for their open-source contribution.

About

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TSDR

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

TSDR is a plug-and-play debiasing framework for Knowledge Tracing (KT). It is designed for educational logs that are selectively observed rather than randomly sampled. In real adaptive learning systems, exercise recommendation, student skipping, and self-selection can make the logged interactions Missing Not At Random (MNAR). Training KT models only on these observed logs may therefore mix true mastery with the data collection policy and produce biased knowledge-state estimates.

Selection bias in knowledge tracing

Core Idea

TSDR reframes KT training as debiased risk estimation over the full space of potential student-concept interactions, not only the interactions that happen to be observed.

The framework contains three components:

  • KT predictor: predicts the probability that a student answers the next question correctly from historical interactions.
  • Propensity model: estimates the probability that a concept or item is observed under the current student state.
  • Imputation model: estimates the counterfactual prediction error for unobserved interactions.

The doubly robust objective combines propensity-based correction with error imputation. It can remain unbiased if either the propensity model or the imputation model is accurate. However, directly applying doubly robust learning to sequential KT can introduce high variance and unstable training. TSDR therefore adds a temporal smoothness regularizer to the imputation trajectory, reducing variance accumulation while preserving the doubly robust correction.

Features

  • Supports multiple KT backbones: DKT, AKT, simpleKT, FoLiBiKT, SparseKT, and DisKT.
  • Provides baseline, IPW-only, imputation-only, and doubly robust training modes.
  • Adds temporal smoothness through the --lambda hyperparameter.
  • Uses student-stratified cross-validation and reports AUC, ACC, and RMSE.

Repository Structure

TSDR/
README.md
main.py
train.py
data_loaders.py
preprocess_data.py
configs/
example.yaml
images/
i.png
models/
__init__.py
akt.py
diskt.py
dkt.py
drkt.py
folibikt.py
simplekt.py
sparsekt.py

Installation

Create a Python environment and install the main dependencies:

pip install torch numpy pandas scipy scikit-learn accelerate pyyaml tqdm

The exact PyTorch installation command may depend on your CUDA version. See the official PyTorch installation guide if GPU support is needed.

Data

By default, datasets are expected under:

./dataset/<data_name>/

The training script reads the dataset path from configs/example.yaml:

dataset_path: "./dataset"

Each processed dataset should contain a preprocessed_df.csv file. If raw data are used, run or adapt preprocess_data.py for the corresponding dataset.

Quick Start

Train a standard KT baseline:

python main.py --model_name akt --data_name prob --baseline

Train with the full TSDR objective:

python main.py --model_name akt --data_name prob --dr --lambda 0.3

Train with inverse propensity weighting only:

python main.py --model_name akt --data_name prob --ipw

Train with imputation only:

python main.py --model_name akt --data_name prob --imput

Main Arguments

ArgumentDescription
--model_nameKT backbone. Choices: dkt, akt, simplekt, folibikt, sparsekt, diskt.
--data_nameDataset name under ./dataset.
--baselineTrain the original backbone without debiasing.
--ipwUse inverse propensity weighting.
--imputUse the imputation model without IPW correction.
--drUse doubly robust learning.
--lambdaTemporal smoothness strength.
--dropoutDropout probability.
--batch_sizeTraining and evaluation batch size.
--embedding_sizeEmbedding size for supported backbones.
--lrLearning rate.
--optimizerOptimizer name.
--modeOptional experiment mode for controlled settings.

The training-mode flags --baseline, --ipw, --imput, and --dr are mutually exclusive. If none is specified, the script defaults to baseline training.

Supported Backbones

The current implementation supports:

  • dkt
  • akt
  • simplekt
  • folibikt
  • sparsekt
  • diskt

TSDR wraps these backbones during training. The additional propensity and imputation modules are used for debiased offline training, while online inference can still use the KT predictor.

Code Credits

Part of this codebase is adapted from and extended upon DisKT. We thank the original authors for their open-source contribution.

About

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

TSDR

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

TSDR is a plug-and-play debiasing framework for Knowledge Tracing (KT). It is designed for educational logs that are selectively observed rather than randomly sampled. In real adaptive learning systems, exercise recommendation, student skipping, and self-selection can make the logged interactions Missing Not At Random (MNAR). Training KT models only on these observed logs may therefore mix true mastery with the data collection policy and produce biased knowledge-state estimates.

Selection bias in knowledge tracing

Core Idea

TSDR reframes KT training as debiased risk estimation over the full space of potential student-concept interactions, not only the interactions that happen to be observed.

The framework contains three components:

  • KT predictor: predicts the probability that a student answers the next question correctly from historical interactions.
  • Propensity model: estimates the probability that a concept or item is observed under the current student state.
  • Imputation model: estimates the counterfactual prediction error for unobserved interactions.

The doubly robust objective combines propensity-based correction with error imputation. It can remain unbiased if either the propensity model or the imputation model is accurate. However, directly applying doubly robust learning to sequential KT can introduce high variance and unstable training. TSDR therefore adds a temporal smoothness regularizer to the imputation trajectory, reducing variance accumulation while preserving the doubly robust correction.

Features

  • Supports multiple KT backbones: DKT, AKT, simpleKT, FoLiBiKT, SparseKT, and DisKT.
  • Provides baseline, IPW-only, imputation-only, and doubly robust training modes.
  • Adds temporal smoothness through the --lambda hyperparameter.
  • Uses student-stratified cross-validation and reports AUC, ACC, and RMSE.

Repository Structure

TSDR/
README.md
main.py
train.py
data_loaders.py
preprocess_data.py
configs/
example.yaml
images/
i.png
models/
__init__.py
akt.py
diskt.py
dkt.py
drkt.py
folibikt.py
simplekt.py
sparsekt.py

Installation

Create a Python environment and install the main dependencies:

pip install torch numpy pandas scipy scikit-learn accelerate pyyaml tqdm

The exact PyTorch installation command may depend on your CUDA version. See the official PyTorch installation guide if GPU support is needed.

Data

By default, datasets are expected under:

./dataset/<data_name>/

The training script reads the dataset path from configs/example.yaml:

dataset_path: "./dataset"

Each processed dataset should contain a preprocessed_df.csv file. If raw data are used, run or adapt preprocess_data.py for the corresponding dataset.

Quick Start

Train a standard KT baseline:

python main.py --model_name akt --data_name prob --baseline

Train with the full TSDR objective:

python main.py --model_name akt --data_name prob --dr --lambda 0.3

Train with inverse propensity weighting only:

python main.py --model_name akt --data_name prob --ipw

Train with imputation only:

python main.py --model_name akt --data_name prob --imput

Main Arguments

ArgumentDescription
--model_nameKT backbone. Choices: dkt, akt, simplekt, folibikt, sparsekt, diskt.
--data_nameDataset name under ./dataset.
--baselineTrain the original backbone without debiasing.
--ipwUse inverse propensity weighting.
--imputUse the imputation model without IPW correction.
--drUse doubly robust learning.
--lambdaTemporal smoothness strength.
--dropoutDropout probability.
--batch_sizeTraining and evaluation batch size.
--embedding_sizeEmbedding size for supported backbones.
--lrLearning rate.
--optimizerOptimizer name.
--modeOptional experiment mode for controlled settings.

The training-mode flags --baseline, --ipw, --imput, and --dr are mutually exclusive. If none is specified, the script defaults to baseline training.

Supported Backbones

The current implementation supports:

  • dkt
  • akt
  • simplekt
  • folibikt
  • sparsekt
  • diskt

TSDR wraps these backbones during training. The additional propensity and imputation modules are used for debiased offline training, while online inference can still use the KT predictor.

Code Credits

Part of this codebase is adapted from and extended upon DisKT. We thank the original authors for their open-source contribution.

About

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TSDR

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

TSDR is a plug-and-play debiasing framework for Knowledge Tracing (KT). It is designed for educational logs that are selectively observed rather than randomly sampled. In real adaptive learning systems, exercise recommendation, student skipping, and self-selection can make the logged interactions Missing Not At Random (MNAR). Training KT models only on these observed logs may therefore mix true mastery with the data collection policy and produce biased knowledge-state estimates.

Selection bias in knowledge tracing

Core Idea

TSDR reframes KT training as debiased risk estimation over the full space of potential student-concept interactions, not only the interactions that happen to be observed.

The framework contains three components:

  • KT predictor: predicts the probability that a student answers the next question correctly from historical interactions.
  • Propensity model: estimates the probability that a concept or item is observed under the current student state.
  • Imputation model: estimates the counterfactual prediction error for unobserved interactions.

The doubly robust objective combines propensity-based correction with error imputation. It can remain unbiased if either the propensity model or the imputation model is accurate. However, directly applying doubly robust learning to sequential KT can introduce high variance and unstable training. TSDR therefore adds a temporal smoothness regularizer to the imputation trajectory, reducing variance accumulation while preserving the doubly robust correction.

Features

  • Supports multiple KT backbones: DKT, AKT, simpleKT, FoLiBiKT, SparseKT, and DisKT.
  • Provides baseline, IPW-only, imputation-only, and doubly robust training modes.
  • Adds temporal smoothness through the --lambda hyperparameter.
  • Uses student-stratified cross-validation and reports AUC, ACC, and RMSE.

Repository Structure

TSDR/
README.md
main.py
train.py
data_loaders.py
preprocess_data.py
configs/
example.yaml
images/
i.png
models/
__init__.py
akt.py
diskt.py
dkt.py
drkt.py
folibikt.py
simplekt.py
sparsekt.py

Installation

Create a Python environment and install the main dependencies:

pip install torch numpy pandas scipy scikit-learn accelerate pyyaml tqdm

The exact PyTorch installation command may depend on your CUDA version. See the official PyTorch installation guide if GPU support is needed.

Data

By default, datasets are expected under:

./dataset/<data_name>/

The training script reads the dataset path from configs/example.yaml:

dataset_path: "./dataset"

Each processed dataset should contain a preprocessed_df.csv file. If raw data are used, run or adapt preprocess_data.py for the corresponding dataset.

Quick Start

Train a standard KT baseline:

python main.py --model_name akt --data_name prob --baseline

Train with the full TSDR objective:

python main.py --model_name akt --data_name prob --dr --lambda 0.3

Train with inverse propensity weighting only:

python main.py --model_name akt --data_name prob --ipw

Train with imputation only:

python main.py --model_name akt --data_name prob --imput

Main Arguments

ArgumentDescription
--model_nameKT backbone. Choices: dkt, akt, simplekt, folibikt, sparsekt, diskt.
--data_nameDataset name under ./dataset.
--baselineTrain the original backbone without debiasing.
--ipwUse inverse propensity weighting.
--imputUse the imputation model without IPW correction.
--drUse doubly robust learning.
--lambdaTemporal smoothness strength.
--dropoutDropout probability.
--batch_sizeTraining and evaluation batch size.
--embedding_sizeEmbedding size for supported backbones.
--lrLearning rate.
--optimizerOptimizer name.
--modeOptional experiment mode for controlled settings.

The training-mode flags --baseline, --ipw, --imput, and --dr are mutually exclusive. If none is specified, the script defaults to baseline training.

Supported Backbones

The current implementation supports:

  • dkt
  • akt
  • simplekt
  • folibikt
  • sparsekt
  • diskt

TSDR wraps these backbones during training. The additional propensity and imputation modules are used for debiased offline training, while online inference can still use the KT predictor.

Code Credits

Part of this codebase is adapted from and extended upon DisKT. We thank the original authors for their open-source contribution.

About

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TSDR

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

TSDR is a plug-and-play debiasing framework for Knowledge Tracing (KT). It is designed for educational logs that are selectively observed rather than randomly sampled. In real adaptive learning systems, exercise recommendation, student skipping, and self-selection can make the logged interactions Missing Not At Random (MNAR). Training KT models only on these observed logs may therefore mix true mastery with the data collection policy and produce biased knowledge-state estimates.

Selection bias in knowledge tracing

Core Idea

TSDR reframes KT training as debiased risk estimation over the full space of potential student-concept interactions, not only the interactions that happen to be observed.

The framework contains three components:

  • KT predictor: predicts the probability that a student answers the next question correctly from historical interactions.
  • Propensity model: estimates the probability that a concept or item is observed under the current student state.
  • Imputation model: estimates the counterfactual prediction error for unobserved interactions.

The doubly robust objective combines propensity-based correction with error imputation. It can remain unbiased if either the propensity model or the imputation model is accurate. However, directly applying doubly robust learning to sequential KT can introduce high variance and unstable training. TSDR therefore adds a temporal smoothness regularizer to the imputation trajectory, reducing variance accumulation while preserving the doubly robust correction.

Features

  • Supports multiple KT backbones: DKT, AKT, simpleKT, FoLiBiKT, SparseKT, and DisKT.
  • Provides baseline, IPW-only, imputation-only, and doubly robust training modes.
  • Adds temporal smoothness through the --lambda hyperparameter.
  • Uses student-stratified cross-validation and reports AUC, ACC, and RMSE.

Repository Structure

TSDR/
README.md
main.py
train.py
data_loaders.py
preprocess_data.py
configs/
example.yaml
images/
i.png
models/
__init__.py
akt.py
diskt.py
dkt.py
drkt.py
folibikt.py
simplekt.py
sparsekt.py

Installation

Create a Python environment and install the main dependencies:

pip install torch numpy pandas scipy scikit-learn accelerate pyyaml tqdm

The exact PyTorch installation command may depend on your CUDA version. See the official PyTorch installation guide if GPU support is needed.

Data

By default, datasets are expected under:

./dataset/<data_name>/

The training script reads the dataset path from configs/example.yaml:

dataset_path: "./dataset"

Each processed dataset should contain a preprocessed_df.csv file. If raw data are used, run or adapt preprocess_data.py for the corresponding dataset.

Quick Start

Train a standard KT baseline:

python main.py --model_name akt --data_name prob --baseline

Train with the full TSDR objective:

python main.py --model_name akt --data_name prob --dr --lambda 0.3

Train with inverse propensity weighting only:

python main.py --model_name akt --data_name prob --ipw

Train with imputation only:

python main.py --model_name akt --data_name prob --imput

Main Arguments

ArgumentDescription
--model_nameKT backbone. Choices: dkt, akt, simplekt, folibikt, sparsekt, diskt.
--data_nameDataset name under ./dataset.
--baselineTrain the original backbone without debiasing.
--ipwUse inverse propensity weighting.
--imputUse the imputation model without IPW correction.
--drUse doubly robust learning.
--lambdaTemporal smoothness strength.
--dropoutDropout probability.
--batch_sizeTraining and evaluation batch size.
--embedding_sizeEmbedding size for supported backbones.
--lrLearning rate.
--optimizerOptimizer name.
--modeOptional experiment mode for controlled settings.

The training-mode flags --baseline, --ipw, --imput, and --dr are mutually exclusive. If none is specified, the script defaults to baseline training.

Supported Backbones

The current implementation supports:

  • dkt
  • akt
  • simplekt
  • folibikt
  • sparsekt
  • diskt

TSDR wraps these backbones during training. The additional propensity and imputation modules are used for debiased offline training, while online inference can still use the KT predictor.

Code Credits

Part of this codebase is adapted from and extended upon DisKT. We thank the original authors for their open-source contribution.

About

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

TSDR

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

TSDR is a plug-and-play debiasing framework for Knowledge Tracing (KT). It is designed for educational logs that are selectively observed rather than randomly sampled. In real adaptive learning systems, exercise recommendation, student skipping, and self-selection can make the logged interactions Missing Not At Random (MNAR). Training KT models only on these observed logs may therefore mix true mastery with the data collection policy and produce biased knowledge-state estimates.

Selection bias in knowledge tracing

Core Idea

TSDR reframes KT training as debiased risk estimation over the full space of potential student-concept interactions, not only the interactions that happen to be observed.

The framework contains three components:

  • KT predictor: predicts the probability that a student answers the next question correctly from historical interactions.
  • Propensity model: estimates the probability that a concept or item is observed under the current student state.
  • Imputation model: estimates the counterfactual prediction error for unobserved interactions.

The doubly robust objective combines propensity-based correction with error imputation. It can remain unbiased if either the propensity model or the imputation model is accurate. However, directly applying doubly robust learning to sequential KT can introduce high variance and unstable training. TSDR therefore adds a temporal smoothness regularizer to the imputation trajectory, reducing variance accumulation while preserving the doubly robust correction.

Features

  • Supports multiple KT backbones: DKT, AKT, simpleKT, FoLiBiKT, SparseKT, and DisKT.
  • Provides baseline, IPW-only, imputation-only, and doubly robust training modes.
  • Adds temporal smoothness through the --lambda hyperparameter.
  • Uses student-stratified cross-validation and reports AUC, ACC, and RMSE.

Repository Structure

TSDR/
README.md
main.py
train.py
data_loaders.py
preprocess_data.py
configs/
example.yaml
images/
i.png
models/
__init__.py
akt.py
diskt.py
dkt.py
drkt.py
folibikt.py
simplekt.py
sparsekt.py

Installation

Create a Python environment and install the main dependencies:

pip install torch numpy pandas scipy scikit-learn accelerate pyyaml tqdm

The exact PyTorch installation command may depend on your CUDA version. See the official PyTorch installation guide if GPU support is needed.

Data

By default, datasets are expected under:

./dataset/<data_name>/

The training script reads the dataset path from configs/example.yaml:

dataset_path: "./dataset"

Each processed dataset should contain a preprocessed_df.csv file. If raw data are used, run or adapt preprocess_data.py for the corresponding dataset.

Quick Start

Train a standard KT baseline:

python main.py --model_name akt --data_name prob --baseline

Train with the full TSDR objective:

python main.py --model_name akt --data_name prob --dr --lambda 0.3

Train with inverse propensity weighting only:

python main.py --model_name akt --data_name prob --ipw

Train with imputation only:

python main.py --model_name akt --data_name prob --imput

Main Arguments

ArgumentDescription
--model_nameKT backbone. Choices: dkt, akt, simplekt, folibikt, sparsekt, diskt.
--data_nameDataset name under ./dataset.
--baselineTrain the original backbone without debiasing.
--ipwUse inverse propensity weighting.
--imputUse the imputation model without IPW correction.
--drUse doubly robust learning.
--lambdaTemporal smoothness strength.
--dropoutDropout probability.
--batch_sizeTraining and evaluation batch size.
--embedding_sizeEmbedding size for supported backbones.
--lrLearning rate.
--optimizerOptimizer name.
--modeOptional experiment mode for controlled settings.

The training-mode flags --baseline, --ipw, --imput, and --dr are mutually exclusive. If none is specified, the script defaults to baseline training.

Supported Backbones

The current implementation supports:

  • dkt
  • akt
  • simplekt
  • folibikt
  • sparsekt
  • diskt

TSDR wraps these backbones during training. The additional propensity and imputation modules are used for debiased offline training, while online inference can still use the KT predictor.

Code Credits

Part of this codebase is adapted from and extended upon DisKT. We thank the original authors for their open-source contribution.

About

Official code for "Temporal Smoothness Doubly Robust Learning for Debiased Knowledge Tracing" (IJCAI 2026)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages