mirror of
https://github.com/velocitatem/PHANTOM.git
synced 2026-05-31 08:33:36 +00:00
933 lines
42 KiB
TeX
933 lines
42 KiB
TeX
% Final thesis defense (PHANTOM)
|
|
% Build: cd paper/defense && pdflatex defense.tex && pdflatex defense.tex
|
|
%
|
|
% =========================================================================
|
|
% NOTATION GUIDE (every variable used in this deck is defined once here)
|
|
% =========================================================================
|
|
%
|
|
% PRICING & POLICY
|
|
% p_t price action at time t [EUR per booking]
|
|
% p_floor minimum viable price (marginal cost) [EUR per booking]
|
|
% E[P] expected price under policy pi [EUR per booking]
|
|
% pi(x_t) policy mapping context to price
|
|
% x_t context vector (product, time, behavior signals)
|
|
% R(p, q) revenue per session, equals p * q [EUR per session]
|
|
%
|
|
% COST OF INFORMATION
|
|
% COI(pi) = E[P] - p_floor [EUR per transaction]
|
|
% This is the average premium the platform extracts above marginal cost,
|
|
% i.e. the financial value of "knowing the customer's interest".
|
|
%
|
|
% BEHAVIOR & SESSIONS
|
|
% tau full session trajectory of (action, item, time) tuples
|
|
% tau' partial trajectory observed at scoring time
|
|
% T_hat(s'|s) empirical session transition kernel (a square table:
|
|
% rows are current actions, columns are next actions,
|
|
% each row sums to one)
|
|
% T_H_bar human prototype kernel (reference for human cohort)
|
|
% T_A_bar agent prototype kernel (reference for agent cohort)
|
|
%
|
|
% DETECTION SIGNAL
|
|
% Delta_H = KL(T_hat' || T_H_bar) distance to human prototype
|
|
% Delta_A = KL(T_hat' || T_A_bar) distance to agent prototype
|
|
% g(tau') = Delta_H - Delta_A signed gap, zero is the boundary
|
|
% f(tau') = sigmoid(g/T) in [0,1] agent-likelihood score
|
|
% T temperature for the sigmoid (unitless)
|
|
% threshold decision boundary at f = 0.5 (g = 0)
|
|
%
|
|
% DEMAND & CONTAMINATION
|
|
% d(p|theta) individual demand response, theta is type
|
|
% alpha contamination ratio, fraction of agent-mediated traffic
|
|
% Q(p|alpha) aggregate demand under contamination alpha
|
|
%
|
|
% ROBUST CONTROL
|
|
% P_hat_N empirical demand distribution from N samples
|
|
% U_eps(P_hat_N) Wasserstein ambiguity ball of radius eps
|
|
% lambda weight on COI-leakage penalty in the reward
|
|
% eta_ux weight on UX penalty in the reward
|
|
% c_info per-query info cost surrogate [EUR per query]
|
|
% UX(tau, p) user-experience penalty in [0,1]
|
|
%
|
|
% =========================================================================
|
|
|
|
\documentclass[aspectratio=169,11pt]{beamer}
|
|
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage{lmodern}
|
|
\usepackage{microtype}
|
|
\usepackage{amsmath,amssymb}
|
|
\usepackage{graphicx}
|
|
\usepackage{xspace}
|
|
\usepackage{booktabs}
|
|
\usepackage{appendixnumberbeamer}
|
|
\usepackage{hyperref}
|
|
\usepackage{tikz}
|
|
\usetikzlibrary{arrows.meta,calc,positioning,fit,shapes.geometric,shapes.misc,decorations.pathreplacing}
|
|
|
|
\graphicspath{{../src/chapters/figures/results/generated/final/plots/}{../src/chapters/}}
|
|
|
|
\usetheme[
|
|
progressbar=frametitle,
|
|
]{moloch}
|
|
\molochset{sectionpage=none,subsectionpage=none}
|
|
\usefonttheme{professionalfonts}
|
|
\setbeamertemplate{frame numbering}[fraction]
|
|
|
|
% Dark palette: deep ink canvas, cream paper text, orange + teal accents
|
|
\definecolor{PhantomPaper}{HTML}{F6F1E9}
|
|
\definecolor{PhantomInk}{HTML}{0F1B2D}
|
|
\definecolor{PhantomSlate}{HTML}{B5C2D2}
|
|
\definecolor{PhantomCyan}{HTML}{E08A4C}
|
|
\definecolor{PhantomIndigo}{HTML}{4FB8B2}
|
|
\definecolor{PhantomPeach}{HTML}{EEC39C}
|
|
\definecolor{PhantomMute}{HTML}{4A5566}
|
|
|
|
\setbeamercolor{normal text}{fg=PhantomPaper,bg=PhantomInk}
|
|
\setbeamercolor{background canvas}{bg=PhantomInk}
|
|
\setbeamercolor{alerted text}{fg=PhantomCyan}
|
|
\setbeamercolor{example text}{fg=PhantomIndigo}
|
|
\setbeamercolor{palette primary}{fg=PhantomPaper,bg=PhantomInk}
|
|
\setbeamercolor{frametitle}{fg=PhantomPaper,bg=PhantomInk}
|
|
\setbeamercolor{progress bar}{fg=PhantomCyan,bg=PhantomMute!50}
|
|
\setbeamercolor{title separator}{fg=PhantomCyan,bg=PhantomMute!50}
|
|
\setbeamercolor{structure}{fg=PhantomCyan}
|
|
\setbeamercolor{block title}{fg=PhantomPaper,bg=PhantomMute!70!PhantomInk}
|
|
\setbeamercolor{block body}{fg=PhantomPaper,bg=PhantomMute!35!PhantomInk}
|
|
\setbeamercolor{alertblock title}{fg=PhantomInk,bg=PhantomCyan}
|
|
\setbeamercolor{alertblock body}{fg=PhantomPaper,bg=PhantomCyan!25!PhantomInk}
|
|
\setbeamercolor{exampleblock title}{fg=PhantomInk,bg=PhantomIndigo}
|
|
\setbeamercolor{exampleblock body}{fg=PhantomPaper,bg=PhantomIndigo!25!PhantomInk}
|
|
|
|
\setbeamertemplate{navigation symbols}{}
|
|
\setbeamertemplate{itemize item}{\small\raise0.3ex\hbox{$\bullet$}}
|
|
\setbeamertemplate{itemize subitem}{\tiny\raise0.2ex\hbox{$\circ$}}
|
|
|
|
\hypersetup{colorlinks=true,urlcolor=PhantomCyan,linkcolor=PhantomInk}
|
|
|
|
\title{PHANTOM}
|
|
\subtitle{Pricing Heuristics Against Non-human Transaction Orchestration Mechanisms}
|
|
\author{Daniel R\"osel}
|
|
\institute{IE University, Madrid \\ Supervisor: Alberto Mart\'in Izquierdo}
|
|
\date{\today}
|
|
|
|
% Variable explanation block: \vardef{symbol}{description}
|
|
\newcommand{\vardef}[2]{%
|
|
\par\noindent\makebox[1.55cm][l]{\textbf{\color{PhantomCyan}#1}}%
|
|
\parbox[t]{\dimexpr\linewidth-1.65cm}{\small #2}\par\smallskip%
|
|
}
|
|
|
|
\newcommand{\metriccard}[2]{%
|
|
\begin{tikzpicture}
|
|
\node[
|
|
draw=PhantomInk,
|
|
rounded corners=3pt,
|
|
fill=PhantomCyan!10,
|
|
minimum width=3.05cm,
|
|
minimum height=1.25cm,
|
|
align=center
|
|
] {\Large\bfseries #1\\[-0.2em]{\scriptsize #2}};
|
|
\end{tikzpicture}%
|
|
}
|
|
|
|
% Compact inline icons (text-based, no nested tikzpictures).
|
|
% Dynamic color: uses current text color so icons stay visible inside
|
|
% blocks (dark text) and on the dark canvas (light text).
|
|
\newcommand{\humanicon}{\textbf{\textsf{H}}\xspace}
|
|
\newcommand{\roboticon}{\textcolor{PhantomCyan}{\textbf{\textsf{A}}}\xspace}
|
|
\newcommand{\platformicon}{\textcolor{PhantomIndigo}{\textbf{\textsf{P}}}\xspace}
|
|
|
|
% Big diagram icons (drawn directly inside an outer tikzpicture, no nesting)
|
|
\newcommand{\bighumanicon}[1]{%
|
|
\fill[PhantomInk] (#1) ++(0,0.45) circle (0.18);
|
|
\draw[PhantomInk,line width=0.6pt,fill=PhantomSlate!30] (#1) ellipse (0.32 and 0.22);
|
|
}
|
|
\newcommand{\bigroboticon}[1]{%
|
|
\draw[PhantomInk,line width=0.6pt,rounded corners=2pt,fill=PhantomCyan!30] ($(#1)+(-0.42,-0.30)$) rectangle ($(#1)+(0.42,0.34)$);
|
|
\fill[PhantomPaper] ($(#1)+(-0.18,0.05)$) circle (0.09);
|
|
\fill[PhantomPaper] ($(#1)+(0.18,0.05)$) circle (0.09);
|
|
\fill[PhantomInk] ($(#1)+(-0.18,0.05)$) circle (0.035);
|
|
\fill[PhantomInk] ($(#1)+(0.18,0.05)$) circle (0.035);
|
|
\draw[PhantomInk,line width=0.6pt] ($(#1)+(0,0.34)$) -- ($(#1)+(0,0.50)$);
|
|
\fill[PhantomCyan] ($(#1)+(0,0.55)$) circle (0.05);
|
|
}
|
|
\newcommand{\bigplatformicon}[1]{%
|
|
\draw[PhantomInk,line width=0.6pt,rounded corners=2pt,fill=PhantomIndigo!25] ($(#1)+(-0.32,-0.32)$) rectangle ($(#1)+(0.32,0.32)$);
|
|
\node[font=\small\bfseries,text=PhantomInk] at (#1) {P};
|
|
}
|
|
|
|
\tikzset{every node/.append style={text=PhantomInk}}
|
|
|
|
\begin{document}
|
|
|
|
% =========================================================================
|
|
% TITLE
|
|
% =========================================================================
|
|
\begin{frame}[plain]
|
|
\vfill
|
|
\centering
|
|
{\color{PhantomPaper}\Huge\bfseries PHANTOM\par}
|
|
\vspace{0.6em}
|
|
{\color{PhantomCyan}\rule{0.45\paperwidth}{0.06cm}\par}
|
|
\vspace{0.8em}
|
|
{\large\color{PhantomPaper}Pricing heuristics against non-human transaction orchestration\par}
|
|
\vfill
|
|
{\color{PhantomPaper}\normalsize Daniel R\"osel\par}
|
|
{\color{PhantomSlate}\small IE University \textbullet\ Supervisor: Alberto Mart\'in Izquierdo\par}
|
|
\vspace{1.2em}
|
|
{\footnotesize\color{PhantomCyan}\href{https://velocitatem.github.io/PHANTOM/}{\texttt{velocitatem.github.io/PHANTOM}}}
|
|
\vfill
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% ROADMAP (no minutes)
|
|
% =========================================================================
|
|
\begin{frame}{Roadmap: one argument in six stages}
|
|
\centering
|
|
\begin{tikzpicture}[
|
|
font=\scriptsize\sffamily,
|
|
stage/.style={draw=PhantomInk,rounded corners=3pt,fill=PhantomCyan!10,minimum width=2.05cm,minimum height=0.95cm,align=center},
|
|
flow/.style={-{Stealth[length=2.0mm,width=1.8mm]},line width=1pt,PhantomSlate}
|
|
]
|
|
\node[stage] (intro) {Two POVs};
|
|
\node[stage,right=0.30cm of intro] (platform) {Platform};
|
|
\node[stage,right=0.30cm of platform] (signal) {Signal};
|
|
\node[stage,right=0.30cm of signal] (drrl) {DR-RL};
|
|
\node[stage,right=0.30cm of drrl] (results) {Results};
|
|
\node[stage,right=0.30cm of results] (close) {Close};
|
|
\draw[flow,shorten <=2pt,shorten >=2pt] (intro.east) -- (platform.west);
|
|
\draw[flow,shorten <=2pt,shorten >=2pt] (platform.east) -- (signal.west);
|
|
\draw[flow,shorten <=2pt,shorten >=2pt] (signal.east) -- (drrl.west);
|
|
\draw[flow,shorten <=2pt,shorten >=2pt] (drrl.east) -- (results.west);
|
|
\draw[flow,shorten <=2pt,shorten >=2pt] (results.east) -- (close.west);
|
|
\end{tikzpicture}
|
|
|
|
\vspace{0.9em}
|
|
\begin{block}{Main research question}
|
|
How can dynamic pricing preserve margin integrity when transactions are
|
|
increasingly mediated by non-human agents?
|
|
\end{block}
|
|
\vspace{0.35em}
|
|
{\footnotesize Dynamic pricing has often been treated as a secondary
|
|
optimization layer; agent-mediated shopping turns it into a primary
|
|
margin-risk surface.}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% TWO POVs - INTRO
|
|
% =========================================================================
|
|
\begin{frame}{This work cycles through two points of view}
|
|
\centering
|
|
\begin{tikzpicture}[
|
|
font=\small\sffamily,
|
|
box/.style={draw=PhantomInk,rounded corners=6pt,minimum width=5.2cm,minimum height=3.4cm,align=center}
|
|
]
|
|
\node[box,fill=PhantomCyan!12] (consumer) at (-3.4,0) {};
|
|
\node[box,fill=PhantomIndigo!12] (platform) at (3.4,0) {};
|
|
\bighumanicon{-3.4,0.95}
|
|
\bigplatformicon{3.4,0.95}
|
|
\node[font=\small,align=center,text=PhantomInk] at (-3.4,-0.45)
|
|
{\textbf{Consumer POV}\\[0.4em]
|
|
\footnotesize\textit{``how much does this item cost?''}\\[0.2em]
|
|
\footnotesize the question being asked};
|
|
\node[font=\small,align=center,text=PhantomInk] at (3.4,-0.45)
|
|
{\textbf{Platform POV}\\[0.4em]
|
|
\footnotesize\textit{``what does this session reveal?''}\\[0.2em]
|
|
\footnotesize the demand being inferred};
|
|
\draw[<->,thick,PhantomSlate] (consumer.east) -- node[above,font=\scriptsize,text=PhantomPaper]{price quote} node[below,font=\scriptsize,text=PhantomPaper]{behavior trail} (platform.west);
|
|
\end{tikzpicture}
|
|
|
|
\vspace{0.6em}
|
|
\begin{block}{Why two views}
|
|
The same transaction looks very different from each side. We will switch
|
|
between them to show where agent-mediation breaks the loop.
|
|
\end{block}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% POV 1 - DIRECT
|
|
% =========================================================================
|
|
\begin{frame}{POV 1: the consumer asks the platform directly}
|
|
\centering
|
|
\begin{tikzpicture}[
|
|
font=\small\sffamily,
|
|
actor/.style={draw=PhantomInk,rounded corners=5pt,minimum width=2.6cm,minimum height=1.4cm,align=center,fill=PhantomPaper},
|
|
msg/.style={draw=PhantomInk!40,rounded corners=2pt,fill=PhantomCyan!8,inner sep=4pt,font=\scriptsize}
|
|
]
|
|
\node[actor,fill=PhantomCyan!14] (h) at (-4.5,0) {\\[0.6em]consumer};
|
|
\node[actor,fill=PhantomIndigo!14] (p) at (4.5,0) {\\[0.6em]platform};
|
|
\bighumanicon{-4.5,0.25}
|
|
\bigplatformicon{4.5,0.25}
|
|
|
|
\draw[-{Stealth[length=2.5mm]},thick,PhantomPaper] ([yshift=0.45cm]h.east) -- ([yshift=0.45cm]p.west)
|
|
node[midway,above,msg]{``how much does item $i$ cost?''};
|
|
\draw[-{Stealth[length=2.5mm]},thick,PhantomPaper] ([yshift=-0.45cm]p.west) -- ([yshift=-0.45cm]h.east)
|
|
node[midway,below,msg]{``it costs $p_t$''};
|
|
\end{tikzpicture}
|
|
|
|
\vspace{0.7em}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.5\textwidth}
|
|
\footnotesize
|
|
\textbf{What you see:} a website opens, you read a price, you decide.\\[0.3em]
|
|
\textbf{What the platform sees:} clicks, hovers, dwell time --- a clean
|
|
behavioral fingerprint of one human session.
|
|
\column{0.45\textwidth}
|
|
\begin{block}{Variables}
|
|
\vardef{$i$}{the item being shopped (e.g. a hotel night)}
|
|
\vardef{$p_t$}{posted price at time $t$, in EUR per booking}
|
|
\end{block}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% POV 2 - VIA AGENT
|
|
% =========================================================================
|
|
\begin{frame}{POV 2: the consumer asks an AI agent}
|
|
\centering
|
|
\begin{tikzpicture}[
|
|
font=\small\sffamily,
|
|
actor/.style={draw=PhantomInk,rounded corners=5pt,minimum width=2.3cm,minimum height=1.3cm,align=center,fill=PhantomPaper},
|
|
msg/.style={font=\tiny,text=PhantomSlate}
|
|
]
|
|
\node[actor,fill=PhantomCyan!14] (h) at (-5.6,0) {};
|
|
\node[actor,fill=PhantomCyan!14] (a) at (0,0) {};
|
|
\node[actor,fill=PhantomIndigo!14] (p) at (5.6,0) {};
|
|
\bighumanicon{-5.6,0}
|
|
\bigroboticon{0,0}
|
|
\bigplatformicon{5.6,0}
|
|
|
|
\draw[-{Stealth[length=2.5mm]},thick,PhantomPaper] ([yshift=0.35cm]h.east) -- ([yshift=0.35cm]a.west)
|
|
node[midway,above,msg]{``find prices for $i$''};
|
|
\draw[-{Stealth[length=2.5mm]},thick,PhantomPaper] ([yshift=0.35cm]a.east) -- ([yshift=0.35cm]p.west)
|
|
node[midway,above,msg]{repeated queries};
|
|
\draw[-{Stealth[length=2.5mm]},thick,PhantomCyan] ([yshift=-0.35cm]p.west) -- ([yshift=-0.35cm]a.east)
|
|
node[midway,below,msg,text=PhantomCyan]{many quotes};
|
|
\draw[-{Stealth[length=2.5mm]},thick,PhantomCyan] ([yshift=-0.35cm]a.west) -- ([yshift=-0.35cm]h.east)
|
|
node[midway,below,msg,text=PhantomCyan]{best price found};
|
|
\end{tikzpicture}
|
|
|
|
\vspace{0.5em}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.55\textwidth}
|
|
\footnotesize
|
|
\textbf{Same intent, different visible behavior.} The platform sees a
|
|
machine-paced session that looks nothing like the human who actually
|
|
wants to buy.
|
|
\column{0.40\textwidth}
|
|
\begin{alertblock}{Information asymmetry flips}
|
|
The agent samples many quotes before committing; the platform only
|
|
sees the recon, not the buyer.
|
|
\end{alertblock}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% DEMAND FLOW - WHAT THE PLATFORM ACTUALLY OBSERVES
|
|
% =========================================================================
|
|
\begin{frame}{Two flows, one demand signal --- and only one is reliable}
|
|
\centering
|
|
\begin{tikzpicture}[font=\scriptsize\sffamily,
|
|
flow/.style={-{Stealth[length=2.2mm]},thick,PhantomSlate},
|
|
panel/.style={draw=PhantomInk,rounded corners=4pt,minimum width=5.5cm,minimum height=3.0cm,align=center,fill=PhantomPaper}]
|
|
|
|
\node[panel,fill=PhantomCyan!8] (left) at (-3.4,0) {};
|
|
\node[anchor=north,font=\footnotesize\bfseries] at (left.north) {\vphantom{p}direct human session};
|
|
\coordinate (h1) at (-5.0,0.0);
|
|
\bighumanicon{h1}
|
|
\node[draw=PhantomInk,rounded corners=2pt,minimum width=1.4cm,minimum height=0.55cm,fill=PhantomPaper,font=\tiny] (pt1) at (-2.0,0.6) {one buyer};
|
|
\node[draw=PhantomInk,rounded corners=2pt,minimum width=1.4cm,minimum height=0.55cm,fill=PhantomCyan!20,font=\tiny] (q1) at (-2.0,-0.6) {true demand};
|
|
\draw[flow] ($(h1)+(0.3,0)$) -- (pt1.west);
|
|
\draw[flow] ($(h1)+(0.3,0)$) -- (q1.west);
|
|
|
|
\node[panel,fill=PhantomIndigo!8] (right) at (3.4,0) {};
|
|
\node[anchor=north,font=\footnotesize\bfseries] at (right.north) {\vphantom{p}agent-mediated session};
|
|
\coordinate (h2) at (1.4,0.0);
|
|
\coordinate (a2) at (3.4,0.0);
|
|
\bighumanicon{h2}
|
|
\bigroboticon{a2}
|
|
\node[draw=PhantomInk,rounded corners=2pt,minimum width=1.4cm,minimum height=0.55cm,fill=PhantomPaper,font=\tiny] (pt2) at (5.4,0.6) {many quotes};
|
|
\node[draw=PhantomInk,rounded corners=2pt,minimum width=1.4cm,minimum height=0.55cm,fill=PhantomMute!30,font=\tiny] (q2) at (5.4,-0.6) {buyer hidden};
|
|
\draw[flow] ($(h2)+(0.3,0)$) -- ($(a2)+(-0.42,0)$);
|
|
\draw[flow] ($(a2)+(0.42,0)$) -- (pt2.west);
|
|
\draw[flow] ($(a2)+(0.42,0)$) -- (q2.west);
|
|
\end{tikzpicture}
|
|
|
|
\vspace{0.5em}
|
|
{\footnotesize\textbf{Takeaway.} On the right, the platform sees recon, not
|
|
intent. Pricing trained on the visible signal will misread real demand.}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% POLICY DEFINITION (variables explained)
|
|
% =========================================================================
|
|
\begin{frame}{Policy first: one rule maps context into a price}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.50\textwidth}
|
|
\begin{block}{Definition}
|
|
\[
|
|
p_t = \pi(x_t)
|
|
\]
|
|
\end{block}
|
|
\vardef{$p_t$}{price quoted at time $t$ \;[EUR per booking]}
|
|
\vardef{$\pi$}{the pricing policy --- a function the platform learns}
|
|
\vardef{$x_t$}{context: product, time-of-day, and behavior summary of the session}
|
|
|
|
\column{0.45\textwidth}
|
|
\centering
|
|
\begin{tikzpicture}[
|
|
font=\scriptsize\sffamily,
|
|
box/.style={draw=PhantomInk,rounded corners=4pt,minimum width=3.35cm,minimum height=0.85cm,align=center},
|
|
flow/.style={-{Stealth[length=2.0mm]},thick,PhantomSlate}
|
|
]
|
|
\node[box,fill=PhantomPaper] (ctx) at (0,1.35) {context $x_t$};
|
|
\node[box,fill=PhantomIndigo!12] (pol) at (0,0.15) {policy $\pi$};
|
|
\node[box,fill=PhantomCyan!15] (act) at (0,-1.05) {price $p_t$};
|
|
\draw[flow] (ctx) -- (pol);
|
|
\draw[flow] (pol) -- (act);
|
|
\node[font=\tiny\itshape,text=PhantomSlate] at (0,-1.75) {bandits first; later extended to DR-RL};
|
|
\end{tikzpicture}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% COI METRIC (matches reference image style)
|
|
% =========================================================================
|
|
\begin{frame}{Cost of Information (COI) --- what the platform earns from \alert{knowing you}}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.50\textwidth}
|
|
\begin{block}{Definition}
|
|
\vspace{0.2em}
|
|
\centering
|
|
\[
|
|
\mathrm{COI}(\pi) = \mathbb{E}[P] - p_{\mathrm{floor}}
|
|
\]
|
|
\end{block}
|
|
\vardef{$\mathbb{E}[P]$}{expected price the policy actually charges \;[EUR per booking]}
|
|
\vardef{$p_{\mathrm{floor}}$}{minimum viable price (marginal cost / break-even floor)}
|
|
\vardef{COI}{average premium the platform extracts above marginal cost \;[EUR per transaction]}
|
|
|
|
\column{0.48\textwidth}
|
|
\centering
|
|
\begin{tikzpicture}[font=\scriptsize\sffamily,x=0.95cm,y=0.85cm]
|
|
\draw[->,thick,PhantomPaper] (-0.2,0) -- (5.6,0) node[right,text=PhantomPaper]{price $p$};
|
|
\draw[->,thick,PhantomPaper] (0,-0.1) -- (0,3.0) node[above,text=PhantomPaper]{density};
|
|
\draw[very thick,PhantomPaper,domain=0.2:5.2,smooth,samples=80]
|
|
plot (\x, {2.5*exp(-((\x-2.6)^2)/1.0)});
|
|
\draw[dashed,PhantomSlate] (1.2,0) -- (1.2,2.0) node[above,font=\tiny,text=PhantomPaper]{$p_{\mathrm{floor}}$};
|
|
\draw[dashed,PhantomCyan,thick] (2.6,0) -- (2.6,2.5) node[above,font=\tiny,text=PhantomCyan]{$\mathbb{E}[P]$};
|
|
\draw[decorate,decoration={brace,amplitude=4pt},PhantomCyan,thick] (1.2,2.7) -- (2.6,2.7) node[midway,above,font=\scriptsize,text=PhantomCyan]{COI};
|
|
\end{tikzpicture}
|
|
\end{columns}
|
|
|
|
\vspace{0.3em}
|
|
{\footnotesize\textit{The ``cost'' is from the consumer's POV: it is what they pay because the platform can read their interest. Revenue at risk equals COI $\times$ volume.}}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% WHY AGENTS ERODE COI - SIMPLIFIED ORDER STATISTIC
|
|
% =========================================================================
|
|
\begin{frame}{Why agents erode COI: the realizable price drops to the minimum}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.46\textwidth}
|
|
\footnotesize
|
|
A single buyer pays the price they were quoted.\\[0.4em]
|
|
An agent samples $N$ independent quotes and the buyer pays
|
|
\(\;p^{(1)} = \min(p_1,\dots,p_N)\).\\[0.4em]
|
|
\textbf{Result:} as $N \to \infty$, $\mathrm{COI} \to 0$. More recon
|
|
pushes realizable prices toward the floor.
|
|
|
|
\vspace{0.5em}
|
|
\begin{alertblock}{One-line claim}
|
|
Untreated agentic recon behaves like an information leak that
|
|
compresses sustainable margins.
|
|
\end{alertblock}
|
|
|
|
\column{0.50\textwidth}
|
|
\centering
|
|
\begin{tikzpicture}[font=\scriptsize\sffamily,x=0.65cm,y=0.85cm]
|
|
\draw[->,thick,PhantomPaper] (0,0) -- (6.5,0) node[right,text=PhantomPaper]{queries $N$};
|
|
\draw[->,thick,PhantomPaper] (0,0) -- (0,2.6) node[above,text=PhantomPaper]{COI [EUR]};
|
|
\draw[very thick,PhantomCyan,domain=0.2:6.0,smooth,samples=60]
|
|
plot (\x, {2.2*exp(-0.55*\x)+0.12});
|
|
\draw[dashed,PhantomSlate] (0,0.12) -- (6.0,0.12);
|
|
\node[anchor=west,font=\tiny,text=PhantomSlate] at (3.4,0.32) {price-floor proximity};
|
|
\node[anchor=west,font=\tiny,text=PhantomPaper] at (0.4,2.2) {single human};
|
|
\node[anchor=west,font=\tiny,text=PhantomCyan] at (3.4,1.0) {agent-amplified};
|
|
\end{tikzpicture}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% RESEARCH QUESTIONS - SQ1 SQ2 SQ3
|
|
% =========================================================================
|
|
\begin{frame}{The thesis answers one chain: \alert{mechanism \(\to\) signal \(\to\) control}}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.32\textwidth}
|
|
\centering
|
|
\begin{tikzpicture}[font=\scriptsize\sffamily]
|
|
\draw[rounded corners=4pt,draw=PhantomInk,fill=PhantomPaper] (-1.55,-1.1) rectangle (1.55,1.2);
|
|
\fill[PhantomCyan] (-0.75,0.35) circle (0.14);
|
|
\fill[PhantomCyan] (-0.45,0.70) circle (0.14);
|
|
\fill[PhantomCyan] (-0.15,0.45) circle (0.14);
|
|
\fill[PhantomIndigo] (0.35,-0.20) circle (0.14);
|
|
\fill[PhantomIndigo] (0.65,-0.45) circle (0.14);
|
|
\fill[PhantomIndigo] (0.95,-0.15) circle (0.14);
|
|
\draw[dashed,PhantomInk!60] (0.12,-0.92) -- (0.12,1.0);
|
|
\node[text=PhantomMute,font=\tiny] at (0,-0.97) {behavior separability};
|
|
\end{tikzpicture}
|
|
{\footnotesize\textbf{SQ1}}\\[-0.15em]
|
|
{\scriptsize Can we distinguish \humanicon and \roboticon sessions from interactions alone?}
|
|
|
|
\column{0.32\textwidth}
|
|
\centering
|
|
\begin{tikzpicture}[font=\scriptsize\sffamily]
|
|
\draw[rounded corners=4pt,draw=PhantomInk,fill=PhantomPaper] (-1.55,-1.1) rectangle (1.55,1.2);
|
|
\draw[->,thick,PhantomMute] (-1.15,-0.75) -- (1.2,-0.75) node[right,font=\tiny,text=PhantomMute,xshift=-3pt,yshift=4pt]{$\alpha$};
|
|
\draw[->,thick,PhantomMute] (-1.15,-0.75) -- (-1.15,0.85) node[above,font=\tiny,text=PhantomMute,yshift=-4pt,xshift=8pt]{COI};
|
|
\draw[very thick,PhantomCyan,domain=-1.0:1.05,smooth,samples=40] plot (\x, {0.65*exp(-1.2*(\x+1.0))-0.05});
|
|
\draw[dashed,PhantomMute] (-1.15,-0.55) -- (1.05,-0.55);
|
|
\node[text=PhantomMute,font=\tiny,xshift=2pt] at (-0.4,-0.45) {floor};
|
|
\node[text=PhantomMute,font=\tiny] at (0,-0.97) {COI erodes as $\alpha\uparrow$};
|
|
\end{tikzpicture}
|
|
{\footnotesize\textbf{SQ2}}\\[-0.15em]
|
|
{\scriptsize How strong is price and revenue erosion under agentic contamination?}
|
|
|
|
\column{0.32\textwidth}
|
|
\centering
|
|
\begin{tikzpicture}[font=\scriptsize\sffamily]
|
|
\draw[rounded corners=4pt,draw=PhantomInk,fill=PhantomPaper] (-1.55,-1.1) rectangle (1.55,1.2);
|
|
\draw[->,thick,PhantomMute] (-1.15,-0.75) -- (1.2,-0.75) node[right,font=\tiny,text=PhantomMute,xshift=-3pt,yshift=4pt]{UX};
|
|
\draw[->,thick,PhantomMute] (-1.15,-0.75) -- (-1.15,0.85) node[above,font=\tiny,text=PhantomMute,yshift=-4pt,xshift=10pt]{margin};
|
|
\fill[PhantomSlate] (-0.55,-0.40) circle (2.6pt);
|
|
\node[text=PhantomMute,font=\tiny] at (-0.55,-0.13) {baseline};
|
|
\fill[PhantomCyan] (0.55,0.45) circle (2.8pt);
|
|
\node[text=PhantomCyan,font=\tiny] at (0.55,0.72) {robust};
|
|
\draw[->,thick,PhantomCyan,dashed] (-0.40,-0.30) -- (0.40,0.35);
|
|
\node[text=PhantomMute,font=\tiny] at (0,-0.97) {robust dominates baseline};
|
|
\end{tikzpicture}
|
|
{\footnotesize\textbf{SQ3}}\\[-0.15em]
|
|
{\scriptsize Can policy design recover margin while keeping UX stable?}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\section{Platform Development}
|
|
|
|
% =========================================================================
|
|
% PLATFORM (Stage 1)
|
|
% =========================================================================
|
|
\begin{frame}{Stage 1: a dual-loop platform pairs every quote with its behavior}
|
|
\centering
|
|
\begin{tikzpicture}[
|
|
font=\scriptsize\sffamily,
|
|
box/.style={draw=PhantomInk,rounded corners=3pt,minimum width=2.5cm,minimum height=0.9cm,align=center,fill=PhantomPaper},
|
|
arr/.style={-{Stealth[length=2.2mm]},thick,PhantomSlate}
|
|
]
|
|
\node[box,fill=PhantomCyan!14] (actors) at (0,1.45) {users \humanicon\\agents \roboticon};
|
|
\node[box] (web) at (2.9,1.45) {web\\storefront};
|
|
\node[box] (provider) at (5.8,1.45) {pricing\\service};
|
|
\node[box] (redis) at (8.7,1.45) {serve\\cache};
|
|
\node[box,fill=PhantomIndigo!12,minimum width=3.1cm] (kafka) at (4.35,-0.15) {event stream\\behavior + quote logs};
|
|
\node[box,fill=PhantomCyan!10,minimum width=2.8cm] (airflow) at (8.0,-0.15) {offline trainer\\batch updates};
|
|
|
|
\draw[arr] (actors) -- (web);
|
|
\draw[arr] (web) -- (provider);
|
|
\draw[arr] (provider) -- (redis);
|
|
\draw[arr] (web.south) -- (kafka.north west);
|
|
\draw[arr] (provider.south) -- (kafka.north east);
|
|
\draw[arr] (kafka) -- (airflow);
|
|
\draw[arr] (airflow.north) -| (redis.south);
|
|
\draw[arr] (redis.west) to[bend left=35] (provider.east);
|
|
|
|
\node[font=\tiny\itshape,text=PhantomSlate] at (2.2,-1.0) {Kappa: streaming telemetry};
|
|
\node[font=\tiny\itshape,text=PhantomSlate] at (8.1,-1.0) {Lambda: offline learning + refresh};
|
|
\end{tikzpicture}
|
|
|
|
\vspace{0.4em}
|
|
\begin{itemize}
|
|
\item Every quote has a matching behavioral context in the log stream.
|
|
\item The same architecture supports reproducible stress tests before any live deployment.
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% DATASET CARD
|
|
% =========================================================================
|
|
\begin{frame}{Dataset card: compact, labeled, experiment-ready}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.60\textwidth}
|
|
\centering
|
|
\begin{tikzpicture}[
|
|
font=\scriptsize\sffamily,
|
|
chip/.style={draw=PhantomInk!40,rounded corners=2pt,inner sep=2.7pt,fill=PhantomPaper}
|
|
]
|
|
\node[draw=PhantomInk,rounded corners=5pt,fill=PhantomPaper,minimum width=6.85cm,minimum height=4.45cm] at (0,0) {};
|
|
\node[anchor=west,font=\footnotesize\bfseries,text=PhantomInk] at (-3.2,1.72) {WhoClickedIt dataset card};
|
|
\node[anchor=west,draw=PhantomInk!35,rounded corners=2pt,fill=PhantomCyan!10,inner xsep=4pt,inner ysep=3pt,text width=6.15cm,align=left,font=\tiny\ttfamily,text=PhantomInk] at (-3.2,1.22)
|
|
{huggingface.co/datasets/velocitatem/whoclickedit};
|
|
\node[anchor=west,chip,fill=PhantomIndigo!12] (humanrows) at (-3.2,0.52) {\textbf{human rows} 798};
|
|
\node[anchor=west,chip,fill=PhantomIndigo!12] at ([xshift=0.16cm]humanrows.east) {\textbf{agent rows} 3076};
|
|
\node[anchor=west,text width=6.0cm,align=left,font=\scriptsize,text=PhantomInk] at (-3.2,-0.33)
|
|
{Flat schema and explicit actor labels simplify session-aware train/test splits.};
|
|
\node[anchor=west,font=\tiny\itshape,text=PhantomSlate] at (-3.2,-1.01)
|
|
{Kafka provenance is retained for reproducibility.};
|
|
\end{tikzpicture}
|
|
|
|
\column{0.38\textwidth}
|
|
\centering
|
|
\begin{tikzpicture}[font=\scriptsize\sffamily,
|
|
stat/.style={draw=PhantomInk,rounded corners=5pt,minimum width=4.95cm,minimum height=1.33cm,align=center}]
|
|
\node[stat,fill=PhantomCyan!12] at (0,1.95)
|
|
{\Large\bfseries 29 interviews\\[-0.1em]\footnotesize labeled trajectories};
|
|
\node[stat,fill=PhantomCyan!18] at (0,0.25)
|
|
{\Large\bfseries 45\% / 55\%\\[-0.1em]\footnotesize human / agent split};
|
|
\node[stat,fill=PhantomIndigo!12] at (0,-1.45)
|
|
{\Large\bfseries 2 streams\\[-0.1em]\footnotesize interaction + price logs};
|
|
\end{tikzpicture}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% EXPERIMENTAL DESIGN
|
|
% =========================================================================
|
|
\begin{frame}{Experimental design controls goals, not instructions}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.58\textwidth}
|
|
\centering
|
|
\begin{tikzpicture}[
|
|
font=\scriptsize\sffamily,
|
|
box/.style={draw=PhantomInk,rounded corners=3pt,minimum width=3.65cm,minimum height=0.95cm,align=center,fill=PhantomPaper},
|
|
arr/.style={-{Stealth[length=2.2mm]},thick,PhantomSlate}
|
|
]
|
|
\node[box,fill=PhantomCyan!14] (tasks) at (0,1.8) {JTBD task pool\\hotel + airline modes};
|
|
\node[box] (assign) at (0,0.55) {random assignment\\mode + task + actor id};
|
|
\node[box,fill=PhantomIndigo!12] (run) at (0,-0.7) {execution\\human or browser-use agent};
|
|
\node[box] (logs) at (0,-1.95) {session logs\\events + quotes};
|
|
\draw[arr] (tasks) -- (assign);
|
|
\draw[arr] (assign) -- (run);
|
|
\draw[arr] (run) -- (logs);
|
|
\end{tikzpicture}
|
|
|
|
\column{0.40\textwidth}
|
|
\begin{itemize}\setlength{\itemsep}{0.55em}
|
|
\item Agents run with \textbf{browser-use} and a model-swappable LLM router (default \texttt{gpt-5-mini}).
|
|
\item Tasks are defined by outcomes, not scripted clicks, to preserve behavioral variety.
|
|
\item Current release is stronger on hotel flows than airline flows.
|
|
\end{itemize}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\section{Distinguishability Construction}
|
|
|
|
% =========================================================================
|
|
% KERNEL EXPLAINER (NEW dedicated slide)
|
|
% =========================================================================
|
|
\begin{frame}{Stage 2: what is a \alert{kernel}?}
|
|
\begin{block}{Plain definition}
|
|
A \textbf{kernel} is a small square table $T$ where $T[a,b]$ is the
|
|
probability that action $b$ follows action $a$ inside one session. Every
|
|
row sums to one.
|
|
\end{block}
|
|
|
|
\vspace{0.3em}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.45\textwidth}
|
|
\centering
|
|
\begin{tikzpicture}[font=\scriptsize\sffamily]
|
|
\node[draw=PhantomInk,rounded corners=3pt,fill=PhantomCyan!12,minimum width=2.6cm,minimum height=0.7cm] (a) at (-1.6,0.7) {view item};
|
|
\node[draw=PhantomInk,rounded corners=3pt,fill=PhantomPaper,minimum width=2.6cm,minimum height=0.7cm] (b) at (1.6,0.7) {hover};
|
|
\node[draw=PhantomInk,rounded corners=3pt,fill=PhantomIndigo!12,minimum width=2.6cm,minimum height=0.7cm] (c) at (0,-0.9) {add to cart};
|
|
\draw[-{Stealth[length=2mm]},thick,PhantomSlate] (a) -- node[above,font=\tiny]{0.64} (b);
|
|
\draw[-{Stealth[length=2mm]},thick,PhantomSlate] (b) -- node[right,font=\tiny]{0.31} (c);
|
|
\draw[-{Stealth[length=2mm]},thick,PhantomSlate] (a) -- node[left,font=\tiny]{0.36} (c);
|
|
\end{tikzpicture}\\[0.3em]
|
|
{\tiny example session graph}
|
|
|
|
\column{0.50\textwidth}
|
|
\centering
|
|
\begin{tabular}{@{}l|ccc@{}}
|
|
\toprule
|
|
from \textbackslash{} to & view & hover & cart \\
|
|
\midrule
|
|
view & 0.00 & 0.64 & 0.36 \\
|
|
hover & 0.69 & 0.00 & 0.31 \\
|
|
cart & 0.00 & 0.00 & 1.00 \\
|
|
\bottomrule
|
|
\end{tabular}\\[0.4em]
|
|
{\footnotesize\textit{This is the kernel $T$. Each row is a probability distribution.}}
|
|
\end{columns}
|
|
|
|
\vspace{0.3em}
|
|
\vardef{$T[a,b]$}{probability that the next action is $b$ given the current action is $a$}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% HUMAN VS AGENT KERNELS - VISUAL COMPARISON
|
|
% =========================================================================
|
|
\begin{frame}{Humans and agents click in \alert{different patterns}}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.48\textwidth}
|
|
\centering
|
|
\textbf{Human kernel $\bar T_H$}\par
|
|
{\scriptsize view $\to$ hover $\to$ cart, with detours}\par\vspace{0.2em}
|
|
\includegraphics[width=\linewidth,height=0.40\textheight,keepaspectratio]{mdp_human.pdf}
|
|
\column{0.48\textwidth}
|
|
\centering
|
|
\textbf{Agent kernel $\bar T_A$}\par
|
|
{\scriptsize view $\to$ view $\to$ view, almost no cart}\par\vspace{0.2em}
|
|
\includegraphics[width=\linewidth,height=0.40\textheight,keepaspectratio]{mdp_agent.pdf}
|
|
\end{columns}
|
|
|
|
\vspace{0.4em}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.32\textwidth}\centering\metriccard{$-3.35$}{mean gap (human)}
|
|
\column{0.32\textwidth}\centering\metriccard{$+1.65$}{mean gap (agent)}
|
|
\column{0.32\textwidth}\centering\metriccard{$p<0.001$}{Mann-Whitney rank}
|
|
\end{columns}
|
|
\vspace{0.2em}
|
|
{\footnotesize\textit{Two cohorts, two clearly separable click structures --- this is the foundation of the detection signal.}}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% SIGMOID SCORE - SIMPLIFIED
|
|
% =========================================================================
|
|
\begin{frame}{From two divergences to one \alert{sigmoid score}}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.46\textwidth}
|
|
\begin{block}{Step 1 --- distance to each prototype}
|
|
\(\Delta_H = \mathrm{KL}(\hat T' \,\|\, \bar T_H)\)\\[0.2em]
|
|
\(\Delta_A = \mathrm{KL}(\hat T' \,\|\, \bar T_A)\)
|
|
\end{block}
|
|
\begin{block}{Step 2 --- signed gap}
|
|
\(g(\tau') = \Delta_H - \Delta_A\)
|
|
\end{block}
|
|
\begin{alertblock}{Step 3 --- \textbf{sigmoid} squash}
|
|
\(f(\tau') = \sigma\!\left(\dfrac{g(\tau')}{T}\right) \in [0,1]\)
|
|
\end{alertblock}
|
|
\vardef{$\sigma$}{the standard logistic sigmoid}
|
|
\vardef{$T$}{temperature, controls how sharply the score moves away from $0.5$}
|
|
\vardef{threshold}{$f = 0.5$ corresponds to $g = 0$ (neither side)}
|
|
|
|
\column{0.50\textwidth}
|
|
\centering
|
|
\begin{tikzpicture}[font=\scriptsize\sffamily,x=0.7cm,y=2.0cm]
|
|
\draw[->,thick,PhantomPaper] (-4.2,0) -- (4.4,0) node[right,text=PhantomPaper]{$g(\tau')$};
|
|
\draw[->,thick,PhantomPaper] (0,-0.05) -- (0,1.15) node[above,text=PhantomPaper]{$f(\tau')$};
|
|
\draw[dashed,PhantomMute] (-4.0,1.0) -- (4.0,1.0);
|
|
\draw[dashed,PhantomCyan,thick] (-4.0,0.5) -- (4.0,0.5) node[right,font=\tiny,text=PhantomCyan]{threshold $0.5$};
|
|
\draw[very thick,PhantomCyan,domain=-4.0:4.0,smooth,samples=120]
|
|
plot (\x, {1/(1+exp(-1.4*\x))});
|
|
\node[anchor=north,font=\tiny,text=PhantomPaper] at (-3.0,-0.04) {human-like \humanicon};
|
|
\node[anchor=north,font=\tiny,text=PhantomPaper] at (3.0,-0.04) {agent-like \roboticon};
|
|
\fill[PhantomCyan] (0,0.5) circle (1.6pt);
|
|
\node[anchor=west,font=\tiny,text=PhantomPaper] at (0.1,0.55) {$g=0$};
|
|
\end{tikzpicture}\\[0.2em]
|
|
{\tiny\color{PhantomSlate} logistic curve --- saturates at $0$ and $1$, threshold at $0.5$}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\section{Distributionally Robust RL}
|
|
|
|
% =========================================================================
|
|
% DR-RL CORE IDEA - SIMPLIFIED
|
|
% =========================================================================
|
|
\begin{frame}{Stage 3: DR-RL trains against \alert{many plausible worlds}}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.50\textwidth}
|
|
\footnotesize
|
|
Standard RL trains against one demand model and overfits to it.
|
|
\textbf{DR-RL} optimises the worst case across a small ball of
|
|
plausible demand laws, so the policy still works when contamination
|
|
shifts.
|
|
|
|
\vspace{0.6em}
|
|
\begin{block}{Robust objective}
|
|
\(\displaystyle \pi^\star = \arg\max_\pi \min_{Q \in U_\epsilon} \mathbb{E}_Q[\,r\,]\)
|
|
\end{block}
|
|
\vardef{$Q$}{a candidate demand distribution inside the ball}
|
|
\vardef{$U_\epsilon$}{Wasserstein ball of radius $\epsilon$ around the empirical $\hat P_N$}
|
|
\vardef{$r$}{per-step reward (defined next slide)}
|
|
|
|
\column{0.46\textwidth}
|
|
\centering
|
|
\begin{tikzpicture}[font=\scriptsize\sffamily]
|
|
\draw[thick,PhantomPaper,fill=PhantomCyan!25!PhantomInk] (0,0) circle (2.0);
|
|
\draw[dashed,PhantomCyan,thick] (0,0) circle (1.4);
|
|
\fill[PhantomPaper] (0,0) circle (2.5pt) node[below,font=\tiny,text=PhantomPaper]{$\hat P_N$};
|
|
\fill[PhantomCyan] (0.9,0.5) circle (2pt);
|
|
\fill[PhantomCyan] (-0.7,0.7) circle (2pt);
|
|
\fill[PhantomCyan] (-1.0,-0.4) circle (2pt);
|
|
\fill[PhantomCyan] (0.6,-0.9) circle (2pt);
|
|
\node[font=\tiny,text=PhantomCyan] at (0,1.7) {plausible $Q$};
|
|
\node[font=\tiny,text=PhantomPaper] at (0,-2.3) {ambiguity ball $U_\epsilon$};
|
|
\end{tikzpicture}
|
|
\end{columns}
|
|
|
|
\vspace{0.3em}
|
|
{\footnotesize\textit{Implementation note: in code we solve a local robust loop on the contamination parameter $\alpha$, not the full continuous Wasserstein adversary.}}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% REWARD - THREE TERMS, EACH EXPLAINED
|
|
% =========================================================================
|
|
\begin{frame}{Reward: revenue, minus leakage, minus UX cost}
|
|
\[
|
|
r_t \;=\; \underbrace{R(p_t,\hat Q_t)}_{\text{revenue}}
|
|
\;-\; \underbrace{\lambda \, f(\tau'_t)\, c_{\text{info}}}_{\text{leakage penalty}}
|
|
\;-\; \underbrace{\eta_{\text{ux}}\, \mathrm{UX}(\tau'_t,p_t)}_{\text{UX penalty}}
|
|
\]
|
|
|
|
\vspace{0.6em}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.32\textwidth}
|
|
\begin{block}{Revenue}
|
|
\(R(p_t,\hat Q_t) = p_t \cdot \hat Q_t\)\\[0.2em]
|
|
{\footnotesize units: EUR per session}
|
|
\end{block}
|
|
\column{0.32\textwidth}
|
|
\begin{alertblock}{Leakage}
|
|
scales with $f(\tau'_t)$ \roboticon\\
|
|
$\lambda$: weight\\
|
|
$c_{\text{info}}$: per-query cost
|
|
\end{alertblock}
|
|
\column{0.32\textwidth}
|
|
\begin{exampleblock}{UX}
|
|
$\mathrm{UX}\in[0,1]$\\
|
|
$\eta_{\text{ux}}$: weight\\
|
|
penalises unstable pricing
|
|
\end{exampleblock}
|
|
\end{columns}
|
|
|
|
\vspace{0.4em}
|
|
{\footnotesize \textbf{Reading the formula:}
|
|
if a session looks agent-like ($f \uparrow$), the leakage penalty grows
|
|
and the policy backs off; for clean human sessions only the revenue and
|
|
UX terms are active.}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% COMPUTE
|
|
% =========================================================================
|
|
\begin{frame}{Wide sweeps are feasible only with \alert{aggressive optimization}}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.47\textwidth}
|
|
\centering
|
|
{\Large\(4\times4\times3\times2\times2=\mathbf{192}\) configs}\\[0.25em]
|
|
{\scriptsize algorithms $\times$ contamination $\times$ robustness $\times$ COI penalty $\times$ action grid}
|
|
|
|
\vspace{0.5em}
|
|
\metriccard{160 PFLOPS}{peak aggregate TPU budget}\\[0.45em]
|
|
\metriccard{$\sim$180 days}{net compute logged}
|
|
|
|
\column{0.51\textwidth}
|
|
\begin{block}{Hot-path rewrite impact}
|
|
\centering
|
|
\begin{tabular}{@{}lcc@{}}
|
|
\toprule
|
|
Mode & Before & After \\
|
|
\midrule
|
|
Baseline step/s & 26.0 & 220.0 \\
|
|
Robust step/s & 7.2 & 136.0 \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\end{block}
|
|
\vspace{0.1em}
|
|
{\footnotesize
|
|
\begin{itemize}
|
|
\item pandas lookups replaced with array/JAX-style loops.
|
|
\item $8.5\times$ and $19\times$ throughput gains made wide sweeps practical.
|
|
\end{itemize}}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\section{Results}
|
|
|
|
% =========================================================================
|
|
% RESULTS - BIGGER FONTS, EXPLICIT CONCLUSION
|
|
% =========================================================================
|
|
\begin{frame}{Defended policies recover COI as contamination rises}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.62\textwidth}
|
|
\centering
|
|
\includegraphics[width=\linewidth,height=0.66\textheight,keepaspectratio]{final_focus_coi_by_alpha.pdf}\\[0.2em]
|
|
{\footnotesize x: contamination $\alpha$ (fraction of agent traffic) \;|\; y: COI [EUR per transaction]}
|
|
|
|
\column{0.34\textwidth}
|
|
\metriccard{$-90{,}140$}{baseline COI slope (EUR per unit $\alpha$)}\\[0.35em]
|
|
\metriccard{$\sim 3\%$}{short-run revenue cost of defense}\\[0.35em]
|
|
\metriccard{regime-dependent}{COI gains strongest at higher $\alpha$}
|
|
|
|
\vspace{0.5em}
|
|
\begin{alertblock}{Conclusion}
|
|
\footnotesize Without defense, COI collapses with $\alpha$.
|
|
Robust policies hold a measurable margin floor at the cost of
|
|
a small, bounded revenue trade.
|
|
\end{alertblock}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
\section{Conclusions}
|
|
|
|
% =========================================================================
|
|
% CONCLUSION
|
|
% =========================================================================
|
|
\begin{frame}{Yes, with boundaries: margin integrity \alert{is defensible} under agentic orchestration}
|
|
\begin{columns}[T,onlytextwidth]
|
|
\column{0.32\textwidth}
|
|
\begin{block}{SQ1\;\;distinguishability}
|
|
\centering
|
|
kernels are separable\\$p<0.001$
|
|
\end{block}
|
|
\column{0.32\textwidth}
|
|
\begin{block}{SQ2\;\;theoretical impact}
|
|
\centering
|
|
COI erosion mechanism\\proved in baseline limit
|
|
\end{block}
|
|
\column{0.32\textwidth}
|
|
\begin{block}{SQ3\;\;mitigation}
|
|
\centering
|
|
robust control shifts\\COI / revenue / UX trade-off
|
|
\end{block}
|
|
\end{columns}
|
|
|
|
\vspace{0.5em}
|
|
\begin{alertblock}{Boundary conditions}
|
|
Evidence is from a controlled platform and a small labeled cohort.
|
|
This is mechanism validation, not full production external validity.
|
|
\end{alertblock}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% IMPLICATIONS
|
|
% =========================================================================
|
|
\begin{frame}{What this implies for real pricing systems}
|
|
\begin{itemize}\setlength{\itemsep}{0.7em}
|
|
\item \textbf{Financially:} untreated reconnaissance behaves like an information leak and can compress sustainable margins.
|
|
\item \textbf{Operationally:} behavior-only session scoring can be wired into pricing without device fingerprinting.
|
|
\item \textbf{Market exposure:} channels where dynamic pricing is a secondary layer (aggregators, comparison funnels, promo traffic) are disrupted first.
|
|
\item \textbf{Strategically:} robust pricing should be calibrated by regime; there is no single penalty that wins everywhere.
|
|
\item \textbf{Before deployment:} larger human baselines, governance review, and legal safeguards are mandatory.
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
% =========================================================================
|
|
% THANK YOU
|
|
% =========================================================================
|
|
\begin{frame}[plain]
|
|
\centering
|
|
\vfill
|
|
{\LARGE\bfseries Thank you}
|
|
\vspace{0.8em}
|
|
|
|
{\large Questions and discussion}
|
|
|
|
\vfill
|
|
{\footnotesize\color{PhantomSlate}Appendix follows: COI theorem derivation, reward composition, and sample-size notes.}
|
|
\vfill
|
|
\end{frame}
|
|
|
|
\appendix
|
|
\input{defense_appendix}
|
|
|
|
\end{document}
|