<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7118563403027467631</id><updated>2026-03-28T13:31:34.300-04:00</updated><category term="research"/><category term="mechanical turk"/><category term="crowdsourcing"/><category term="academia"/><category term="wisdom of the crowds"/><category term="odesk"/><category term="prediction markets"/><category term="online labor"/><category term="teaching"/><category term="peer reviewing"/><category term="statistics"/><category term="hcomp"/><category term="large datasets"/><category term="evaluation"/><category term="humor"/><category term="open access"/><category term="google"/><category term="efficient markets"/><category term="human computation"/><category term="presidential elections 2008"/><category term="reputation"/><category term="surveys"/><category term="amazon"/><category term="conference"/><category term="data mining"/><category term="incentives"/><category term="quality"/><category term="reviews"/><category term="spam"/><category term="wikipedia"/><category term="acm"/><category term="education"/><category term="market for lemons"/><category term="search"/><category term="advice"/><category term="dagstuhl"/><category term="demo"/><category term="economics"/><category term="fraud"/><category term="machine learning"/><category term="online markets"/><category term="pricing"/><category term="publishers"/><category term="ranked xml querying"/><category term="Hillary Clinton"/><category term="Mitt Romney"/><category term="Rudy Giuliani"/><category term="adsafe"/><category term="api"/><category term="bayesian"/><category term="cheating"/><category term="cloud computing"/><category term="clustering"/><category term="comic"/><category term="computer science"/><category term="embed"/><category term="frequentist"/><category term="image classification"/><category term="intellectual property"/><category term="mooc"/><category term="moocs"/><category term="online advertising"/><category term="power law"/><category term="probability"/><category term="tutorial"/><category term="visualization"/><category term="wikis"/><category term="FROC"/><category term="ROC"/><category term="aca"/><category term="adwords"/><category term="assembly line"/><category term="attack"/><category term="brand safety"/><category term="businessweek"/><category term="call for papers"/><category term="cds"/><category term="cfp"/><category term="charity"/><category term="cognitive dissonance"/><category term="csdm"/><category term="customer service"/><category term="data cleaning"/><category term="deduplication"/><category term="demographics"/><category term="dirichlet"/><category term="drm"/><category term="ec2012"/><category term="extreme value theory"/><category term="facebook"/><category term="funny"/><category term="get-another-label"/><category term="gmail"/><category term="google spreadsheet"/><category term="growth"/><category term="honda"/><category term="independence"/><category term="industry analysis"/><category term="information extraction"/><category term="information theory"/><category term="interviews"/><category term="intrade"/><category term="keyword bidding"/><category term="kyc"/><category term="lda"/><category term="majority voting"/><category term="markets"/><category term="mashape"/><category term="meetup"/><category term="merger"/><category term="microsoft"/><category term="mind maps"/><category term="minimum wage"/><category term="newsweek"/><category term="nyu"/><category term="online education"/><category term="outliers"/><category term="payment"/><category term="postdoc"/><category term="powerpoint"/><category term="presentation"/><category term="privacy"/><category term="propublica"/><category term="psychology"/><category term="readability"/><category term="reduced models"/><category term="regulations"/><category term="skills"/><category term="slides"/><category term="string matching"/><category term="structural models."/><category term="synonyms"/><category term="tagasauris"/><category term="trec"/><category term="typesetting"/><category term="web service"/><category term="wikisynonyms"/><category term="www2011"/><category term="yahoo"/><category term="youtube"/><title type='text'>A Computer Scientist in a Business School</title><subtitle type='html'>Random thoughts of a computer scientist who is working behind the enemy lines; and lately turned into a double agent.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.behind-the-enemy-lines.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>257</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-2166968507309243978</id><published>2026-03-28T12:08:00.005-04:00</published><updated>2026-03-28T12:12:25.163-04:00</updated><title type='text'>Taste Is Not Enough. Reality or Bust</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi0D91beEXdv5TwZxaW67nbotfHHeDPxn8HJqgJxMVlrLxT67udP48cKUq738sX6pbUCTyT3fdM-uvXepnPm2AOZ0xyMaSXvCSh21M1BYvmuGiX-xx8mHnihnDWjsJJzfs4sO8DqV7P55z1mvijXMg-nrYgS0ylW_5LvMJtq5xMgbw4T8oWYfAwg-imhVs&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;559&quot; data-original-width=&quot;1024&quot; height=&quot;219&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi0D91beEXdv5TwZxaW67nbotfHHeDPxn8HJqgJxMVlrLxT67udP48cKUq738sX6pbUCTyT3fdM-uvXepnPm2AOZ0xyMaSXvCSh21M1BYvmuGiX-xx8mHnihnDWjsJJzfs4sO8DqV7P55z1mvijXMg-nrYgS0ylW_5LvMJtq5xMgbw4T8oWYfAwg-imhVs=w400-h219&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;A &lt;a href=&quot;https://www.nature.com/articles/s41586-026-10265-5&quot;&gt;paper published in Nature on March 25, 2026&lt;/a&gt; describes &quot;The AI Scientist,&quot; a system built by Sakana AI that automates the full cycle of scientific research: idea generation, experiments, analysis, writeup, even peer review submission.&lt;/p&gt;
&lt;p&gt;The marginal cost of producing paper-shaped research output is collapsing. &lt;br /&gt;&lt;br /&gt;So, when paper production becomes cheap, what is next?&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;100,000 axiom systems and counting&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Stephen Wolfram spent years &lt;a href=&quot;https://www.wolframscience.com/metamathematics/axiom-systems-in-the-wild/&quot;&gt;systematically enumerating all possible axiom systems&lt;/a&gt;. Each axiom system defines a &quot;possible universe of mathematics&quot;: a different set of starting rules, a different universe of theorems. Most universes are empty or trivial. Of the ones that are not trivial, many are bizarre. Our entire familiar mathematics occupies a tiny corner of this space. Logic, specifically Boolean algebra, turns out to be &lt;a href=&quot;https://writings.stephenwolfram.com/2018/11/logic-explainability-and-the-future-of-understanding/&quot;&gt;perhaps the hundred thousandth axiom system&lt;/a&gt; you would encounter if you enumerated them by complexity.&lt;/p&gt;
&lt;p&gt;Wolfram found nothing obviously special about the axiom systems we actually use. His suspicion (not a proof) is that we study them for largely historical reasons: they are generalizations of arithmetic and geometry from ancient Babylon. The space of possible mathematics is vast, our explored corner is small, and we are in this particular corner because of history, not because of any intrinsic property of the systems themselves.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Why do we use them? Because &lt;em&gt;humans decided they were interesting&lt;/em&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;The AI Scientist has the same problem, one level up&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The AI Scientist can generate research ideas, execute experiments, and write papers. Sakana &lt;a href=&quot;https://sakana.ai/ai-scientist/&quot;&gt;reports a cost&lt;/a&gt; of roughly $15 per paper. One of three papers &lt;a href=&quot;https://www.nature.com/articles/d41586-026-00899-w&quot;&gt;passed peer review at a ICLR workshop&lt;/a&gt; (not the main conference track), with &lt;i&gt;humans filtering the most promising outputs&lt;/i&gt; before submission. The system can produce formally structured research outputs. It cannot yet tell which ones matter.&lt;/p&gt;
&lt;p&gt;The problem is not just quality filtering. A &lt;a href=&quot;https://www.nature.com/articles/s41586-025-09922-y&quot;&gt;separate study in Nature&lt;/a&gt; earlier this year analyzed 41.3 million research papers and found that scientists using AI tools publish three times more papers and get five times more citations. Great for individuals. But collectively, AI-driven research covers less topical territory. It clusters around already-popular problems.&amp;nbsp;&lt;/p&gt;&lt;p&gt;In the Wolfram analogy: a machine that evaluates &quot;interesting&quot; by pattern-matching against known mathematics will keep steering you back to the hundred thousandth axiom system and its neighbors. Lots of exploit, much less explore.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;So what is the actual scarce resource?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This matches &lt;a href=&quot;https://www.behind-the-enemy-lines.com/2026/02/everybody-is-ceo-now-and-what-exactly.html&quot;&gt;my own experience&lt;/a&gt; using AI agents for research and teaching. The agents are shockingly good at execution. Give them a clear task with well-defined scope and they deliver something genuinely useful, fast.&lt;/p&gt;
&lt;p&gt;But &quot;work on the next most important task&quot; only works if someone figured out what the important tasks are. The agent does not decide which questions matter. The moment you ask it to define its own scope, you get the AI Scientist problem: lots of output, most of it predictable, much of it wrong in ways that require domain expertise to even detect.&lt;/p&gt;
&lt;p&gt;The scarce resource is judgment. The ability to look at a vast space of possibilities and say: &lt;em&gt;this one&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;That is the comforting answer, anyway. AI does the grunt work. We provide the taste, the direction, the vision. We stay at the center of the universe.&lt;/p&gt;
&lt;p&gt;Except: that story is cope. Rich Sutton&#39;s &quot;&lt;a href=&quot;http://www.incompleteideas.net/IncIdeas/BitterLesson.html&quot;&gt;Bitter Lesson&lt;/a&gt;&quot; showed that every time researchers tried to hand-code human knowledge into AI systems (chess heuristics, vision algorithms, Go strategies), brute-force scaling eventually crushed the hand-coded approach. Human judgment about what matters may just be the next ontology in line to be bypassed. But even if it is not, history suggests it was never as reliable as we like to think.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;But the world has a vote&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Wolfram&#39;s enumeration is purely abstract. The axiom systems just sit there, inert. But science interacts with data from the world we observe. You hypothesize, you collect data, and reality tells you whether you are wrong. And that feedback loop has a history of promoting &quot;useless&quot; systems to central importance, often over the explicit objections of the people who understood them best.&lt;/p&gt;
&lt;p&gt;Godfrey Hardy, a godfather of number theory, wrote in 1940 that number theory had a kind of supreme uselessness, that no one had discovered any warlike or practical purpose for it, and it seemed unlikely anyone ever would. And he was proud of that uselessness, as a sign of the supreme taste of a pure mathematician.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Thirty-one years after his death, RSA encryption arrived, and modern cryptography now depends heavily on the number theory Hardy was so proud to call pointless.&lt;/p&gt;
&lt;p&gt;Maxwell predicted electromagnetic waves in 1865 as a mathematical consequence of his equations. Hertz demonstrated them physically in 1887, and when his students asked what the discovery was good for, he replied: &quot;It is of no use whatsoever. This is just an experiment that proves Maestro Maxwell was right.&quot;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Marconi built the wireless telegraph less than a decade later.&lt;/p&gt;
&lt;p&gt;Notice what Hardy and Hertz have in common. They were not amateurs. They understood their own discoveries better than anyone alive. Their &lt;em&gt;taste&lt;/em&gt; was extraordinary: out of the vast space of possible mathematics and physics, they picked systems that turned out to be profoundly important. But their forecasts of usefulness were completely wrong. Hardy looked at number theory and said: &lt;em&gt;this is beautiful and this is deep&lt;/em&gt;. He was right about that. He was wrong about what the world would do with it. Hertz looked at electromagnetic waves and saw a confirmation of Maxwell. He was right about that too. He could not see the wireless telegraph.&lt;/p&gt;
&lt;p&gt;The distinction matters. Taste selected the right systems to study. But taste could not predict what those systems would be &lt;em&gt;for&lt;/em&gt;. That was decided later, by technologies and applications that did not yet exist. The world retroactively decided which &quot;useless&quot; formal systems had been important all along.&lt;/p&gt;
&lt;p&gt;So the comforting story (&quot;AI does execution, we provide the visionary taste, we stay at the center of the universe&quot;) is incomplete.&amp;nbsp;Taste is real but taste without reality is flying blind. Entire fields operate this way: elegant theory frameworks that survive for decades because they never invite reality to correct them. And the people with the best taste in history still could not see where their work would land.&lt;/p&gt;&lt;p&gt;The right question is not &quot;who has the best taste?&quot; It is &quot;what kind of feedback loop lets reality surface the value that taste alone cannot see?&quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Can AI close that loop?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In some fields, it already has. 20 years ago, Mechanical Turk returned human judgements through API calls. Now, autonomous &lt;i&gt;wet labs&lt;/i&gt; (&lt;a href=&quot;https://www.emeraldcloudlab.com/&quot;&gt;Emerald Cloud Lab&lt;/a&gt;, &lt;a href=&quot;https://go.strateos.com/strateos-software&quot;&gt;Strateos&lt;/a&gt;, &lt;a href=&quot;https://www.anl.gov/autonomous-discovery/rapid200-autonomous-lab-for-materials-and-chemistry&quot;&gt;RAPID-200&lt;/a&gt;) accept experimental protocols via API and return physical results without human hands touching anything. An AI agent can already design an experiment, submit it to a cloud lab, and get data back. The loop with physical reality is not a future idea. It is existing infrastructure.&lt;/p&gt;
&lt;p&gt;And still, the narrowing problem persists. Ten thousand automated experiments over a weekend still require someone (or something) to decide what experiments to run. The labs automate verification, not direction. Reality is the slowest, most expensive API there is. A clinical trial takes years. Growing a test crop takes a season. AI generates hypotheses at near-zero marginal cost, but verifying them against the physical world still costs capital and time.&lt;/p&gt;
&lt;p&gt;So, the question is what happens when AI-generated ideas start getting corrected by the world. That is the difference between an AI that enumerates the space of possible mathematics and one that discovers non-Euclidean geometry because spacetime forced its hand.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/2166968507309243978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/2166968507309243978'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2026/03/taste-is-not-enough-reality-or-bust.html' title='Taste Is Not Enough. Reality or Bust'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEi0D91beEXdv5TwZxaW67nbotfHHeDPxn8HJqgJxMVlrLxT67udP48cKUq738sX6pbUCTyT3fdM-uvXepnPm2AOZ0xyMaSXvCSh21M1BYvmuGiX-xx8mHnihnDWjsJJzfs4sO8DqV7P55z1mvijXMg-nrYgS0ylW_5LvMJtq5xMgbw4T8oWYfAwg-imhVs=s72-w400-h219-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-4799472414446547699</id><published>2026-03-17T13:00:00.007-04:00</published><updated>2026-03-17T13:56:02.599-04:00</updated><title type='text'>How I Stopped Being a Copy-Paster for My AI Agent: Claude Code, Google Cloud, and the Loop to Close</title><content type='html'>&lt;div style=&quot;background-color: #f3f0f7; border-left: 4px solid rgb(87, 6, 140); border-radius: 12px; margin-bottom: 24px; padding: 20px 24px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Your AI agent in Claude Code on the Web can use Google Cloud (or AWS/Azure) to store large datasets, run long computations, deploy web apps, and schedule recurring jobs. Once you have a cloud account and project, the repo-specific setup takes about five minutes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set an encryption password in your environment settings (see Step 1 below). If you only use one cloud provider, name it &lt;code&gt;CLOUD_CREDENTIALS_KEY&lt;/code&gt;. For provider-specific setups, use &lt;code&gt;GCP_CREDENTIALS_KEY&lt;/code&gt; / &lt;code&gt;AWS_CREDENTIALS_KEY&lt;/code&gt; / &lt;code&gt;AZURE_CREDENTIALS_KEY&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Tell the agent: &lt;em&gt;&quot;Install the cloud-bootstrap skill from &lt;a href=&quot;https://github.com/ipeirotis/cloud-bootstrap&quot;&gt;https://github.com/ipeirotis/cloud-bootstrap&lt;/a&gt; into this repo.&quot;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Tell the agent: &lt;em&gt;&quot;Set up GCP access for this project.&quot;&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The agent walks you through the rest, including one command you run in &lt;a href=&quot;https://shell.cloud.google.com/&quot;&gt;Cloud Shell&lt;/a&gt; to generate a temporary token.&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt; 
&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;em&gt;&lt;strong&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgxbnSKWGuCyJym6dyIUw8gzZavQHwEOUbUk9gs66_t64z5kGdTApIJVVH8wP1pgMD6Es2rtBUKWnroIbiOi4vC5IbQpjYRuFVQ1fTjnHBabDUxNmO_A0MEhDdYS0Ol4TxneAXhBlF_bLFWV1oZwTI73YICT6IftW72rmIv3FSBUySYV2MM1UI4DEU15VY&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;266&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgxbnSKWGuCyJym6dyIUw8gzZavQHwEOUbUk9gs66_t64z5kGdTApIJVVH8wP1pgMD6Es2rtBUKWnroIbiOi4vC5IbQpjYRuFVQ1fTjnHBabDUxNmO_A0MEhDdYS0Ol4TxneAXhBlF_bLFWV1oZwTI73YICT6IftW72rmIv3FSBUySYV2MM1UI4DEU15VY=w400-h266&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/div&gt;&lt;em&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;The moment I became a human copy-paster&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A few weeks ago, I was debugging data issues on the &lt;a href=&quot;https://demographics.mturk-tracker.com/&quot;&gt;mturk-tracker demographics site&lt;/a&gt;. Claude Code would write a diagnostic script. I would deploy it to the server. I would copy the output. I would paste it back into Claude. Claude would write the next script. I would deploy &lt;em&gt;that&lt;/em&gt; one. Copy. Paste. Deploy. Copy. Paste. Deploy.&lt;/p&gt;
&lt;p&gt;I was not managing an AI agent. I was its copy-paster. Claude did the thinking. I did the Ctrl-C, Ctrl-V.&lt;/p&gt;
&lt;p&gt;That was problem number one.&lt;/p&gt;
&lt;p&gt;Problem number two: I needed to collect data from several websites, a process that would take a day or two of continuous scraping. Claude started the work, but the sandbox kept timing out. The session would die, I would restart it, Claude would pick up where it left off, and then the session would die again. The only way to keep things moving was to babysit: Break the bigger task into smaller subtasks and then &quot;Do next task.&quot; &quot;Do next task.&quot; &quot;Do next task.&quot; Over and over. I was not reviewing or directing anything. I was just pressing the button to keep the machine running. I understand that this is our new role as humans, serving our new AI overlords, but... boooooring.&lt;/p&gt;
&lt;p&gt;Problem number three: I needed to train a model that required a GPU. The Claude Code sandbox does not have GPUs. So I had to manually launch a VM on Google Cloud, SSH into it, clone the repo, install the dependencies, start the training, and then remember to check back later and shut the machine down before it burned through my budget. Claude had written all the training code. But the last mile (getting it to actually &lt;em&gt;run&lt;/em&gt; somewhere with the right hardware) was entirely on me. The AI writes the code. The GPU does the math. And I am the guy who forgets to shut down the machine. Guess which component has the highest error rate.&lt;/p&gt;
&lt;p&gt;Three different problems. Same root cause. The sandbox is a walled garden. Claude can think, it can code, it can analyze. But it cannot reach the outside world. It cannot talk to a server, run something overnight, or spin up a machine with a GPU. Everything that requires infrastructure beyond a small ephemeral container? That is your job.&lt;/p&gt;
&lt;p&gt;The fix: give the agent a cloud account.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;What changes once the agent has cloud access&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Remember the mturk-tracker debugging? With cloud access, Claude deploys its own diagnostic scripts to Cloud Functions, runs them against the live data, reads the results, and iterates. No copying. No pasting. No human in the middle.&lt;/p&gt;
&lt;p&gt;The web scraping that required me to babysit? Claude deploys the scraper as a Cloud Function with a scheduler. It runs every 15 minutes, stores results in a Cloud Storage bucket, and I check in the next day. I literally went to sleep and woke up with the data collected.&lt;/p&gt;
&lt;p&gt;The GPU training? Claude launches a VM with the right specs (say, an &lt;code&gt;n1-standard-4&lt;/code&gt; with a T4 GPU), clones the repo, installs everything, starts training, and sets up a shutdown script that kills the machine when the job finishes. Results go to Cloud Storage. I went to dinner. When I came back, the model was trained, the results were in the bucket, and the VM was already off. The alternative was me manually SSH-ing into a machine, running &lt;code&gt;htop&lt;/code&gt; every twenty minutes, and hoping I remembered to shut it down before I went to bed. (Ask me how I know that &quot;hoping I remember to shut it down&quot; is not a reliable cost management strategy.)&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;The setup (yes, there is some setup)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I will walk through this using Google Cloud, since that is what I use (the concepts are the same for AWS and Azure). If you do not already have a Google Cloud account, go to &lt;a href=&quot;https://cloud.google.com/&quot;&gt;cloud.google.com&lt;/a&gt; and sign up.&lt;/p&gt;
&lt;p&gt;Once you have an account, create a &lt;strong&gt;project&lt;/strong&gt; in the &lt;a href=&quot;https://console.cloud.google.com/&quot;&gt;Cloud Console&lt;/a&gt;. A project is Google Cloud&#39;s way of organizing resources and billing. Click the project dropdown at the top, click &quot;New Project,&quot; give it a name, and note the &lt;strong&gt;project ID&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;You do not need to install anything on your own computer. When you need to generate a token, you will use &lt;strong&gt;&lt;a href=&quot;https://shell.cloud.google.com/&quot;&gt;Google Cloud Shell&lt;/a&gt;&lt;/strong&gt;: a browser-based terminal with everything pre-installed.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;My pattern: one repo, one cloud project, same name&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Every GitHub repo I work with gets its own dedicated Google Cloud project. And they get the same name. The repo &lt;code&gt;paper-oral-exams&lt;/code&gt; gets the Cloud project &lt;code&gt;paper-oral-exams&lt;/code&gt;. The repo &lt;code&gt;course-ai-pm&lt;/code&gt; gets the Cloud project &lt;code&gt;course-ai-pm&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Why? Mostly &lt;strong&gt;resource isolation.&lt;/strong&gt; The agent for the course repo cannot accidentally touch the research data. Each agent gets exactly the access it needs for its own project and nothing else. It also makes housekeeping easier: when everything for a project lives in one Cloud project, you can quickly spot which storage buckets, databases, and VMs are still needed and which are leftovers. No more &quot;wait, whose VM is this and why is it still running?&quot;&lt;/p&gt;
&lt;p&gt;Creating a Cloud project is free and takes 30 seconds.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Service accounts: giving the agent its own keys (not yours)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;When &lt;em&gt;you&lt;/em&gt; use Google Cloud, you log in with your Google account. But an AI agent is not you. And more importantly, &lt;strong&gt;it should not be you.&lt;/strong&gt; Your Google account has access to everything: your email, your billing, your entire cloud infrastructure. Giving all of that to an automated tool would be like handing your intern the keys to the building, your credit card, and your Netflix password. Just in case.&lt;/p&gt;
&lt;p&gt;Instead, you give the agent a &lt;strong&gt;service account&lt;/strong&gt;: a restricted identity designed specifically for automated tools. It has its own email address (something like &lt;code&gt;claude-agent@my-project.iam.gserviceaccount.com&lt;/code&gt;) and you decide exactly what it can do. Read from this storage bucket. Deploy this function. Query this database. Nothing more.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;A caveat: the approach below (encrypting a service account key in the repo) is a pragmatic workaround for agent environments that do not yet support proper workload identity or secret stores. If the worst case is &#39;the agent ran up a $200 bill on a research project,&#39; you are fine. If the worst case involves production data or your personal credentials, use something else. When proper agent identity federation exists, this will get simpler. For now, it is the best approximation available.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;The service account authenticates using a &lt;strong&gt;key file&lt;/strong&gt;: a JSON file that acts as its password. Whoever has this file can act as the service account. Which means this file needs to be protected.&lt;/p&gt;
&lt;p&gt;But here is the catch: Claude Code runs in a sandbox that resets after each session. The only thing that persists is the GitHub repo. So the key file needs to live in the repo somehow, but committing a plaintext credentials file to a repo is a classic security mistake. (It is so common that GitHub literally has automated scanning to catch people doing it.)&lt;/p&gt;
&lt;p&gt;The solution: &lt;strong&gt;encrypt the key file&lt;/strong&gt; and commit the encrypted version. The encryption password lives in an environment variable in Claude Code, which persists across sessions but never enters the repo. At the start of each session, a hook decrypts, authenticates, and deletes the plaintext immediately. The encrypted file is useless without the password. The password is useless without the encrypted file. And if in the worst case scenario your password leaks, you only exposed the service account with limited permissions, and you can always deprecate and regenerate the credentials.&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;The five-minute walkthrough&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You do this once per repo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Set your encryption password.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In Claude Code, open the environment settings for your session and find the &quot;Environment Variables&quot; field. Add a new variable:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #660000;&quot;&gt;&lt;b&gt;CLOUD_CREDENTIALS_KEY=your-strong-passphrase-here
&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(If you work with multiple cloud providers across different repos, you can use provider-specific names like &lt;code&gt;GCP_CREDENTIALS_KEY&lt;/code&gt; or &lt;code&gt;AWS_CREDENTIALS_KEY&lt;/code&gt; instead.)&lt;/p&gt;
&lt;p&gt;&lt;i&gt;A caveat: Claude Code currently &lt;a href=&quot;https://github.com/anthropics/claude-code/issues/32733&quot;&gt;warns against putting secrets in environment variables&lt;/a&gt; because there is no dedicated secrets store yet. I am using this approach because the passphrase only protects an already-restricted service account, not your personal cloud credentials. When a proper secrets store ships, this workflow will use it.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Install the skill.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Open your repo in Claude Code and tell the agent:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #660000;&quot;&gt;&quot;Install the cloud-bootstrap skill from https://github.com/ipeirotis/cloud-bootstrap into this repo.&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(For those comfortable with a terminal, you can also run &lt;code&gt;curl -sSL https://raw.githubusercontent.com/ipeirotis/cloud-bootstrap/main/install.sh | bash&lt;/code&gt; in any environment with access to the repo.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Tell the agent to set up cloud access.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #660000;&quot;&gt;&quot;Set up GCP access for this project.&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The agent will ask you for your Google Cloud project ID. Then it will look at your repo and propose a set of minimum permissions: &quot;Based on this repo, I think the service account needs access to Cloud Storage and BigQuery. Here is why. Shall I proceed?&quot; You approve or adjust. For a new or empty repo, it will ask what you plan to do first.&lt;/p&gt;
&lt;p&gt;Then the agent will ask you to run a command in &lt;a href=&quot;https://shell.cloud.google.com/&quot;&gt;Cloud Shell&lt;/a&gt;. To open it, go to &lt;a href=&quot;https://shell.cloud.google.com/&quot;&gt;shell.cloud.google.com&lt;/a&gt; or click the &quot;&amp;gt;_&quot; icon in the top-right of the &lt;a href=&quot;https://console.cloud.google.com/&quot;&gt;Cloud Console&lt;/a&gt;. Make sure you are in the right project, and run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcloud auth print-access-token
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You paste the result back. This gives the agent a temporary token (valid for one hour) to do the initial setup. The agent creates the service account, grants the approved permissions, generates a key, encrypts it, commits the encrypted file, and sets up an automatic authentication hook for future sessions. The temporary token expires. From this point on, every new session starts fully authenticated. You just start working.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For teams:&lt;/strong&gt; each person gets their own encrypted key file with their own password. The &lt;a href=&quot;https://github.com/ipeirotis/cloud-bootstrap&quot;&gt;README&lt;/a&gt; has the details.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;What to do once the ceiling is gone&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Once cloud access is set up, the agent will start &lt;strong&gt;proactively suggesting cloud improvements&lt;/strong&gt; when it notices opportunities: &quot;Would it help if I moved this dataset to BigQuery so we do not have to re-process it every session?&quot; You can also prompt this explicitly: &lt;strong&gt;&quot;Can you improve your process, knowing that you have access to GCP?&quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I had a dataset too large to fit in the sandbox. The agent uploaded it to BigQuery. Now I query it conversationally: &quot;Show me the distribution of response times by condition.&quot; The agent writes the SQL, runs it, brings back the results. The data lives in the cloud permanently. No re-uploading, no re-processing.&lt;/p&gt;
&lt;p&gt;I needed to run a survey for a research study. The agent deployed a Cloud Function with a simple web form, backed by a database. Participants visit a URL, submit responses, the data lands in a table I can query later. No server to manage. No hosting to configure. Thirty minutes from &quot;I need a survey&quot; to a live URL that participants were already clicking on. I still have not fully processed how absurd that is.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What does it cost?&lt;/strong&gt; Less than you might think. Cloud Functions and BigQuery queries cost cents per run. A T4 GPU VM runs about $0.35/hour. My monthly bill for all of this is usually under $10, though a long GPU job will cost more. One practical tip: set up a &lt;a href=&quot;https://cloud.google.com/billing/docs/how-to/budgets&quot;&gt;billing budget alert&lt;/a&gt; in Google Cloud before giving the agent access. Agents can get stuck in loops, and a $10 budget alert is cheaper than finding out the hard way.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;The bigger picture: finding the next loop to close&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There is a trajectory here worth naming. First, the AI learned to &lt;em&gt;generate&lt;/em&gt;: write a script, draft a document, produce code. Then it learned to &lt;em&gt;execute&lt;/em&gt;: run the script, push the changes, create a pull request. Now it is learning &lt;em&gt;autonomy&lt;/em&gt;: spin up a server, run the job, shut down the server, and report back. Each step closes a loop where a human used to be the connector.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.behind-the-enemy-lines.com/2026/03/lets-work-on-next-task-claude-code.html&quot;&gt;previous post&lt;/a&gt; gave the agent memory and a workflow. This one gives it infrastructure. Same pattern: every time you find yourself doing grunt work to connect two things that the agent &lt;em&gt;should&lt;/em&gt; be able to connect on its own, that is a loop waiting to be closed.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;What comes next&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/ipeirotis/cloud-bootstrap&quot;&gt;cloud-bootstrap skill&lt;/a&gt; supports GCP, AWS, and Azure. It handles first-time setup, adding team members, and credential rotation (it tracks credential age and warns you after six months). It also supports multi-provider setups in the same repo and handles permission escalation gracefully: if the agent hits a permission wall, it stops and tells you exactly what role it needs and why. It never silently fails, and it never gives itself more access.&lt;/p&gt;
&lt;p&gt;This is still early. The whole approach (encrypting credentials in a repo, pasting short-lived tokens) is a workaround, as I noted above. When proper agent identity federation arrives, this will simplify considerably. But right now it works, and for isolated research projects with tightly scoped permissions, the risk is manageable.&lt;/p&gt;
&lt;p&gt;But the agent can still only work inside the one repo it is connected to. It cannot clone a second repo, pull in a dataset from another project, or push results somewhere a collaborator can see. It can work inside one room but cannot walk between rooms. The next post will fix that: installing &lt;code&gt;gh&lt;/code&gt; and setting up a GitHub personal access token so the agent can move freely across repos. It is a much shorter setup than this one.&lt;/p&gt;
&lt;p&gt;After that: the &quot;master repo, satellite repos&quot; setup for coordinating work across multiple projects (which needs the GitHub token to work), MCP configuration for integrating Gmail and Google Calendar, and more on the &quot;council of LLMs&quot; approach I have been using for &lt;a href=&quot;https://www.behind-the-enemy-lines.com/2025/12/fighting-fire-with-fire-scalable-oral.html&quot;&gt;grading oral exams&lt;/a&gt;&amp;nbsp;and for reviewing my work.&lt;/p&gt;
&lt;p&gt;But start here. Give the agent a cloud account. And then go to dinner. When you get back, the agent will have finished collecting data, training the model, shut down the GPU VM, clean up everything, and gone to sleep. Your kids, on the other hand, if they are like mine, will still be awake and making fun of the parental controls on their iPads, and the kitchen is a mess.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/4799472414446547699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/4799472414446547699'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2026/03/how-i-stopped-being-copy-paster-for-my.html' title='How I Stopped Being a Copy-Paster for My AI Agent: Claude Code, Google Cloud, and the Loop to Close'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgxbnSKWGuCyJym6dyIUw8gzZavQHwEOUbUk9gs66_t64z5kGdTApIJVVH8wP1pgMD6Es2rtBUKWnroIbiOi4vC5IbQpjYRuFVQ1fTjnHBabDUxNmO_A0MEhDdYS0Ol4TxneAXhBlF_bLFWV1oZwTI73YICT6IftW72rmIv3FSBUySYV2MM1UI4DEU15VY=s72-w400-h266-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-1959906034502153555</id><published>2026-03-04T17:55:00.023-05:00</published><updated>2026-03-28T13:31:34.206-04:00</updated><title type='text'>&quot;Let&#39;s Work on the Next Task&quot;: Claude Code, GitHub, and the Most Diligent Project Manager I&#39;ve Ever Had</title><content type='html'>&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgB1phmXzV8Gt1sHQNAR2RgkRJp0S3WfNZz133l9cHhyV-0sXcu5fU_q6HwGTIuh1fpx_SRMMzytvBMifFq00J9jYu63FfoPropowNGsyH9hlSmJ5THmSgG_8BPXKnjz3wigJRIFtANWM2QscmaDyXB4BhSSJ9uQwhEud_4lq47sAWpuvGT5KFZlaK37P8&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img align=&quot;center&quot; alt=&quot;&quot; data-original-height=&quot;768&quot; data-original-width=&quot;1408&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgB1phmXzV8Gt1sHQNAR2RgkRJp0S3WfNZz133l9cHhyV-0sXcu5fU_q6HwGTIuh1fpx_SRMMzytvBMifFq00J9jYu63FfoPropowNGsyH9hlSmJ5THmSgG_8BPXKnjz3wigJRIFtANWM2QscmaDyXB4BhSSJ9uQwhEud_4lq47sAWpuvGT5KFZlaK37P8=w640-h350&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In my &lt;a href=&quot;https://www.behind-the-enemy-lines.com/2026/02/everybody-is-ceo-now-and-what-exactly.html&quot;&gt;previous post&lt;/a&gt;, I described how working with AI agents felt like managing an infinitely large, infinitely diligent team. I wrote about pairing Claude with GitHub, giving it context files and task lists, and watching it come back with actual deliverables.&lt;/p&gt;&lt;p&gt;After that post, I got questions from a lot of people asking how to actually set this up. Even from people I assumed were already using this kind of workflow. Turns out it was far less common knowledge than I previously thought. (I guess I am spending too much time reading social media.)&lt;/p&gt;&lt;p&gt;So this post is a step-by-step guide for those who still use AI tools in the &quot;chat&quot; form and want to examine a first setup of &quot;agentic AI&quot;. In this case, it is not to get the AI to be a software engineer, but rather get the AI to becoming your project manager and your team of research assistants. &lt;br /&gt;&lt;br /&gt;We will set up a GitHub repository, configure Claude Code on the Web, and build a workflow where AI plans (or does) the work and you do the reviewing.&lt;/p&gt;&lt;p&gt;One caveat: while you do &lt;b&gt;&lt;i&gt;not &lt;/i&gt;&lt;/b&gt;need to know how to code, familiarity with software development &lt;b&gt;&lt;em&gt;practices&lt;/em&gt; &lt;/b&gt;will help. Not the programming itself, but the process: how developers organize projects, track changes, review each other&#39;s work. This post will walk you through those practices.&lt;/p&gt;&lt;p&gt;First, though, let me explain &lt;em&gt;why&lt;/em&gt; this setup is so powerful.&lt;br /&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;The real trick: The repo is the context&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Here is the problem with using AI through a regular chat interface. Every time you start a new conversation, you are starting from zero. You paste in your document, re-explain what the project is about, remind the AI where you left off, describe what needs to happen next. It is like hiring a brilliant contractor who gets amnesia every morning.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;GitHub solves this. When Claude Code connects to your repository, it does not just see your files. It sees everything: the project structure, the notes about what the project is, the task list, the record of what has already been done, the decisions you have made along the way... All of it, sitting right there in the repo, ready to be read.&lt;/p&gt;&lt;p&gt;This means your prompt for most interactions becomes absurdly simple:&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;&quot;Let&#39;s work on the next most important task.&quot;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;That is all. Claude reads your &lt;code&gt;CLAUDE.md&lt;/code&gt; to understand the project. It reads your &lt;code&gt;TASKS.md&lt;/code&gt; to figure out what needs doing. It looks at the existing files to understand the current state. And then it gets to work. No pasting. No re-explaining. No &quot;as I mentioned in our previous conversation...&quot; The repository &lt;em&gt;is&lt;/em&gt; the conversation. It &lt;em&gt;is&lt;/em&gt; the memory. It &lt;em&gt;is&lt;/em&gt; the context.&lt;br /&gt;&lt;br /&gt;Read about CLAUDE.md and TASKS.md and you are worried that this is some black magic? Nah, these are just regular text files, written in plain English. We will describe them next.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Wait, what is Claude Code on the Web?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;First, some context. Claude Code started as a command-line tool. You would install it on your computer, open a terminal, and type commands. Powerful, but intimidating if you are not a developer.&lt;/p&gt;&lt;p&gt;Then Anthropic launched &lt;a href=&quot;https://claude.ai/&quot;&gt;Claude Code on the Web&lt;/a&gt;. Now you can do the same thing directly from your browser. You connect a GitHub repository, give Claude a task, and it clones your repo, writes code (or documents, or reports, or whatever you need), and pushes the changes to a branch. You review the changes, approve them, and merge. All from a web interface. No installation.&lt;/p&gt;&lt;p&gt;Claude Code on the Web operates inside a real computing environment called the &quot;sandbox&quot;. It can read your files, create new ones, run scripts, and push changes to GitHub. It tends to write software for performing various tasks, instead of replying in plain text. It does work. Real work. The kind you would normally delegate to a research assistant or a junior colleague.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;The 10-minute setup: GitHub + Claude Code&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;OK, let us build this from scratch. I will assume you have zero GitHub experience.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 1: Create a GitHub account and a repository.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Go to &lt;a href=&quot;https://github.com/&quot;&gt;github.com&lt;/a&gt; and sign up. Then create a new repository: click the green &quot;New&quot; button, give it a name (something like &lt;code&gt;my-research-project&lt;/code&gt; or &lt;code&gt;quarterly-report&lt;/code&gt;), &lt;strong&gt;make sure to set it to Private&lt;/strong&gt; (not Public, unless you want the whole internet reading your drafts), and check &quot;Add a README file.&quot; &lt;i&gt;That last part matters.&lt;/i&gt; Write a short description of your project in the README. Even a couple of sentences is fine. This initializes the repo so that Claude Code can actually work with it. (An empty, uninitialized repo will cause problems.)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 2: Connect your repo to Claude Code.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Go to &lt;a href=&quot;https://claude.ai/&quot;&gt;claude.ai&lt;/a&gt; and open Claude Code (it is in the left sidebar, or you can go directly to &lt;a href=&quot;https://claude.ai/code&quot;&gt;claude.ai/code&lt;/a&gt;). Start a new session and connect your GitHub repository. You can paste your repo URL directly or use the built-in GitHub integration to browse your repositories. Claude will ask you to authenticate with GitHub the first time (a one-time OAuth flow) and install Claude on the Github repo (that allows Claude to write to the repo). Select the repo you just created.&lt;/p&gt;&lt;p&gt;Now Claude Code can see your files, and more importantly, it can &lt;em&gt;change&lt;/em&gt; them.&lt;br /&gt;&lt;br /&gt;At this point, you can upload files that you have about the project to the repo, or you can defer that step for later and move on to the next step.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 3: Let Claude set up your project.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This is where it gets interesting. &lt;code&gt;CLAUDE.md&lt;/code&gt; is a special file that Claude reads at the start of every session. It is the project&#39;s &quot;master plan&quot;: what the project is about, how it is organized, what conventions to follow. But you do not need to know what it should look like. Just describe your project in plain language:&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;&quot;&lt;i&gt;This repo contains the data and analysis from our AI-powered oral examination system, which I wrote up as a blog post. I want to turn this into a research paper for submission to Communications of the ACM. The data and some initial analysis scripts are already in the repo. Set up the project structure for a CACM submission and create a CLAUDE.md file&lt;/i&gt;.&quot;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Claude will read through the existing files, figure out what is there, organize everything into a sensible structure, and create a &lt;code&gt;CLAUDE.md&lt;/code&gt; that might look something like this:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;# Project: AI-Powered Oral Examinations at Scale

## Overview
Research paper for Communications of the ACM describing our system
for conducting and grading oral examinations using conversational AI
agents and a multi-LLM grading approach.

## Submission Details
- **Journal**: Communications of the ACM
- **Format**: ACM `acmart` document class, `acmsmall` style
- **Page limit**: 12,000 words including references
- **Style**: Author-year citations (natbib)

## Structure
- `/paper/` - LaTeX source files and ACM style files
- `/data/` - Exam transcripts, grading data, survey responses
- `/analysis/` - Python scripts for statistical analysis
- `/figures/` - Generated plots (PDF format, generated from scripts)
- `/blog/` - Original blog post and supporting materials

## Conventions
- All figures must be generated from scripts in `/analysis/`,
  never created manually
- Use BibTeX for references (`references.bib`)
- Data files are never edited directly; all transformations
  happen through scripts in `/analysis/`
- Student data must be anonymized in all outputs

## Current Status
See TASKS.md for the current task list and priorities.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notice: you did not write any of this. You described your project, and Claude produced the project master plan. You review it, maybe tweak a couple of things. Done.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 4: Create your TASKS.md file.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This is your project&#39;s to-do list. But unlike a regular to-do list, it serves double duty: it tells Claude what needs to be done &lt;em&gt;and&lt;/em&gt; keeps a record of what has been completed. Ask Claude to create it:&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;&quot;Create a TASKS.md file with the following initial tasks...&quot;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Here is what one might look like:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-markdown&quot;&gt;# Tasks

## In Progress
- [ ] E1. Expand blog analysis into formal experimental evaluation
- [ ] E2. Inter-rater reliability analysis (human vs. LLM council grades)

## To Do
- [ ] E3. Create Figure 1 (grade distribution across grading methods)
- [ ] R1. Write Related Work section (AI in assessment, LLM-as-judge)
- [ ] D2. Analyze anti-cheating detection rates
- [ ] Z3. Check word count against CACM 12,000-word limit

## Done
- [x] Z1. Set up project structure from blog post materials
- [x] D1. Anonymize student data
- [x] I1. Write Introduction draft
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now here is the magic. You can point Claude at a specific task and say: &quot;Work on the next task in TASKS.md.&quot; Claude reads the file, picks the next item, does the work, updates the task status, and creates a pull request with its changes. If you are not familiar with pull requests, more in a moment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Give Claude a GitHub token (so you never have to learn git).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is one more thing worth setting up now, even though it will not feel essential until later. Claude Code on the Web can push changes and create pull requests through its built-in GitHub connection. But that connection is limited to the one repo you connected in Step 2. If you want Claude to handle &lt;em&gt;all&lt;/em&gt; the git operations fluently, and eventually work across multiple repos, you need to give it a &lt;strong&gt;personal access token&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Go to &lt;a href=&quot;https://github.com/settings/tokens&quot;&gt;github.com/settings/tokens&lt;/a&gt;, click &quot;Generate new token (classic),&quot; give it a name like &lt;code&gt;claude-code&lt;/code&gt;, and select the &lt;code&gt;repo&lt;/code&gt; scope (which covers reading, writing, and managing repositories). Copy the token.&lt;/p&gt;

&lt;p&gt;Now go back to Claude Code, open the environment settings for your session, and add:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GITHUB_TOKEN=ghp_your_token_here&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then ask Claude to add this line in the CLAUDE.md:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
  ## Global Tools
&lt;br /&gt;- `gh` (GitHub CLI) is available as a global tool, authenticated via the `GITHUB_TOKEN` environment variable.&lt;/code&gt;
&lt;/p&gt;&lt;p&gt;That is it. Next time a session starts, Claude will install &lt;code&gt;gh&lt;/code&gt; (the GitHub command-line tool) and authenticate using your token. From that point on, Claude handles all the git plumbing: committing, branching, creating pull requests, even cloning other repos when needed. You never run a git command. You never resolve a merge conflict. You click &quot;Merge&quot; on the pull request, and Claude takes care of everything else.&lt;/p&gt;

&lt;p&gt;Why does this matter? Because without it, you will eventually hit a moment where Claude says something like &quot;I&#39;ve made the changes but I need you to run &lt;code&gt;git pull&lt;/code&gt; and resolve a conflict.&quot; And suddenly you are googling git tutorials at 11pm, which is not the workflow we are going for.&lt;/p&gt;

&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;(This token also unlocks cross-repo operations, which becomes important once you start coordinating work across multiple projects. More on that in a future post about the &quot;master repo, satellite repos&quot; setup.)&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Pull requests: Redlined documents for coders (and not only)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Now the part that is unfamiliar to people who are not software engineers. The &quot;pull request&quot;.&lt;/p&gt;&lt;p&gt;If you have ever received a redlined document from a lawyer, or reviewed tracked changes in a Word file, you already understand pull requests. The concept is that simple: someone proposes changes, you review them before they get incorporated into the main document.&lt;/p&gt;&lt;p&gt;In GitHub, it works like this:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Claude does its work on a separate &lt;strong&gt;branch&lt;/strong&gt; (a parallel copy of your project).&lt;/li&gt;
&lt;li&gt;When it is done, it creates a &lt;strong&gt;pull request&lt;/strong&gt; (PR), which says: &quot;Here are the changes I made. Want to incorporate them?&quot;&lt;/li&gt;
&lt;li&gt;You see a clean &lt;strong&gt;diff view&lt;/strong&gt; showing exactly what was added, removed, or modified. Green lines are additions. Red lines are deletions.&lt;/li&gt;
&lt;li&gt;You review. You can approve, request modifications, or reject.&lt;/li&gt;
&lt;li&gt;If you approve, you click &quot;Merge&quot; and the changes become part of the main project.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;This is the standard process used by every software team in the world. And it works for any kind of knowledge work that relies on text. Research papers. Reports. Course materials. Business proposals. Anything that lives in files. Ideally, you want the files to be text files and not binary ones; tex good, PowerPoint files, not so much. In the future we may have better tooling for reviewing changes in Office files or other formats, but for now the process works best for text-based files.&lt;/p&gt;&lt;p&gt;Fair warning: the GitHub interface will look busy the first time you open a pull request. Do not panic. Just look for the &quot;Files changed&quot; tab to see the redlines, and the big green &quot;Merge pull request&quot; button when you are ready to accept.&lt;/p&gt;&lt;p&gt;The critical point: &lt;strong&gt;you never edit the files directly&lt;/strong&gt;. You describe what you want, Claude proposes changes, and you review and approve. You are the manager. Claude is the diligent employee who comes back with deliverables for you to inspect. And the audit trail is far better than &quot;Track Changes&quot; in Word ever was.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;A real example: From CSV to submission-ready in two hours&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Let me show you how this plays out in practice with a real example from last month.&lt;/p&gt;&lt;p&gt;I was working on a paper that had a case study section (say, Section 8) where we discussed results from a partner&#39;s dataset, but we only had the final business conclusions, not a full experimental analysis. The rest of the paper (say, Section 7) had a proper, thorough analysis on a different dataset: figures, tables, bootstrap confidence intervals, the works. By comparison, the case study in Section 8 was the weak sibling, and reviewers have flagged that. We have received a detailed dataset from our partners, but it required work. My &lt;code&gt;TASKS.md&lt;/code&gt; had this sitting in it:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;## Backlog
- [ ] F5. AML dataset analysis
- [ ] G1. Complete §8 rewrite with AML dataset
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I uploaded the CSV to the repo and told Claude:&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;&quot;&lt;i&gt;Here is the AML dataset. Replicate the analysis from Section 7 but now for Section 8. Use the existing details from Section 8 as the background and framing, conduct the full experimental analysis, and generate a new Section 8.&lt;/i&gt;&quot;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;Claude read Section 7 to understand the methodology. It read the existing Section 8 to understand the framing and context. It wrote Python scripts to process the AML data, generated four figures and three tables with bootstrap confidence intervals, wrote the new section text with all quantities pulled from the analysis scripts, and submitted a pull request with everything.&lt;/p&gt;&lt;p&gt;Less than an hour. I spent another hour reviewing the PR, checking the code, leaving comments (&quot;clarify this axis label,&quot; &quot;move this paragraph before the table&quot;, &quot;I do not think the conclusions follow from the results&quot;), and merging.&lt;/p&gt;&lt;p&gt;Two hours total. For a PhD student, this would have been a few days of work, easily. And here is the part that matters: every single number in that section was generated through a Python script. Every figure had a script that produced it. Reproducibility was built in from the start, not bolted on after the fact. The pull request showed me exactly what was added: the scripts, the outputs, the LaTeX changes. I could trace every claim back to the code that produced it.&lt;/p&gt;&lt;p&gt;Needless to say, I remain fully accountable for any bugs or errors. At the end of the day, I have reviewed the scripts, the results, and the text. What I can say is that even if there are errors, these are not &quot;hallucinations&quot; where the LLM filled in random numbers or references in the text. The figures are Python-generated from the raw data, the tables and the numbers in the text the same. The errors can come from bugs, or other oversights. But we should stop calling all AI errors &quot;hallucinations&quot;. At this point, the errors are not the errors of a &quot;bullshitter in chief&quot; (a title aptly earned by early LLMs); they are the same types of errors that a junior colleague may&amp;nbsp;make when carefully executing a well-defined task: misreading a specification, applying a method slightly outside its intended scope, or missing an edge case that a more seasoned eye would have caught.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Beyond software: Why this works for all knowledge work&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;I want to be explicit about something: &lt;strong&gt;this is not just for code&lt;/strong&gt;. GitHub repositories can hold any kind of file. Markdown documents, LaTeX papers, CSV data files, images, PDFs. The pull request workflow works for anything.&lt;/p&gt;&lt;p&gt;Writing a consulting report? Put the markdown draft in &lt;code&gt;/report/&lt;/code&gt;, the supporting analysis in &lt;code&gt;/data/&lt;/code&gt;, the charts in &lt;code&gt;/figures/&lt;/code&gt;. Claude generates the analysis, creates the figures, and drafts sections of the report, all as reviewable pull requests.&lt;/p&gt;&lt;p&gt;Same idea for course materials (I use this with my &lt;a href=&quot;https://www.behind-the-enemy-lines.com/2026/02/listening-to-my-students-at-scale-exit.html&quot;&gt;exit tickets workflow&lt;/a&gt;), business plans, grant proposals. You define the project structure, you maintain a task list, and you let the agent do the work while you review proposals. Standard software engineering practice, applied to everything.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Leveling up: More files for better project management&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Once you get comfortable with &lt;code&gt;CLAUDE.md&lt;/code&gt; and &lt;code&gt;TASKS.md&lt;/code&gt;, you can add more structure. The files I have found most universally useful are these three:&lt;/p&gt;
&lt;ul class=&quot;[li_&amp;amp;]:mb-0 [li_&amp;amp;]:mt-1 [li_&amp;amp;]:gap-1 [&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;SCHEDULE.md&lt;/strong&gt; — Deadlines and milestones. &quot;The submission deadline is March 15&quot; becomes a constraint that shapes which tasks get prioritized first.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;DECISIONS.md&lt;/strong&gt; — Key choices and their rationale. &quot;We decided to use three LLMs in the grading council instead of five because the marginal improvement was negligible.&quot; Prevents you and Claude from relitigating settled questions two weeks later.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;STYLEGUIDE.md&lt;/strong&gt; — Your writing preferences. &quot;Never use em-dashes,&quot; &quot;Never use fluffy adjectives,&quot; &quot;Avoid claims not supported by data or citations.&quot; Good trick: give Claude a few pieces of your favorite writing and ask it to generate a style guide that mimics your voice. Then drop it in the repo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;font-claude-response-body break-words whitespace-normal leading-[1.7]&quot;&gt;Beyond these, there are files worth adding for specific situations:&lt;/p&gt;
&lt;ul class=&quot;[li_&amp;amp;]:mb-0 [li_&amp;amp;]:mt-1 [li_&amp;amp;]:gap-1 [&amp;amp;:not(:last-child)_ul]:pb-1 [&amp;amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3&quot;&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;CHANGELOG.md&lt;/strong&gt; — Human-readable log of what changed each session. Especially useful when preparing a response to reviewers.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;BLOCKERS.md&lt;/strong&gt; — Things waiting on someone external. Makes it easy to send a collaborator a list of &quot;here is what I need from you.&quot;&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;FEEDBACK.md&lt;/strong&gt; — Running log of all feedback received, formal and informal, with status: pending, accepted, or rejected with rationale.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;SOURCES.md&lt;/strong&gt; — Annotated bibliography: what each source is useful for, how reliable it is, which sections cite it.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;GLOSSARY.md&lt;/strong&gt; — Keeps terminology consistent across a long document. Claude consults it and adds new terms as they come up.&lt;/li&gt;
&lt;li class=&quot;whitespace-normal break-words pl-2&quot;&gt;&lt;strong&gt;DEPENDENCIES.md&lt;/strong&gt; — Maps how artifacts depend on each other. Lets Claude flag when an upstream change invalidates something downstream.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You do not need all of these on day one. Start with &lt;code&gt;CLAUDE.md&lt;/code&gt; and &lt;code&gt;TASKS.md&lt;/code&gt;. Add &lt;code&gt;CHANGELOG.md&lt;/code&gt;&amp;nbsp;when editing a paper that came back with revisions. Add the rest as your project grows and you find yourself needing them.&lt;/p&gt;&lt;p&gt;To be fair, this is a bit of a hack. We are simulating standard project management tools using plain markdown files. Scanning text files for task lists and decisions is not exactly elegant. And I have serious doubts that this can scale for projects involving hundreds of people. But it works &lt;i&gt;for&amp;nbsp;&lt;/i&gt;&lt;em&gt;now&lt;/em&gt;, with tools that exist &lt;em&gt;today, &lt;/em&gt;for the projects that I am working on.&lt;/p&gt;&lt;p&gt;In the future, agents will have proper interfaces: structured databases, purpose-built PM tools designed for agents to read and write directly, not markdown files they have to parse every session. We are in the duct-tape-and-baling-wire phase. It is fine. The duct tape holds.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;The awkward part (and why it is worth it)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;If you are not a software engineer, this workflow feels strange at first. You are used to opening a document and typing. Now you are writing instructions, waiting for an AI to propose changes, and clicking &quot;Merge&quot; on a pull request. It is indirect. It feels like you are adding a middleman.&lt;/p&gt;&lt;p&gt;But here is what happens after a week: you realize the middleman can do 80% of the work. And the 20% you are doing (reviewing, giving feedback, making decisions) is the work that you would have done with any apprentice. But you are not fixing typos, you are not formatting tables, you are not wrestling with matplotlib&#39;s axis labels. You are reading the output and deciding if it is good and trustworthy enough.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Coming next&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;This post covered the basics: one repo, one project, Claude Code on the Web doing the work. The whole secret is that now the chatbots can write down what they have done, and look up the notes next time you start working together. And it is ridiculously powerful.&lt;/p&gt;&lt;p&gt;But this is just the beginning.&lt;/p&gt;&lt;p&gt;In upcoming posts, I will describe my &quot;master repo, satellite repos&quot; setup, where I maintain a central task management repository that coordinates work across multiple projects with different collaborators. Think of it as the command center.&lt;/p&gt;&lt;p&gt;Beyond that: &lt;a href=&quot;https://www.behind-the-enemy-lines.com/2026/03/how-i-stopped-being-copy-paster-for-my.html&quot;&gt;deploying resources on Google Cloud, spinning up virtual machines for heavy computation&lt;/a&gt;, and the &quot;council of LLMs&quot; approach where Claude, Gemini, and GPT deliberate together on evaluation tasks (something I have been using for &lt;a href=&quot;https://www.behind-the-enemy-lines.com/2025/12/fighting-fire-with-fire-scalable-oral.html&quot;&gt;grading oral exams&lt;/a&gt; and am now extending to research).&lt;/p&gt;&lt;p&gt;At some point (in the not so distant future, probably by the end of March or so) Claude will be scheduling my meetings, answering my emails, and assigning me tasks from my own task list. I am not entirely sure who is managing whom anymore.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/1959906034502153555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/1959906034502153555'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2026/03/lets-work-on-next-task-claude-code.html' title='&quot;Let&#39;s Work on the Next Task&quot;: Claude Code, GitHub, and the Most Diligent Project Manager I&#39;ve Ever Had'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgB1phmXzV8Gt1sHQNAR2RgkRJp0S3WfNZz133l9cHhyV-0sXcu5fU_q6HwGTIuh1fpx_SRMMzytvBMifFq00J9jYu63FfoPropowNGsyH9hlSmJ5THmSgG_8BPXKnjz3wigJRIFtANWM2QscmaDyXB4BhSSJ9uQwhEud_4lq47sAWpuvGT5KFZlaK37P8=s72-w640-h350-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-7912326023511533169</id><published>2026-02-15T10:24:00.001-05:00</published><updated>2026-02-20T21:15:39.710-05:00</updated><title type='text'>Listening to My Students at Scale: Exit Tickets, NotebookLM, and the Tightest Feedback Loop I&#39;ve Ever Built</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjBJbbmOmSASNW6ipRcpiGjMmj44_VWILNPeaOfEI5UWkf-9jxTp-tpVl14ghHU9wjHk7P1YQzMG0LGNFdAvKwJupaoZAMlk4sYlPwnxEgnHAhTVvBvY1MGjvRQTxcxgfY2CeZaQ1nE21XOGen1UuXmxPeF1rfJepc7S-ruwJxQsyRYvBahpbxM6K4YG34&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;559&quot; data-original-width=&quot;1024&quot; height=&quot;175&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjBJbbmOmSASNW6ipRcpiGjMmj44_VWILNPeaOfEI5UWkf-9jxTp-tpVl14ghHU9wjHk7P1YQzMG0LGNFdAvKwJupaoZAMlk4sYlPwnxEgnHAhTVvBvY1MGjvRQTxcxgfY2CeZaQ1nE21XOGen1UuXmxPeF1rfJepc7S-ruwJxQsyRYvBahpbxM6K4YG34&quot; width=&quot;320&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;It started at a teaching workshop, last semester: &lt;a href=&quot;https://cims.nyu.edu/~kapp/&quot;&gt;Craig Kapp&lt;/a&gt; and &lt;a href=&quot;https://www.nyu.edu/life/information-technology/teaching-and-learning-services/instructional-data/learning-analytics.html&quot;&gt;Rob Egan&lt;/a&gt; presented a seminar at the NYU Center for Teaching and Learning called &quot;Real-Time Insights: Leveraging AI for Responsive Teaching in Large Classrooms.&quot; They (re-)introduced a deceptively simple concept: the &lt;strong&gt;exit ticket&lt;/strong&gt;. The idea is that at the end of every class session, you ask students three quick questions, each with a different shape metaphor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔵 &lt;strong&gt;Circle&lt;/strong&gt;: What is still circling in your mind? (What are you confused about?)&lt;/li&gt;
&lt;li&gt;🟥 &lt;strong&gt;Square&lt;/strong&gt;: What &quot;squared&quot; with your understanding? (What clicked today?)&lt;/li&gt;
&lt;li&gt;🔺 &lt;strong&gt;Triangle&lt;/strong&gt;: What are three key takeaways from today&#39;s session?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then, take these answers, and use LLMs to process them quickly and get feedback before the next session.&lt;/p&gt;

&lt;p&gt;Getting structured feedback from students &lt;em&gt;after every single session&lt;/em&gt;? Not at the end of the semester when it&#39;s too late to change anything, but right now, while you can still do something about it? I immediately wanted to try it.&lt;/p&gt;

&lt;p&gt;Below I describe the details of the approach presented by Craig and Rob, and my own adjustments to the recipe. Hope you will find it useful.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;The setup: Making it required (and why that matters)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It starts by setting up the exit ticket surveys as auto-graded quizzes on Brightspace (NYU&#39;s LMS). The auto-grading part is a nice little trick: one of the questions is simply &quot;Select True in this question to get your points.&quot; Students complete the survey, they get their credit. No manual processing of ~50 submissions on my end.&lt;/p&gt;

&lt;p&gt;We do tell students upfront: write something substantive. Don&#39;t game the system. We reserve the right to deduct points if someone slacks through the exit tickets all semester. And here&#39;s the nice irony: since we&#39;re already running AI-powered analysis on the responses, identifying freeriders who type &quot;asdf&quot; every week is trivial. The same pipeline that processes the feedback also flags the people not providing any.&lt;/p&gt;

&lt;p&gt;The critical design decision: &lt;strong&gt;make it part of the grade, not optional.&lt;/strong&gt; Optional feedback gets ~30% response rates and self-selected complainers. Required feedback gets everyone. And because this is formative feedback (not evaluative), students have every reason to be honest and detailed. They&#39;re not rating me. They&#39;re telling me what they need.&lt;/p&gt;

&lt;p&gt;Compare this to the end-of-semester evaluation. Students fill it out in December, the professor reads it in January (maybe), and any changes happen next year for a completely different group of students. The feedback loop is so long that it barely qualifies as a loop. Exit tickets close that loop within days. Sometimes hours.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;From exit ticket to next session: the processing pipeline&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So now I have all this feedback. ~50 students, after every session, telling me what confused them, what clicked, and what they&#39;re taking away. The question becomes: how do you actually &lt;em&gt;process&lt;/em&gt; all of that quickly enough to act on it?&lt;/p&gt;

&lt;p&gt;NYU IT built an official path for this, which Rob demonstrated in the seminar. You export the exit ticket responses into the &lt;a href=&quot;https://www.nyu.edu/life/information-technology/teaching-and-learning-services/instructional-data/learning-analytics.html&quot;&gt;Brightspace Insights Portal&lt;/a&gt; (which Rob&#39;s team manages) and run AI-powered analysis using a prompt like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;You are an expert Instructional Designer and Data Scientist assisting
a professor with the course &quot;AI/ML Product Management&quot; at NYU Stern
School of Business (undergraduate).

Your goal is to analyze student feedback survey data to improve course
delivery. The survey questions and student answers are provided below.
Please perform the following two steps:

### Step 1: Thematic Analysis
Analyze the responses to identify key themes. Do not just look for
keywords; look for semantic similarities and underlying sentiment. For
each theme, provide:
1. **Theme Name**: A concise title.
2. **Prevalence**: The approximate number of students who mentioned this.
3. **Explanation**: A brief summary of the sentiment or issue.
4. **Evidence**: A direct, representative quote from the data.

### Step 2: Actionable Pedagogy (Bloom&#39;s Taxonomy)
For each theme identified above, propose a short course activity.
* If the theme represents a **knowledge gap/pain point**, propose a
  remedial activity.
* If the theme represents a **strength/interest**, propose an activity
  to deepen understanding.
* **Constraint**: The activity must be supported by Bloom&#39;s Taxonomy.
  Explicitly state which level of Bloom&#39;s Taxonomy the activity targets
  (e.g., Application, Analysis, Evaluation).

**Format**:
Start the suggestion section for each theme with the label: &quot;PRACTICE IDEA&quot;.

I attach the survey data.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It&#39;s a well-designed prompt. Thematic coding, prevalence counts, representative quotes, remedial activities aligned with Bloom&#39;s Taxonomy. The output is genuinely useful.&lt;/p&gt;

&lt;p&gt;But I prefer to do something slightly different. I use the same prompt from the Insights Portal, but I run it inside &lt;a href=&quot;https://notebooklm.google.com/&quot;&gt;NotebookLM&lt;/a&gt; with &lt;em&gt;just&lt;/em&gt; the student feedback as input. For those unfamiliar: NotebookLM is Google&#39;s AI-powered research assistant. You upload your own documents, and it generates analysis, summaries, explainer videos, and podcast-style audio overviews grounded entirely in your uploaded sources. NYU provides institutional access through Google Workspace, so the data never trains any AI models, which matters when you&#39;re working with student feedback.&lt;/p&gt;

&lt;p&gt;Why NotebookLM over the Insights Portal? Because the exit ticket analysis is just the &lt;em&gt;starting point&lt;/em&gt;. What I really need is to prepare the follow-up material. Once NotebookLM identifies the themes and suggests activities, I take those suggestions and combine them with my lecture slides, readings, and case studies (which are already loaded in the same notebook). Then I ask it to generate explainers, videos, infographics, and targeted activities that address the confusion, all grounded in my actual course content.&lt;/p&gt;

&lt;p&gt;The Insights Portal gives me a diagnosis. NotebookLM gives me the diagnosis &lt;em&gt;and&lt;/em&gt; helps me build the treatment.&lt;/p&gt;

&lt;p&gt;My workflow after every class:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Students complete the exit ticket on Brightspace (takes them 2-3 minutes)&lt;/li&gt;
&lt;li&gt;I export the responses and upload them into a NotebookLM notebook, together with the materials for that session&lt;/li&gt;
&lt;li&gt;NotebookLM identifies the themes: what&#39;s confusing people, what clicked, what they found most valuable&lt;/li&gt;
&lt;li&gt;Based on those themes, I generate explainer materials, short videos, and targeted activities for the next session&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;(As an example, &lt;a href=&quot;https://notebooklm.google.com/notebook/a12e4e7d-e715-4c7e-914d-d1fb14b14a44&quot;&gt;here is the NotebookLM&lt;/a&gt; that we use for the Zillow Offers case, which we use to discuss leading and lagging metrics, model and output monitoring, concept drift, adverse selection and other product-management-related topics. Note: this notebook contains only course materials for preparing the case discussion, not student feedback data.)&lt;/p&gt;

&lt;p&gt;One small but annoying wrinkle: NotebookLM&#39;s default slide output has that unmistakable &quot;AI-generated&quot; aesthetic. You know the one. (Yes, they are visually gorgeous compared to my own slides, but after a while it starts feeling a bit like slop.) So I started uploading the &lt;a href=&quot;https://www.nyu.edu/employees/resources-and-services/media-and-communications/nyu-brand-guidelines.html&quot;&gt;NYU brand style guide&lt;/a&gt; as an additional source in my notebooks, and prompting NotebookLM to follow it when generating visual materials. The results are noticeably closer to proper NYU-branded slides. Not perfect, but much better than the generic AI look. I&#39;m still waiting for NotebookLM to support custom templates or branding natively, but that&#39;s a different story.&lt;/p&gt;

&lt;p&gt;The per-session overhead is maybe 15-20 minutes.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Why this actually works&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The circle/square/triangle structure does something clever: it gives students permission to be confused. &quot;What is still circling in your mind?&quot; is a much less intimidating question than &quot;What don&#39;t you understand?&quot; And the three-takeaways question forces them to reflect, even briefly, which helps consolidate their learning.&lt;/p&gt;

&lt;p&gt;But the real reason students engage is that &lt;strong&gt;they see the results&lt;/strong&gt;. When I open the next class by saying &quot;Several of you mentioned you were confused about X, so let&#39;s spend 15 minutes on this before we move on,&quot; students learn that their feedback actually matters. It creates a virtuous cycle: they write thoughtful responses because they know I&#39;ll respond, and I can respond because NotebookLM makes processing all the responses feasible. Without the AI assist, no professor has time to synthesize free-text responses from 50 students after every class and create targeted follow-up materials. Definitely not after every single session. The economics just don&#39;t work.&lt;/p&gt;

&lt;p&gt;With NotebookLM doing the heavy lifting? The economics suddenly work beautifully.&lt;/p&gt;

&lt;p&gt;The exit ticket has been around for decades. Craig and Rob simply showed how to supercharge it with AI. The hard part was never getting students to talk. It was finding the time to listen. Once students realize someone is actually listening, they start saying things worth hearing. That&#39;s the loop. That&#39;s the whole trick.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/7912326023511533169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/7912326023511533169'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2026/02/listening-to-my-students-at-scale-exit.html' title='Listening to My Students at Scale: Exit Tickets, NotebookLM, and the Tightest Feedback Loop I&#39;ve Ever Built'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjBJbbmOmSASNW6ipRcpiGjMmj44_VWILNPeaOfEI5UWkf-9jxTp-tpVl14ghHU9wjHk7P1YQzMG0LGNFdAvKwJupaoZAMlk4sYlPwnxEgnHAhTVvBvY1MGjvRQTxcxgfY2CeZaQ1nE21XOGen1UuXmxPeF1rfJepc7S-ruwJxQsyRYvBahpbxM6K4YG34=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-2283280348430966962</id><published>2026-02-11T14:04:00.012-05:00</published><updated>2026-03-04T18:02:21.411-05:00</updated><title type='text'>Everybody Is a CEO Now (And What Exactly Am I Doing Here?)</title><content type='html'>&lt;div class=&quot;separator&quot;&gt;&lt;p style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhtGVul36sQGPLpzAvu_li6Q_FV69urAGbKbN41Ml7Kg9WVIat9UZxoYAGjR_IXDS5BVdMp9x7QHckc1dLJkS37UlCObq1hrqrxEboULU8jCWVcP7rYZT8kbiQoX-VtE6t0uYwskEPSfeM-tkAeUVsoozSbxPrgpAwb_IMht48MSxv449ftT2EuqnfcFZI=w400-h400&quot; width=&quot;400&quot; /&gt;&lt;/p&gt;&lt;/div&gt;

&lt;p&gt;It&#39;s hard to pinpoint the exact moment when something fundamentally shifts. There&#39;s no day when you wake up and say, &quot;Today, everything is different.&quot; It&#39;s more like boiling a frog. Except in this case, the frog is me, and the water feels &lt;em&gt;amazing&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Over the last few weeks, a confluence of AI developments crossed an invisible threshold. None of them is dramatic on their own. All of them, together, are profoundly changing how I work, how I teach, and honestly, how I think about what comes next.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Claude stopped being a chatty know-it-all&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let me start with the most concrete thing. Around December, Claude became... different. Not in some flashy, press-release way. It just started being &lt;em&gt;right&lt;/em&gt;. Consistently, reliably right. The suggestions were spot on. The reasoning was good. The writing did not feel like fluffy AI slop. The output needed minimal editing.&lt;/p&gt;

&lt;p&gt;I know, I know—&quot;AI is getting better&quot; isn&#39;t exactly breaking news. People have been saying this for years. But there&#39;s a qualitative difference between &quot;impressive compared to what we had before, but I still need to direct and edit this very carefully&quot; and &quot;I now trust this thing with real work.&quot; We crossed that line.&lt;/p&gt;

&lt;p&gt;Here&#39;s the moment it hit me. Yesterday, I had a brainstorming session with a student. We shared documents, exchanged ideas, sketched out some research directions. Normal academic stuff. Afterwards, I dumped my messy meeting notes into Claude and asked it to organize them.&lt;/p&gt;

&lt;p&gt;What came back was not just a cleaned-up document with better formatting.&lt;/p&gt;

&lt;p&gt;It was a &lt;em&gt;research program&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Legitimate research questions, well thought out, properly scoped, organized into a coherent agenda with clear methodological approaches. I sat there staring at my screen. I did not feel like I was a professor advising a student and making some progress. It felt like we were in reality two grad students who had been goofing around with half-baked ideas, and then our wise, respected senior professor walked into the room, sat down, and said: &quot;OK, here&#39;s how research is actually done. Here&#39;s how you think about this. Here&#39;s how you organize your work.&quot;&lt;/p&gt;

&lt;p&gt;Not a helpful assistant anymore. Claude was setting the agenda this time around. It was the senior colleague. It was the advisor.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;The Agent That Puts PhD Students to Shame&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And then there&#39;s the agent setup, which is where things get truly surreal.&lt;/p&gt;

&lt;p&gt;When you pair Claude with GitHub for memory, an &lt;code&gt;AGENTS.md&lt;/code&gt; file for context, and a &lt;code&gt;TODO.md&lt;/code&gt; for task tracking, something clicks. The AI labs have been saying for a while that their agents were reaching &quot;PhD student level.&quot; I&#39;ve supervised PhD students for 20 years. I love them. Truly. But let me be blunt: I have never worked with a PhD student this organized and this diligent.&lt;/p&gt;

&lt;p&gt;None of them have ever created a table mapping every data-driven claim in the LaTeX code to the specific code and data files that support each claim. None of them has had a full pipeline for the data analysis and the figures in a makefile, ready to repeat everything if necessary. None of them has had a reproducibility package ready before we even sent out the first manuscript.&lt;/p&gt;

&lt;p&gt;The only downside? I will not be able to have drinks with this PhD student in the future and feel happy seeing them be so much more successful than I am.&lt;/p&gt;

&lt;p&gt;A paper is about to go out. I started writing in earnest on Saturday. It took a total of four days of work to get to a submittable manuscript. The experimental analysis, the writing, the polishing. Four days. This would have taken four &lt;em&gt;weeks&lt;/em&gt; minimum with a human collaborator, and that&#39;s being generous. And the quality isn&#39;t &quot;good enough for a draft.&quot; It&#39;s &quot;ready for submission with minor tweaks.&quot;&lt;/p&gt;

&lt;p&gt;I find myself glued to my screen all day. I am not doing busy work. I write down what needs to be done, and this is happening behind the scenes. I am getting back the next iteration in an hour, I look at it, I give feedback, we cross things out from the TODO.md and we move forward. This is real work being done. Not just coding. Paper writing. Report preparation. Coding practices leak into other types of work, and things are moving. My real work is getting done, not just my academic software prototypes.&lt;/p&gt;

&lt;p&gt;It&#39;s like having an infinite pool of employees, each one eager, competent, and ready to come back with actual deliverables. Not drafts that need to be rewritten. Not outlines that need to be fleshed out. Deliverables.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Teaching as Curation: The NotebookLM Story&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let me tell you about another shift that&#39;s been happening in parallel, this one in our classroom.&lt;/p&gt;

&lt;p&gt;We teach an AI Product Management course at Stern, and starting in November, something strange happened to how we prepare. We stopped &lt;em&gt;creating&lt;/em&gt; content. We started &lt;em&gt;curating&lt;/em&gt; it.&lt;/p&gt;

&lt;p&gt;Here&#39;s our workflow now: After every class session, we collect student feedback. What clicked, what didn&#39;t, what questions came up, what topics generated the most energy. We dump all of this (the feedback forms, our own notes, relevant articles, the previous session&#39;s materials) into NotebookLM.&lt;/p&gt;

&lt;p&gt;And then we ask it to help us design the next session.&lt;/p&gt;

&lt;p&gt;NotebookLM digests the student feedback, identifies the gaps, suggests educational activities, and creates new explainer material that directly addresses what students found confusing or wanted to explore further. It connects themes across sessions that we might not have noticed. It proposes case studies that are relevant to the questions students actually asked, not the ones we assumed they&#39;d ask.&lt;/p&gt;

&lt;p&gt;The result? The course is absurdly adaptive. Every session builds on what students actually need, not on a syllabus we wrote in August. We&#39;re not creating lectures from scratch anymore. We&#39;re curating a learning experience, with AI as our editorial partner. The student feedback loop, which used to inform &lt;em&gt;maybe&lt;/em&gt; the next semester&#39;s version of the course, now informs &lt;em&gt;the next class&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;We feel like careful curators, because we&#39;re still the ones making the final calls. For now. For how long? No idea. Perhaps in Summer even the curation will be something the AI does better than us.&lt;/p&gt;

&lt;p&gt;Education is changing. Bloom&#39;s two sigma problem, the finding that one-on-one tutoring outperforms classroom instruction by two standard deviations, is solvable. Now. What is our role? No clue. Perhaps the future of education does not need professors. But the future of education is bright. We will not believe how bad we are. Almost like going from writing with a marker on transparencies to having an interactive demo of the concept. That transition took 30 years. Let&#39;s see where we will be in 30 months.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;So... Everybody&#39;s a CEO Now?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here&#39;s where I start to feel a little dizzy. The marginal cost of competence is hitting zero.&lt;/p&gt;

&lt;p&gt;If I can supervise an AI agent the way I&#39;d supervise a research team (giving it direction, reviewing output, iterating on results) and if this scales to writing papers, analyzing data, building prototypes, designing courses... then what am I? I&#39;m a manager. A director. A CEO of a one-person company with an arbitrarily large AI workforce.&lt;/p&gt;

&lt;p&gt;But here&#39;s the question: What happens when &lt;em&gt;everyone&lt;/em&gt; can do this?&lt;/p&gt;

&lt;p&gt;When every professor can produce research at 10x the speed. When every consultant can deliver analyses that used to require a team of five. When every entrepreneur can build and ship products without hiring engineers. When every student can produce work indistinguishable from an expert&#39;s.&lt;/p&gt;

&lt;p&gt;Do we still need employees? Is it even feasible for everyone to operate like a one-person business? And if so, who are the customers? If everyone is a CEO, who is buying?&lt;/p&gt;

&lt;p&gt;I don&#39;t have answers. The words people have been saying for the last few years, &quot;AI will change everything,&quot; &quot;this is the new industrial revolution,&quot; &quot;knowledge work will be transformed,&quot; those words haven&#39;t changed.&lt;/p&gt;

&lt;p&gt;But the &lt;em&gt;feeling&lt;/em&gt; has.&lt;/p&gt;

&lt;p&gt;It used to feel like a prediction. The prediction is here. You will feel it soon, if you have not felt it already. It will be a mix of awe and fear. Impostor syndrome to the fullest. What exactly am I adding here?&lt;/p&gt;

&lt;p&gt;I&#39;d love to tell you that the human role is now &quot;taste, judgment, direction-setting&quot; and that AI just handles the execution. That&#39;s the comforting version. But I just told you that Claude set the research agenda, not me. So even that may not hold for long.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Bye now&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And for now, if you&#39;ll excuse me, I need to go review the deliverables my AI team just submitted. Four papers in the queue, a course redesign in progress, and a blog post that, unlike this one, I didn&#39;t write myself.&lt;/p&gt;

&lt;p&gt;OK fine, I didn&#39;t write this one myself either.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Kidding. Mostly.)&lt;/em&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/2283280348430966962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/2283280348430966962'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2026/02/everybody-is-ceo-now-and-what-exactly.html' title='Everybody Is a CEO Now (And What Exactly Am I Doing Here?)'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhtGVul36sQGPLpzAvu_li6Q_FV69urAGbKbN41Ml7Kg9WVIat9UZxoYAGjR_IXDS5BVdMp9x7QHckc1dLJkS37UlCObq1hrqrxEboULU8jCWVcP7rYZT8kbiQoX-VtE6t0uYwskEPSfeM-tkAeUVsoozSbxPrgpAwb_IMht48MSxv449ftT2EuqnfcFZI=s72-w400-h400-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-3754572994329279659</id><published>2025-12-29T14:46:00.021-05:00</published><updated>2026-03-19T22:56:25.851-04:00</updated><title type='text'>Fighting Fire with Fire: Scalable Personalized Oral Exams with an ElevenLabs Voice AI Agent</title><content type='html'>&lt;div style=&quot;background-color: #f3f0f7; border-left: 4px solid rgb(87, 6, 140); border-radius: 12px; margin-bottom: 24px; padding: 20px 24px;&quot;&gt;
&lt;p&gt;&lt;strong&gt;📄 Paper:&lt;/strong&gt; This blog post has been expanded into a full paper: &lt;a href=&quot;https://arxiv.org/abs/2603.18221&quot;&gt;&lt;strong&gt;Scalable and Personalized Oral Assessments Using Voice AI&lt;/strong&gt;&lt;/a&gt; (Panos Ipeirotis and Konstantinos Rizakos, arXiv:2603.18221). The paper includes the complete system design, failure mode analysis, student experience data, and all prompts as appendices.&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;It all started with cold calling.&lt;/p&gt;

&lt;p&gt;In our new &quot;AI/ML Product Management&quot; class (co-taught with &lt;a href=&quot;https://www.linkedin.com/in/rizakos/&quot;&gt;Konstantinos Rizakos&lt;/a&gt;), the &quot;pre-case&quot; submissions (short assignments meant to prepare students for class discussion) were looking suspiciously good. Not &quot;strong student&quot; good. More like &quot;this reads like a McKinsey memo that went through three rounds of editing,&quot; good.&lt;/p&gt;

&lt;p&gt;And let&#39;s be clear: We have zero problems with students using AI for their work. (Banning AI in an AI course? That would be... special.) We actively &lt;em&gt;encourage&lt;/em&gt; it. But here&#39;s the distinction that matters: using AI to &lt;em&gt;enhance&lt;/em&gt; your thinking versus outsourcing your thinking entirely and learning nothing at the end. One of these is education. The other is expensive credential theater.&lt;/p&gt;

&lt;p&gt;So we started cold calling students randomly during class.&lt;/p&gt;

&lt;p&gt;The result was... illuminating. Many students who had submitted thoughtful, well-structured work could not explain basic choices in their own submission after two follow-up questions. Some could not participate at all. This gap was too consistent to blame on nerves or bad luck. &lt;strong&gt;If you cannot defend your own work live, then the written artifact is not measuring what you think it is measuring.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://brianjabarian.org/&quot;&gt;Brian Jabarian&lt;/a&gt; has been doing &lt;a href=&quot;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5395709&quot;&gt;interesting work on this problem&lt;/a&gt;, &lt;em&gt;having shown that AI is actually better than humans at conducting job interviews&lt;/em&gt;. Why? Humans get tired, have biases, and are less consistent at following a script. His results both inspired us and gave us the confidence to try something that would have sounded absurd two years ago: running the final exam with a Voice AI agent.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;Why oral exams? And why now?&lt;/h2&gt;

&lt;p&gt;The core problem is almost embarrassingly simple: students now have immediate access to LLMs that can handle most exam questions we traditionally use for assessment. The old equilibrium—where take-home work could reliably measure understanding—is dead. Gone. Kaput.&lt;/p&gt;

&lt;p&gt;OK, so we go pen and paper in the classroom. We did exactly that for the midterm. Problem solved, right?&lt;/p&gt;

&lt;p&gt;Well, not quite. We also needed to ensure that students had done &lt;strong&gt;deep work&lt;/strong&gt; on their group projects. In the past, our worry was freeriding: students offloading their work to teammates. But then, &lt;em&gt;in the middle of our class&lt;/em&gt;, the AI landscape shifted dramatically. Gemini 3.0 dropped, and NotebookLM started generating flawless presentations. Suddenly, a student could deliver a polished, sophisticated presentation about a project they barely touched.&lt;/p&gt;

&lt;p&gt;And we&#39;d have no way to tell.&lt;/p&gt;

&lt;p&gt;Oral exams were the natural response. They force real-time reasoning, application to novel prompts, and defense of actual decisions. No LLM whispering in your ear. No &quot;let me just check something real quick&quot; while ChatGPT generates your answer. Just you, your knowledge, and an evaluator.&lt;/p&gt;

&lt;p&gt;The problem? Oral exams are a &lt;strong&gt;logistical nightmare&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With 36 students and two instructors, we could &lt;em&gt;maybe&lt;/em&gt; manage. But even at that scale, the accommodation requests started piling up immediately. &quot;I have a flight on the 15th.&quot; &quot;I have three other finals that day.&quot; &quot;I&#39;m traveling for a family event.&quot; All legitimate! But multiply that by a factor of ten for a larger class, and you&#39;re looking at a month-long hostage situation.&lt;/p&gt;

&lt;p&gt;So: oral exams don&#39;t scale. Everyone knows this. It&#39;s why we abandoned them in the first place.&lt;/p&gt;

&lt;p&gt;Unless you cheat.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;Enter the Voice Agent&lt;/h2&gt;

&lt;p&gt;We used &lt;a href=&quot;https://elevenlabs.io/conversational-ai&quot;&gt;ElevenLabs Conversational AI&lt;/a&gt; to build the examiner. The platform bundles the messy parts (speech-to-text, text-to-speech, turn-taking, interruption handling, …) into something usable. And here is the thing that surprised me: a basic version for a low-stakes setting (e.g., an assignment) can be up and running in literally minutes. Minutes. Just write a prompt describing what the agent should ask the student, and you are done.&lt;/p&gt;

&lt;p&gt;Two features mattered a lot for our setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dynamic variables:&lt;/strong&gt; pass the student&#39;s name, project details, and other per-student context into the conversation as parameters, to allow &lt;em&gt;&lt;strong&gt;personalized&lt;/strong&gt;&lt;/em&gt; exams&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Workflows:&lt;/strong&gt; build a structured flow with sub-agents instead of a single &quot;chatty&quot; agent trying to do everything&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;What the exam looked like&lt;/h2&gt;

&lt;p&gt;We ran a two-part oral exam.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 1: &quot;Talk me through your project.&quot;&lt;/strong&gt; The agent asks about the student&#39;s capstone project: goals, data, modeling choices, evaluation, failure modes. This is where the &quot;LLM did my homework&quot; strategy dies. You can paste an assignment into ChatGPT. It is much harder to improvise consistent answers about specific decisions when someone is drilling into details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part 2: &quot;Now do a case.&quot;&lt;/strong&gt; The agent picks one of the cases we discussed in class and asks questions spanning the topics we covered: basically testing whether students absorbed the material or just showed up.&lt;/p&gt;

&lt;p&gt;To handle this structure, we split the exam into sub-agents in a workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Authentication agent:&lt;/strong&gt; Asks for the student&#39;s ID and refuses to proceed without a valid one. (In a more productized version, we would integrate with NYU SSO instead of checking against a list.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project discussion agent:&lt;/strong&gt; Gets project context injected via parameters. The prompt includes details of each project so the agent can ask informed questions. The next step is obvious: connect retrieval over the student&#39;s submitted slides and reports so the agent can quote and probe precisely.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Case discussion agent:&lt;/strong&gt; Selects a case and runs structured questioning. Again, RAG would help with richer case details.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This &quot;many small agents&quot; approach is not just aesthetic. It prevents the system from drifting into unbounded conversation, and it makes debugging possible.&lt;/p&gt;

&lt;p&gt;If you want to try: &lt;a href=&quot;https://elevenlabs.io/app/talk-to?agent_id=agent_8101k9d1pq41f3rs8d9g9143dvvr&amp;amp;vars=eyJzdHVkZW50IjoiS29uc3RhbnRpbm9zIFJpemFrb3MiLCAibmV0aWQiOiJrcjg4OCIsICJwcm9qZWN0aWQiOiJCIn0=&quot;&gt;Link to try the voice agent&lt;/a&gt; &lt;em&gt;(use Konstantinos as the name and kr888 as the net id to authenticate; the project was a &quot;LinkedIn Recruiter, an agent that scans profiles and automatically sends personalized DMs to candidates on behalf of a recruiter. It engages in the first 3 turns of chat to answer basic questions (salary, location) before handing off to a human.&quot;&lt;/em&gt;&lt;em&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;By the Numbers&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;36 students examined over 9 days&lt;/li&gt;
&lt;li&gt;25 minutes average (range: 9–64)&lt;/li&gt;
&lt;li&gt;65 messages per conversation on average&lt;/li&gt;
&lt;li&gt;0.42 USD per student (15 USD total), &lt;em&gt;but also the $99/month ElevenLabs subscription&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;89% of LLM grades within 1 point&lt;/li&gt;
&lt;li&gt;Shortest exam (9 min) → highest score (19/20)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2&gt;The economics&lt;/h2&gt;

&lt;p&gt;Let&#39;s talk money.&lt;/p&gt;

&lt;p&gt;Total cost for 36 students: &lt;strong&gt;15 USD&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That&#39;s 8 USD for Claude (the chair and heaviest grader), 2 USD for Gemini, 0.30 USD for OpenAI, and roughly 5 USD for ElevenLabs voice minutes. Forty-two cents per student.&lt;/p&gt;

&lt;p&gt;The alternative? 36 students × 25-minute exam × 2 graders = 30 hours of human time. At TA rates (~$25/hour), that&#39;s $750. At faculty rates, it&#39;s &quot;we don&#39;t do oral exams because they don&#39;t scale.&quot;&lt;/p&gt;

&lt;p&gt;For $15, we got: real-time oral examination, a three-model grading council with deliberation, structured feedback with verbatim quotes, a complete audit trail, and—as you&#39;ll see—a diagnosis of our own teaching gaps.&lt;/p&gt;

&lt;p&gt;The unit economics in terms of cost work. We will see next that the real benefit is in the value that is delivered, not in the 50x cost savings.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;What broke (and how we fixed it)&lt;/h2&gt;

&lt;p&gt;The first version had problems. Here is what we learned.&lt;/p&gt;

&lt;h3&gt;1) The voice was intimidating&lt;/h3&gt;

&lt;p&gt;A few students complained that the agent sounded severe. We had cloned Foster Provost&#39;s voice because, frankly, his clone was much more accurate than the clones of our own voices. But the students found it... intense. Here is an email from a student:&lt;/p&gt;

&lt;blockquote&gt;I had prepared thoroughly and felt confident in my understanding of the material, but the intensity of the interviewer&#39;s voice during the exam unexpectedly heightened my anxiety and affected my performance. The experience was more triggering than I anticipated, which made it difficult to fully demonstrate my knowledge. Throughout the course, I have actively participated and engaged with the material, and I had hoped to better demonstrate my knowledge in this interview.&lt;/blockquote&gt;

&lt;p&gt;And here is another:&lt;/p&gt;

&lt;blockquote&gt;Just got done with my oral exam. [...] I honestly didn&#39;t feel comfortable with it at all. The voice you picked was so condescending that it actually dropped my confidence. [...] I don&#39;t know why but the agent was shouting at me.&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; We are split on that. We love FakeFoster. But next time we will A/B test, and we will try to test other voices. At the end of the day, we want to optimize for comprehension, not charisma. &lt;a href=&quot;https://elevenlabs.io/docs/agents-platform/guides/elevenlabs-docs-agent&quot;&gt;ElevenLabs has guidance on voice and personality tuning: they treat this as a product design problem&lt;/a&gt;, and probably a good idea.&lt;/p&gt;

&lt;h3&gt;2) The agent stacked questions&lt;/h3&gt;

&lt;p&gt;This was the biggest real issue. The agent would ask something like: &quot;Explain your metric choice, and also tell me what baselines you tried, and why you did not use X, and what you would do next.&quot;&lt;/p&gt;

&lt;p&gt;That is not one question. That is four questions wearing a trench coat. The cognitive load for an oral exam is already high. Stacking questions makes it brutal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Hard rule in the prompt: &lt;em&gt;one question at a time&lt;/em&gt;. If you want multi-part probing, chain it across turns. For grading the exam, we included an &quot;interference protocol&quot;: students received full credit if they had questions stacked like that and answered only some of them.&lt;/p&gt;

&lt;h3&gt;3) Clarifications became moving targets&lt;/h3&gt;

&lt;p&gt;Student: &quot;Can you repeat the question?&quot;&lt;br /&gt;
Agent: &lt;em&gt;paraphrases the question in a subtly different way&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now the student is solving a different problem than the one they were asked. Very frustrating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Explicit instruction in the prompt: &lt;em&gt;repeat verbatim when asked to repeat&lt;/em&gt;. No paraphrasing. Same words.&lt;/p&gt;

&lt;h3&gt;4) The agent did not let students think&lt;/h3&gt;

&lt;p&gt;Humans rush to fill silence. Agents do too. Students would pause to think, and the agent would jump in with follow-up probes or worse: interpret the silence as confusion and move on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Tell the agent to allow think-time without probing aggressively. It made the exam feel less like an interrogation. We also increased the time-out before the agent asks &quot;Are you there?&quot; from 5 to 10 seconds.&lt;/p&gt;

&lt;h3&gt;5) Lack of randomization&lt;/h3&gt;

&lt;p&gt;We asked the agent to &quot;randomly select&quot; a case study. It did not.&lt;/p&gt;

&lt;p&gt;From December 12–18, when Zillow was in the case list, the agent picked Zillow &lt;strong&gt;88% of the time&lt;/strong&gt;. After we removed Zillow from the prompt on December 18, the agent immediately latched onto Predictive Policing—picking it for &lt;strong&gt;16 out of 21 exams&lt;/strong&gt; on December 19 alone.&lt;/p&gt;

&lt;p&gt;LLMs are not random. They have implicit preferences and ordering biases. Asking an LLM to &quot;pick randomly&quot; is like asking a human to &quot;think of a number between 1 and 10&quot;—you&#39;re going to get a lot of 7s.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Pass an explicit random number as a parameter and map it to cases deterministically. Do the randomization in code, not in the prompt.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;Grading: the council deliberation actually worked&lt;/h2&gt;

&lt;p&gt;OK, so here is where things got interesting.&lt;/p&gt;

&lt;p&gt;We graded using a &quot;&lt;a href=&quot;https://github.com/karpathy/llm-council&quot; target=&quot;_blank&quot;&gt;council of LLMs&lt;/a&gt;&quot; approach, an idea we borrowed from Andrej Karpathy. Three models (Claude, Gemini, ChatGPT) assessed each transcript independently. Then they saw each other&#39;s assessments and revised. Finally, the chair (Claude) synthesized the final grade with evidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 1 was a mess&lt;/strong&gt;. When the models graded independently, agreement was poor: 0% of grades matched exactly, and only 23% were within 2 points. The average maximum disagreement was nearly 4 points on a 20-point scale.&lt;/p&gt;

&lt;p&gt;And here&#39;s the kicker: Gemini was a softie: It averaged 17/20. Claude averaged 13.4/20. That&#39;s a 3.6-point gap—the difference between a B+ and a B-.&lt;/p&gt;

&lt;p&gt;Meanwhile, Claude and OpenAI were already aligned: 70% of their grades were within 1 point of each other in Round 1.&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;8&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Round 1 Mean&lt;/th&gt;
&lt;th&gt;Round 2 Mean&lt;/th&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude&lt;/td&gt;
&lt;td&gt;13.4/20&lt;/td&gt;
&lt;td&gt;13.9/20&lt;/td&gt;
&lt;td&gt;+0.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;14.0/20&lt;/td&gt;
&lt;td&gt;14.0/20&lt;/td&gt;
&lt;td&gt;+0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini&lt;/td&gt;
&lt;td&gt;17.0/20&lt;/td&gt;
&lt;td&gt;15.0/20&lt;/td&gt;
&lt;td&gt;-2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Then came consultation. After each model saw the others&#39; assessments and evidence, agreement improved dramatically:&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;8&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Round 1&lt;/th&gt;
&lt;th&gt;Round 2&lt;/th&gt;
&lt;th&gt;Improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Perfect agreement&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;21%&lt;/td&gt;
&lt;td&gt;+21 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Within 1 point&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;62%&lt;/td&gt;
&lt;td&gt;+62 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Within 2 points&lt;/td&gt;
&lt;td&gt;23%&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;td&gt;+62 pp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mean max difference&lt;/td&gt;
&lt;td&gt;3.93 pts&lt;/td&gt;
&lt;td&gt;1.41 pts&lt;/td&gt;
&lt;td&gt;-2.52 pts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Gemini lowered its grades by an average of 2 points after seeing Claude&#39;s and OpenAI&#39;s more rigorous assessments. It couldn&#39;t justify giving 17s when Claude was pointing to specific gaps in the experimentation discussion.&lt;/p&gt;

&lt;img alt=&quot;Grade convergence chart&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEg5fX5d3GQ2cOHfJpbT5os_5WBQSnb5iLSULS76cNn0LGOFq3RxpjyAu4sGJ2DEFMpo8_mWe9Vum1yzpLbfI82qK-m2yXDFQApP_X01G_fO0xFz-utUW3dHelb8XsqEHP3sgHNjxKAEKnZoCJDZkpJVneeF_ej0T8sq_HGm9YtWeE42I_hWkpfDDB1jbd8&quot; width=&quot;624&quot; /&gt;

&lt;p&gt;But here&#39;s what&#39;s interesting: the disagreement wasn&#39;t random. Problem Framing and Metrics had &lt;strong&gt;100% agreement&lt;/strong&gt; within 1 point. Experimentation? Only &lt;strong&gt;57%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why? When students give clear, specific answers, graders agree. When students give vague hand-wavy answers, graders (human or AI) disagree on how much partial credit to give. The low agreement on experimentation reflects genuine ambiguity in student responses, not grader noise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The grading was stricter than my own default.&lt;/strong&gt; That&#39;s not a bug. Students will be evaluated outside the university, and the world is not known for grade inflation. (Just in case you are wondering, I graded all exams myself and I asked the TA to also grade the exams; we mostly agreed with the LLM grades, and I aligned mostly with the softie Gemini. However, when examining the cases when my grades disagreed with the council, I found that the council was more consistent across students and I often thought that the council graded more strictly but more fairly.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The feedback was better than any human would produce.&lt;/strong&gt; The system generated structured &quot;strengths / weaknesses / actions&quot; summaries with verbatim quotes from the transcript. Sample feedback from the highest scorer:&lt;/p&gt;

&lt;blockquote&gt;&quot;Your understanding of metric trade-offs and Goodhart&#39;s Law risks was exceptional—the hot tub example perfectly illustrated how optimizing for one metric can corrupt another.&quot;&lt;/blockquote&gt;

&lt;p&gt;Sample from a B- student:&lt;/p&gt;

&lt;blockquote&gt;&quot;Practice articulating complete A/B testing designs: state a hypothesis, define randomization unit, specify guardrail metrics, and establish decision criteria for shipping or rolling back.&quot;&lt;/blockquote&gt;

&lt;p&gt;Specific. Actionable. Tied to evidence. No human grader has the time to generate that for every student.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;It diagnosed our teaching gaps&lt;/h2&gt;

&lt;p&gt;Ha! This one stung.&lt;/p&gt;

&lt;img alt=&quot;Topic performance chart&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh-ISSQRlDyrhz1aF2SKnjX-NTTBv5nbkq4TyhFkKOc1FcZ80wHMrZ9YU7X62-9j-SfTpHT2VQDxuiE1bkKaOVIJ8zSRvLTi0hSAkvdC6h2-E-YA-MokZMoeVat-CGW1XD6lkhof8BpYY2bCymGz_A5x0lSvPBvlpX5DiTtqSzaZafdAJ8rkv_lv-Tu2sg&quot; width=&quot;624&quot; /&gt;

&lt;p&gt;When we analyzed performance by topic, one bar stuck out like a sore thumb: &lt;strong&gt;Experimentation&lt;/strong&gt;. Mean score: 1.94 out of 4. Compare that to Problem Framing at 3.39.&lt;/p&gt;

&lt;p&gt;The breakdown was brutal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;3 students (8%) scored &lt;strong&gt;0&lt;/strong&gt;—couldn&#39;t discuss it at all&lt;/li&gt;
&lt;li&gt;7 students (19%) scored &lt;strong&gt;1&lt;/strong&gt;—superficial understanding&lt;/li&gt;
&lt;li&gt;15 students (42%) scored &lt;strong&gt;2&lt;/strong&gt;—basic understanding&lt;/li&gt;
&lt;li&gt;0 students scored &lt;strong&gt;4&lt;/strong&gt;—no one demonstrated mastery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We had rushed through A/B testing methodology in class. The external grader made it impossible to ignore.&lt;/p&gt;

&lt;p&gt;The grading output became a mirror reflecting our own weaknesses as instructors. Ooof.&lt;/p&gt;

&lt;h3&gt;Duration ≠ Quality&lt;/h3&gt;

&lt;p&gt;One finding I found strangely fascinating: exam duration had &lt;strong&gt;zero correlation&lt;/strong&gt; with score (r = -0.03). The shortest exam—9 minutes—got the highest score (19/20). The longest—64 minutes—scored 12/20.&lt;/p&gt;

&lt;p&gt;Taking longer doesn&#39;t mean you know more. If anything, it signals struggling to articulate. Confidence is efficient.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;Anti-cheating (or: trust but verify)&lt;/h2&gt;

&lt;p&gt;We asked students to &lt;strong&gt;record themselves&lt;/strong&gt; while taking the exam (webcam + audio). This discourages blatantly outsourcing the conversation, having multiple people in the room, or having an LLM in voice mode whispering answers. It also gives us a backup record in case something goes really badly.&lt;/p&gt;

&lt;p&gt;And here is an underrated benefit of this whole setup: &lt;strong&gt;the exam is powered by guidelines, not by secret questions&lt;/strong&gt;. We can publish exactly how the exam works—the structure, the skills being tested, the types of questions. No surprises. The LLM will pick the specific questions live, and the student will have to handle them.&lt;/p&gt;

&lt;p&gt;This reduces anxiety and pushes students toward actual preparation instead of guessing what the instructor &quot;wants.&quot; And it eliminates the leaked-exam problem entirely. Practice all you want—it will only make you better prepared.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2&gt;What the students said&lt;/h2&gt;

&lt;p&gt;We surveyed students before releasing grades to capture their experience. Some of the results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only 13% preferred the AI oral format. 57% wanted traditional written exams. 83% found it more stressful.&lt;/li&gt;
&lt;li&gt;But here&#39;s the thing: 70% agreed it tested their actual understanding: the highest-rated item. They accepted the assessment but not the delivery.&lt;/li&gt;
&lt;li&gt;At the same time, they almost universally liked the flexibility of taking the exam at their own place and time. Yes, many of them would have also preferred a take-home exam instead of the oral exam, but this format is dead now.&lt;/li&gt;
&lt;li&gt;83% of students found the oral exam framework more stressful than a written exam.&lt;/li&gt;
&lt;li&gt;The fix is clear: one question at a time, slower pacing, calmer tone. The concept works. The execution needs iteration.&lt;/li&gt;
&lt;/ul&gt;

&lt;img alt=&quot;Student survey results&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEioSGC7USjzXprYZmvEnHsw7YX4xupGXSpKcWxwW1q61PXBHOZyxWr6pO8yEZrjZ0oJQyu6YlidYODZIvg0gQcMkJWPtwwJxCHMJfTejXod4mmo1lDGeol3Wsk-OfhVpmYIOXNB48R-kfahm5MQw9upxYYTdJR7aZS2jIHBPb9Zea9Cbl9KQyOO9jvUKaA&quot; width=&quot;624&quot; /&gt;

&lt;hr /&gt;

&lt;h2&gt;Try it yourself&lt;/h2&gt;

&lt;p&gt;If you want to experiment with this approach, here are some resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/ipeirotis/0d9d5747e6270cf6d65a6bf9d162e421&quot;&gt;Prompt for the voice agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/ipeirotis/99418caa6afae72fb7eec63855632c68&quot;&gt;Prompt for the grading council&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elevenlabs.io/app/talk-to?agent_id=agent_8101k9d1pq41f3rs8d9g9143dvvr&amp;amp;vars=eyJzdHVkZW50IjoiS29uc3RhbnRpbm9zIFJpemFrb3MiLCAibmV0aWQiOiJrcjg4OCIsICJwcm9qZWN0aWQiOiJCIn0=&quot;&gt;Link to try the voice agent&lt;/a&gt; &lt;em&gt;(use Konstantinos as the name and kr888 as the net id to authenticate; the project was a &quot;LinkedIn Recruiter, an agent that scans profiles and automatically sends personalized DMs to candidates on behalf of a recruiter. It engages in the first 3 turns of chat to answer basic questions (salary, location) before handing off to a human.&quot;&lt;/em&gt;&lt;em&gt;)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2&gt;What I would change next time&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Slower pacing and a calmer voice:&lt;/strong&gt; We love you FakeFoster, but GenZ is not ready for you. Perhaps we will deploy FakePanos next time. Too bad ElevenLabs hasn&#39;t perfected thick accents yet to deliver a real Panos experience.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RAG over student artifacts&lt;/strong&gt; (slides, reports, notebooks). ElevenLabs supports this directly. If the agent can quote the student&#39;s own submission, the exam becomes much harder to game and much more diagnostically useful.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better case randomization&lt;/strong&gt; with explicit seeding and tracking. Randomness that &quot;feels random&quot; is not enough. Pass explicit parameters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit triggers in grading.&lt;/strong&gt; If the LLM committee disagrees beyond a threshold, flag for human review. The point of a committee is not to pretend the result is always certain; it is to surface uncertainty.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessibility defaults.&lt;/strong&gt; Offer practice runs, allow extra time, and provide alternatives when voice interaction creates unnecessary barriers.&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2&gt;The bigger point&lt;/h2&gt;

&lt;p&gt;Take-home exams are dead. Reverting to pen-and-paper exams in the classroom feels like a regression. In our case, we wanted to check that the students who worked in the team projects actually contributed and understood what they submitted; we would not be able to do that with pen-and-paper exams in the classroom.&lt;/p&gt;

&lt;p&gt;We need assessments that evolve towards formats that reward understanding, decision-making, and real-time reasoning. Oral exams used to be standard until they could not scale. Now, AI is making them scalable again.&lt;/p&gt;

&lt;p&gt;And here is the delicious part: you can give the whole setup to the students and let them prepare for the exam by practicing it multiple times. Unlike traditional exams, where leaked questions are a disaster, here the questions are generated fresh each time. The more you practice, the better you get. That is... actually how learning is supposed to work.&lt;/p&gt;

&lt;p&gt;Fight fire with fire.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;Thanks to Brian Jabarian for the inspiration and for giving us confidence that these interviews will work, Foster Provost for lending his voice to create the FakeFoster agent (sorry, students found you intimidating!), and Andrej Karpathy for the council-of-LLMs idea.&lt;/em&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/3754572994329279659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/3754572994329279659'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2025/12/fighting-fire-with-fire-scalable-oral.html' title='Fighting Fire with Fire: Scalable Personalized Oral Exams with an ElevenLabs Voice AI Agent'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEg5fX5d3GQ2cOHfJpbT5os_5WBQSnb5iLSULS76cNn0LGOFq3RxpjyAu4sGJ2DEFMpo8_mWe9Vum1yzpLbfI82qK-m2yXDFQApP_X01G_fO0xFz-utUW3dHelb8XsqEHP3sgHNjxKAEKnZoCJDZkpJVneeF_ej0T8sq_HGm9YtWeE42I_hWkpfDDB1jbd8=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-4867891027624693338</id><published>2025-03-22T19:20:00.005-04:00</published><updated>2026-02-21T09:24:51.783-05:00</updated><title type='text'>Training LLaMA using LibGen: Hack, a Theft, or Just Fair Use?</title><content type='html'>&lt;p&gt;Imagine you&#39;re building a Large Language Model. You need data—lots of it. If you can find text data of high quality, vetted, truthful, and useful, it would be... great! So, naturally, you head online and find a treasure trove of books neatly indexed, conveniently downloadable, and completely free. The catch? You&#39;re looking at &lt;a href=&quot;https://libgen.mx/&quot;&gt;LibGen&lt;/a&gt;—one of the most infamous pirate libraries on the internet.&lt;/p&gt;

&lt;p&gt;This isn&#39;t hypothetical. Recently, Meta made headlines for allegedly training their flagship LLM, LLaMA, on content from LibGen. But—can you even do that?&lt;/p&gt;

&lt;p&gt;Let&#39;s unpack the legal mess behind the scenes, step-by-step.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;First: Is Using LibGen Even Legal?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Short answer: Absolutely not. Downloading copyrighted books from LibGen is textbook piracy. Think of it like grabbing a handful of snacks at the supermarket without paying—it&#39;s convenient but totally illegal.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Second: Does Training an AI Change the Equation?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Here&#39;s where it gets fuzzy. In the U.S., you can claim &quot;fair use&quot;—the idea that some copying is permissible if you&#39;re transforming the original work into something new and valuable. (&lt;a href=&quot;https://www.behind-the-enemy-lines.com/2025/02/copyright-fair-use-and-ai-training.html&quot; target=&quot;_blank&quot;&gt;We covered this in an earlier blog post.&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Remember the Google Books case? Google scanned millions of books without permission. Authors sued, but courts sided with Google, citing fair use. The logic was that indexing books for search purposes created something valuable without substituting the original.&lt;/p&gt;

&lt;p&gt;Consider another example: the Authors Guild v. HathiTrust case. Libraries scanned books to help visually impaired readers and enable text search. Courts also ruled this fair use, emphasizing the transformative nature and public benefit. However, both these cases involved legally acquired copies—not pirated ones.&lt;/p&gt;

&lt;p&gt;So, could Meta&#39;s training of LLaMA fall under the same umbrella? Possibly, yes, claiming the same fair use approach. There is a subtle difference: Google used legally accessible copies (from libraries), while Meta reportedly took a different route. Legally speaking, when we talk about &lt;b&gt;&lt;i&gt;copyright and fair use&lt;/i&gt;&lt;/b&gt; &lt;b&gt;&lt;i&gt;in the US&lt;/i&gt;&lt;/b&gt;, the source of the copyrighted data does not &lt;i&gt;directly&lt;/i&gt; affect the outcome. (Although it can affect the attitude of a jury or a judge if they believe that the defendant acted in bad faith.)&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Third: What About the EU?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;If you thought U.S. law was tricky, the EU adds another layer of complexity. They don&#39;t have a broad &quot;fair use&quot; policy, but they&#39;ve introduced exceptions specifically for Text and Data Mining (TDM). Good news for researchers and AI developers, right? Except there&#39;s a big &quot;BUT&quot;: &lt;i&gt;EU law explicitly requires lawful access&lt;/i&gt;. Pirate libraries like LibGen don&#39;t qualify.&lt;/p&gt;

&lt;p&gt;In other words, in Europe, using LibGen isn&#39;t just risky—it&#39;s explicitly illegal.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Fourth: Is there a Legal Defense for using LibGen?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;There is a &lt;i&gt;very&lt;/i&gt; reasonable argument that training an AI is transformative—after all, an LLM doesn&#39;t copy books; it learns from them. Consider also the LAION case from Germany. LAION, a nonprofit, scraped images from stock photo sites to train AI models. The court allowed it, but crucially because LAION had legitimate access and was a non-commercial entity. The outcome might differ sharply for a commercial giant sourcing pirated content.&lt;/p&gt;

&lt;p&gt;There is also the counterargument from authors and publishers that LLMs themselves create (for competitive reasons) a market for licensing content, as the different LLM providers try to get access to exclusive, licensed content as a differentiating factor, in the same way that various streaming companies compete to get exclusive access to films, shows, and TV series. It is a bit of a circular argument (without free training of LLMs, can the LLMs get good enough to create a licensing market?), but we will have to wait for the courts to decide.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Fifth: What&#39;s the Risk Here?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;For researchers at universities or small startups, casually using LibGen might seem harmless. The risks escalate quickly when you&#39;re a global company. Training on &quot;presumed free&quot; copyrighted data differs from &quot;willful infringement&quot;—the legal term for knowingly breaking copyright law.&lt;/p&gt;

&lt;p&gt;The fact that LLaMA is Open Source is a significant factor here, as there is less of a profit factor here, but when the trainer is a trillion-dollar company, the courts may behave differently. We will see...&lt;/p&gt;

&lt;p&gt;&lt;i&gt;After all, while pirates make great movie characters, they&#39;re generally less popular in courtrooms.&lt;/i&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/4867891027624693338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/4867891027624693338'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2025/03/training-llama-using-libgen-hack-theft.html' title='Training LLaMA using LibGen: Hack, a Theft, or Just Fair Use?'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-5003462814224629632</id><published>2025-02-24T23:32:00.004-05:00</published><updated>2026-02-21T09:25:00.493-05:00</updated><title type='text'>Copyright, Fair Use, and AI Training</title><content type='html'>&lt;p&gt;&lt;i&gt;[We tested the o1-pro model to give us a detailed analysis of the legal landscape around copyright and the use of copyrighted materials to train LLMs. &lt;a href=&quot;https://chatgpt.com/share/67bc8d93-ed64-8000-982c-f130c511ec69&quot; target=&quot;_blank&quot;&gt;The full discussion is available here.&lt;/a&gt; Below you will find a quick attempt to summarize the (much) longer report by o1-pro.]&lt;/i&gt;&lt;/p&gt;

&lt;h3&gt;What is Copyright? (And Why Should You Care?)&lt;/h3&gt;

&lt;p&gt;Imagine you spend months writing a book, composing a song, or designing a killer app—wouldn&#39;t you want some protection to stop someone from copying it and making money off your hard work? That&#39;s where copyright steps in! It grants the copyright holder exclusive rights to reproduce, distribute, and display their work. However, copyright isn&#39;t an all-powerful lock—there are important exceptions, like fair use, that allow for some unlicensed use, especially when it benefits society.&lt;/p&gt;

&lt;p&gt;Copyright laws are all about balance. Too much restriction, and we block innovation and education. Too little, and creators lose their incentive to make new things. Governments step in to help find that sweet spot—protecting creators&#39; rights while making sure knowledge, art, and innovation stay accessible.&lt;/p&gt;

&lt;h3&gt;The Fair Use Doctrine: When Borrowing is (Sometimes) Okay&lt;/h3&gt;

&lt;p&gt;Fair use is like the ultimate legal &quot;it depends&quot; clause in copyright law. It allows limited use of copyrighted materials without permission—whether for education, commentary, parody, or research. But how do you know if something qualifies as fair use? Courts consider these four big factors:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Purpose and Character of the Use&lt;/strong&gt; – Is the use transformative? Does it add new meaning or context? And is it for commercial gain or educational purposes?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nature of the Copyrighted Work&lt;/strong&gt; – Is the original work factual (easier to use under fair use) or highly creative (harder to justify copying)?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amount and Substantiality&lt;/strong&gt; – How much of the original is used, and is it the &quot;heart&quot; of the work?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Effect on the Market&lt;/strong&gt; – Does this use harm the copyright holder&#39;s ability to profit from their work?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;What Do Past Cases Tell Us About Fair Use?&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Google Books Case (Authors Guild v. Google, 2015):&lt;/strong&gt; Google scanned millions of books to make them searchable, showing only small snippets of text. The Second Circuit ruled this was fair use because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It was &lt;strong&gt;highly transformative&lt;/strong&gt;—it helped people find books rather than replacing them.&lt;/li&gt;
&lt;li&gt;The snippets were &lt;strong&gt;not a market substitute&lt;/strong&gt;—nobody was reading full books this way.&lt;/li&gt;
&lt;li&gt;Instead of harming book sales, it actually helped readers find books to purchase.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Google Search Indexing (Perfect 10 v. Google, 2007):&lt;/strong&gt; Google&#39;s image search displayed thumbnail previews linking to full-size images. The Ninth Circuit ruled this was fair use because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It served a &lt;strong&gt;different function&lt;/strong&gt;—helping users find images, not replacing the originals.&lt;/li&gt;
&lt;li&gt;Any &lt;strong&gt;market harm was speculative&lt;/strong&gt;—there was no proof Google&#39;s thumbnails hurt sales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn Scraping Case (hiQ Labs v. LinkedIn, 2019):&lt;/strong&gt; hiQ Labs scraped publicly available LinkedIn profiles to analyze workforce data. LinkedIn sued, claiming this violated its terms of service. The Ninth Circuit ruled that scraping publicly accessible data wasn&#39;t illegal under the Computer Fraud and Abuse Act (CFAA), but the case raised bigger questions about data ownership and fair use. This case matters for AI because it highlights the legal gray area of using publicly available content for AI training—does scraping data for machine learning function like search indexing (which courts favor) or unfairly compete with content creators?&lt;/p&gt;

&lt;h3&gt;When Courts Say &quot;Nope&quot; to Fair Use&lt;/h3&gt;

&lt;p&gt;When a copied work competes directly with the original, courts usually rule against fair use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Texaco Case (American Geophysical Union v. Texaco, 1994)&lt;/strong&gt; – Texaco photocopied journal articles for internal research. The court ruled this &lt;strong&gt;wasn&#39;t fair use&lt;/strong&gt; because Texaco could&#39;ve just bought the licenses, and widespread copying threatened the scientific journal market.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Meltwater Case (Associated Press v. Meltwater)&lt;/strong&gt; – Meltwater, a news aggregation service, copied AP excerpts. The court ruled &lt;strong&gt;this wasn&#39;t fair use&lt;/strong&gt; because it replaced a &lt;strong&gt;licensable market&lt;/strong&gt; for news monitoring services.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;How Does This Apply to AI Training?&lt;/h3&gt;

&lt;p&gt;AI models like ChatGPT train on huge datasets, including copyrighted text. Courts will likely analyze this under fair use principles by asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Is AI training transformative?&lt;/strong&gt; AI companies argue that their models learn patterns rather than copying content. This mirrors &lt;em&gt;Google Books&lt;/em&gt;, where scanning books for search indexing was deemed transformative.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Does AI-generated text replace the original?&lt;/strong&gt; If AI can generate news summaries or books, it might compete with the markets for journalism, books, or educational content—similar to &lt;em&gt;Meltwater&lt;/em&gt; replacing a paid service.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Is there a licensing market?&lt;/strong&gt; If publishers and authors start licensing data for AI training, unlicensed use could be seen as market harm—like in &lt;em&gt;Texaco&lt;/em&gt;, where academic publishers had a functioning licensing system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The outcome of ongoing lawsuits will determine how courts see AI&#39;s role in the content economy. If AI models start functioning as substitutes for original content, expect stricter copyright enforcement. If they&#39;re seen as research tools, fair use might hold up.&lt;/p&gt;

&lt;h3&gt;Industry-Specific Market Harm Considerations&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;News &amp;amp; Journalism&lt;/strong&gt; – AI-generated summaries may reduce clicks on original articles, hurting ad revenue and subscriptions (&lt;em&gt;New York Times v. OpenAI&lt;/em&gt; argues AI responses replace direct readership).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Book Publishing&lt;/strong&gt; – Authors claim AI-generated text could compete with traditional books and summaries (&lt;em&gt;Authors Guild v. OpenAI&lt;/em&gt; argues AI models reduce demand for original works).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Education &amp;amp; Academic Publishing&lt;/strong&gt; – AI-generated study materials could cut into textbook sales (&lt;em&gt;Pearson v. OpenAI&lt;/em&gt; claims AI-generated content could replace traditional textbooks).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Creative Writing &amp;amp; Film&lt;/strong&gt; – AI-generated scripts or novels could impact demand for human writers (&lt;em&gt;Writers Guild v. OpenAI&lt;/em&gt; and &lt;em&gt;Martin v. OpenAI&lt;/em&gt; argue AI mimicking authors threatens their markets).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;The Future of AI and Copyright Law&lt;/h3&gt;

&lt;p&gt;Current lawsuits (&lt;em&gt;New York Times v. OpenAI&lt;/em&gt;, &lt;em&gt;Authors Guild v. OpenAI&lt;/em&gt;) will set precedents for AI copyright law. Possible outcomes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI training as fair use&lt;/strong&gt; – If courts find AI models transformative and non-substitutive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI training as infringement&lt;/strong&gt; – If courts rule that it undermines a viable licensing market.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New licensing systems&lt;/strong&gt; – Like how music royalties work, AI companies may have to pay creators.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Wrapping It Up&lt;/h3&gt;

&lt;p&gt;So, what&#39;s the big takeaway? AI and copyright law are in a messy, ongoing battle. Will AI companies get a free pass under fair use, or will copyright holders demand licensing fees? We don&#39;t know yet, but these decisions will shape the future of AI.&lt;/p&gt;

&lt;p&gt;My bet? AI companies will create new markets where content creators can contribute and get paid—like YouTube does for video creators. Instead of just scraping data, AI firms will likely find ways to reward quality content, making it a win-win for tech and creatives alike.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/5003462814224629632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/5003462814224629632'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2025/02/copyright-fair-use-and-ai-training.html' title='Copyright, Fair Use, and AI Training'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-6182210352457251570</id><published>2024-09-06T10:32:00.008-04:00</published><updated>2026-02-21T09:26:15.914-05:00</updated><title type='text'>Developing Grading Rubrics using Docent</title><content type='html'>&lt;p&gt;When I explain the concept of Docent, a common first question I hear is if AI grades assignments, can&#39;t students just use AI to do their homework? They imagine a scenario where professors create assignments with AI, students complete them with AI, and graders assess them with AI as well.&lt;/p&gt;

&lt;p&gt;But, let me clear that up—Docent doesn&#39;t work like that.&lt;/p&gt;

&lt;p&gt;While we were crafting Docent, we figured out we really needed two things to make AI grading effective:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A &quot;gold answer,&quot; which is basically the perfect solution to the assignment.&lt;/li&gt;
&lt;li&gt;A &quot;grading rubric,&quot; which is a guide on how to deduct points for mistakes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &quot;gold answer&quot; is our way of ensuring that even if an AI is doing the grading, students can&#39;t just whip up another AI to spit out the right answers. &lt;i&gt;(For the future, we&#39;re considering adding a feature where Docent can tell if an assignment is easily solvable by an LLM, without having access to the gold answer.)&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Now, developing a comprehensive grading rubric is a bit trickier. It&#39;s hard to guess all the ways students might slip up. In an &quot;AI-less setting,&quot; we usually end up tweaking the rubric a few times over time, based on what we see after the assignment has been run a couple of times.&lt;/p&gt;

&lt;p&gt;How can an LLM make our life easier? Docent is great when it comes to building these rubrics. Since it can handle grading hundreds of assignments at once, we quickly spot the common mistakes by simply asking Docent to grade the assignments and find the mistakes. We look at the identified mistakes, and we add them to the rubric. After adjusting the rubric, we ask Docent for a re-grade, and voila! After a few rounds, we end up with a solid rubric that catches most errors.&lt;/p&gt;

&lt;p&gt;One additional cool thing about this whole process? Docent can summarize feedback from all the submissions and we can create a report on the most common slip-ups. We take this back to the classroom to chat about the tricky parts of the assignment and help everyone learn better.&lt;/p&gt;

&lt;p&gt;It&#39;s like having a super-hard-working assistant who may not know how to grade at the beginning but is always willing and eager to help. It never complains if you ask it to regrade assignments, summarize findings, or provide feedback.&lt;/p&gt;

&lt;p&gt;Use Docent, be lazy, and teach smarter, not harder!&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/6182210352457251570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/6182210352457251570'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2024/09/developing-grading-rubrics-using-docent.html' title='Developing Grading Rubrics using Docent'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-2561629231729769109</id><published>2024-09-05T17:09:00.003-04:00</published><updated>2026-02-21T09:22:24.315-05:00</updated><title type='text'>Grading with AI: Introducing Docent</title><content type='html'>&lt;h3&gt;TL;DR&lt;/h3&gt;

&lt;p&gt;An alpha version of Docent, our experimental AI-powered grading system, is now available at &lt;a href=&quot;https://get-docent.com/&quot;&gt;https://get-docent.com/&lt;/a&gt;. If you&#39;re interested in using the system, please contact us for support.&lt;/p&gt;

&lt;h3&gt;The Challenge of Grading&lt;/h3&gt;

&lt;p&gt;One thing that I find challenging when teaching is grading, especially in large classes with numerous assignments. The task is typically delegated to teaching assistants with varying levels of expertise and enthusiasm. One particular challenge is getting TAs to provide &lt;strong&gt;detailed, constructive feedback&lt;/strong&gt; on assignments.&lt;/p&gt;

&lt;h3&gt;Our Experiment with LLMs&lt;/h3&gt;

&lt;p&gt;With the introduction of LLMs, we began exploring their potential to enhance the grading process. Our primary goal wasn&#39;t to replace human graders but to provide students with detailed, personalized feedback—effectively offering an on-demand tutor and addressing &quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Bloom%27s_2_sigma_problem&quot;&gt;Bloom&#39;s two-sigma problem&lt;/a&gt;&quot;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&quot;The average student tutored one-to-one using mastery learning techniques performed two standard deviations better than students educated in a classroom environment.&quot;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To evaluate the effectiveness of LLMs in grading, we used a dataset of 12,546 student submissions from a Business Analytics course spanning six academic semesters. We used human-assigned grades as our benchmark.&lt;/p&gt;

&lt;h3&gt;Good Quantitative Results&lt;/h3&gt;

&lt;p&gt;Our findings revealed a remarkably low discrepancy between LLM-assigned and human grades. We tested various LLMs using different approaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With and without fine-tuning&lt;/li&gt;
&lt;li&gt;Zero-shot and few-shot learning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While fine-tuning and few-shot approaches showed slight improvements, we were amazed to find that GPT-4 with zero-shot learning &lt;strong&gt;achieved a median error of just 0.6% compared to human grading&lt;/strong&gt;. In practical terms, if a human grader assigned 80/100 to an assignment, the LLM&#39;s grade typically fell within the 79.5-80.5 range—a striking consistency with human grading.&lt;/p&gt;

&lt;h3&gt;Qualitative Feedback: Where AI Shines&lt;/h3&gt;

&lt;p&gt;LLMs excel at providing qualitative feedback. For example, &lt;a href=&quot;https://chatgpt.com/share/029b46a9-c801-4d6d-999d-c082bd9097cb&quot;&gt;in this ChatGPT thread&lt;/a&gt;, you can see the detailed feedback the LLM provided for an SQL question in a database course. Much better and more detailed than whatever any human grader was going to ever provide.&lt;/p&gt;

&lt;h3&gt;Real-World Implementation: Docent&lt;/h3&gt;

&lt;p&gt;Encouraged by these results, we implemented Docent to assist human graders in our Spring and Summer 2024 classes. We also conducted a user study to assess the perceived helpfulness of LLM-generated comments. However, during deployment, we identified several areas for improvement:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Excessive Feedback&lt;/strong&gt;: The LLM often provides too much feedback, striving to find issues even in nearly perfect assignments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Difficulty with Negation&lt;/strong&gt;: Despite clear grading guidelines, LLMs struggle to ignore specified minor shortcomings. See below :-)

&lt;p&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;816&quot; data-original-width=&quot;970&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEghOqm31wY_ShY2JQy1r5MfF0vxzRXlIicg0OlpcAQZzhSGVdzx9ZmNXeQQsUMcmP4DtAXSMt5H01ACe5sToD7UF_bqCbnyxfyAKT3giP3VwwWUolEVIcqVWmrZvCAi-ISXj_rLX9wojxnsM8S5nFbv2ItYYtw-CmsbrMh_pH2JABloU1vlG8nhIzPrjWs&quot; width=&quot;285&quot;/&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Multi-Part Assignment Challenges&lt;/strong&gt;: For assignments with multiple questions, grading each question separately yields better results than assessing the entire assignment at once.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inconsistent Performance&lt;/strong&gt;: While median performance is excellent, about 5-10% of assignments receive imperfect grades (compared to a human), leading to student appeals.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Current Status and Recommendations&lt;/h2&gt;

&lt;p&gt;Based on our experiences, here are our current recommendations for using AI in grading:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Human Supervised Use&lt;/strong&gt;: Grading using LLMs is best used as a tool for teaching assistants, who should review and adjust the AI-generated grades and feedback before releasing them to students.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caution in High-Stakes Scenarios&lt;/strong&gt;: We advise against using AI for high-stakes grading, such as final exams, until we achieve greater robustness across all submissions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ideal for Low-Stakes Assignments&lt;/strong&gt;: LLM-based feedback is well-suited for low-stakes assignments and practice questions, where even imperfect feedback improves the current status quo.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Try Docent&lt;/h2&gt;

&lt;p&gt;To facilitate experimentation with AI-assisted grading, we&#39;ve deployed an alpha version of Docent at &lt;a href=&quot;https://get-docent.com/&quot;&gt;https://get-docent.com/&lt;/a&gt;. If you&#39;re interested in using the system, please contact us for support and guidance.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/2561629231729769109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/2561629231729769109'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2024/09/grading-with-ai-introducing-docent.html' title='Grading with AI: Introducing Docent'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEghOqm31wY_ShY2JQy1r5MfF0vxzRXlIicg0OlpcAQZzhSGVdzx9ZmNXeQQsUMcmP4DtAXSMt5H01ACe5sToD7UF_bqCbnyxfyAKT3giP3VwwWUolEVIcqVWmrZvCAi-ISXj_rLX9wojxnsM8S5nFbv2ItYYtw-CmsbrMh_pH2JABloU1vlG8nhIzPrjWs=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-5077340030545275350</id><published>2024-01-18T15:21:00.004-05:00</published><updated>2026-02-21T09:25:07.063-05:00</updated><title type='text'>The PiP-AUC score for research productivity: A somewhat new metric for paper citations and number of papers</title><content type='html'>&lt;p&gt;Many years back, we &lt;a href=&quot;https://www.behind-the-enemy-lines.com/2018/11/distribution-of-paper-citations-over.html&quot; target=&quot;_blank&quot;&gt;conducted some analysis&lt;/a&gt; on how the number of citations for a paper evolves over time. We noticed that while the raw number of citations tends to be a bit difficult to estimate, if we calculate the percentile of citations for each paper, based on the year of publication, we get a number that &lt;a href=&quot;https://arxiv.org/abs/2103.16025&quot; target=&quot;_blank&quot;&gt;stabilizes very quickly&lt;/a&gt;, even within 3 years of publication. That means we can estimate the future potential of a paper rather quickly by checking how it is doing against other papers of the same age. The percentile score of a paper is a very reliable indicator of its future.&lt;/p&gt;

&lt;p&gt;To make it easy for everyone to check the percentile scores of their papers, we created a small app at&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://scholar.ipeirotis.org/&quot;&gt;https://scholar.ipeirotis.org/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;that allows anyone to search for a Google Scholar profile and then calculate the percentile scores of each paper. We then take all the papers for an author, calculate their percentile scores, and sort them in descending order based on their scores. This generates a plot like this, with the paper percentile on the y-axis and the paper rank on the x-axis.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;img alt=&quot;&quot; data-original-height=&quot;808&quot; data-original-width=&quot;804&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiy2BlC9BfVlKRVI5ogoSPRnSuomBI5XMMWnSPRhAwgqde4DAdJXLTW6pOYkQyz8P_gIElgm92eSGi-NVp2FFuvliE-x8sFlltP9s50ypa-SoqpnmFD7LA9q1GMRDJfdWIquI1XbERlGTbIn7oyBpKWMTak3JDQrd1IxKtoC98kvN5iKdT87yLtiXyog0s&quot; width=&quot;239&quot;/&gt;
&lt;/div&gt;

&lt;p&gt;Then, an obvious next question came up: How can we also normalize the x-axis, which shows the number of papers?&lt;/p&gt;

&lt;p&gt;Older scholars have more years to publish, giving them more chances to write high-percentile papers. To control for that, we also calculated the percentiles for the number of papers published, by using a dataset of around 15,000 faculty members at top US universities. The plot below shows how the percentiles for the number of publications evolve over time.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;img alt=&quot;&quot; data-original-height=&quot;908&quot; data-original-width=&quot;1156&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiyuT3QRzyWSzBaG34vWVB6YXSw4AGBo1EHUDuBWrMDck3dVnsZB_FO0ZpJxWedvtWxt6eoRPtT0DLR80b3HpdIaFR4qL9LmCDC8Jwk4V1hK4SaotG9TMDL382H0J2zZHMSzdwweun26arZAJ-WoKLudzDovwF_2_UdUbvjF7ysGJHgVHWtYegiL0dWa1o&quot; width=&quot;306&quot;/&gt;
&lt;/div&gt;

&lt;p&gt;Now, we can use the percentile scores for the number of papers published to normalize the x-axis as well. Instead of showing the raw number of papers on the x-axis, we normalize paper productivity against the percentile benchmark shown above. The result is a graph like this for the superstar Jure Leskovec:&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;img alt=&quot;&quot; data-original-height=&quot;812&quot; data-original-width=&quot;804&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjcO7NuKjr8wT1WRMFD2k-BQX2DDALQVkxpncuRoA_TSLqs0z76oGr2kH-rb2CpiPKYiXsemBR-K7vjsn8XxXPhf2M_2zJ4N4MofbuKv9DHxEZTBrwzZh4ElEPL-I-6b5b9Geku_lxMrH3khCG9c30VCcF6a54Y4FuBi7EuL-be9oCTecA6v5po-xsV1Ww&quot; width=&quot;238&quot;/&gt;
&lt;/div&gt;

&lt;p&gt;and a less impressive one for yours truly:&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;img alt=&quot;&quot; data-original-height=&quot;812&quot; data-original-width=&quot;812&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjg_3k00YZu7wIZQOSinqJD4WlQv4YaNODVde-9vdLgcIivSyPQoVfDOImkEOwbIrCe3tw07yNz_WlkqXODQQmyTdi0ebXkv0PR7e-ssQePSLl59QhJFj64HQXGiBg9HfsjsqXwzd9mtLN4nKo-TYkpUZt2bytIDndiR0b8vllej-BPRd2YOx10Mqir8Lg&quot; width=&quot;240&quot;/&gt;
&lt;/div&gt;

&lt;p&gt;Now, with a graph like this, with the x and y axes being normalized between 0 and 1, we have a nice new score that we have given the thoroughly boring name &quot;Percentile in Percentile Area Under the Curve&quot; score, or PiP-AUC for short. It is a score that ranges between 0 and 1, and you can play with different names to see their scores.&lt;/p&gt;

&lt;p&gt;&lt;strike&gt;At some point, we may also calculate the percentile scores of the PiP scores, but we will do that in the future. :-)&lt;/strike&gt; UPDATE: If you are also curious about the percentiles for the PiP-AUC scores, here is the distribution:&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;img alt=&quot;&quot; data-original-height=&quot;1306&quot; data-original-width=&quot;1308&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj6VCaQZJxRrmmoxGt8Z3zPeITrQmul73Lgbqb_PmGfuErYW8R51sXp7iQGGx_IhTbQUaquucuW65-mSpo90jHKuw3gNwCZf1JfT-kk78KFHmQjx2XOKLMDqEVreG8ycONkuntiLJac2z37er6isqx9MsfHSE92x9rLtauRZY8h60R9VpRm4mPT0Co9kn0&quot; width=&quot;240&quot;/&gt;
&lt;/div&gt;

&lt;p&gt;The x-axis shows the PiP-AUC score, and the y-axis shows the corresponding percentile. So, if you have a PiP-AUC score of 0.6, you are in the top 25% (i.e., 75% percentile) for that metric. With a score of 0.8, you are in the top 10% (i.e., 90% percentile), etc.&lt;/p&gt;

&lt;p&gt;In general, the tool is helpful when trying to understand the impact of newer work published in the last few years. Especially for people with many highly cited but old papers, the percentile scores are very helpful for quickly finding the newer gems. I also like the PiP-AUC scores and plots, as they offer a good balance of overall productivity and impact. Admittedly, it is a strict score, so it is not especially bragging-worthy most of the time :-)&lt;/p&gt;

&lt;p&gt;&lt;i&gt;(With thanks to Sen Tian and Jack Rao for their work.)&lt;/i&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/5077340030545275350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/5077340030545275350'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2024/01/the-pip-auc-score-for-research.html' title='The PiP-AUC score for research productivity: A somewhat new metric for paper citations and number of papers'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiy2BlC9BfVlKRVI5ogoSPRnSuomBI5XMMWnSPRhAwgqde4DAdJXLTW6pOYkQyz8P_gIElgm92eSGi-NVp2FFuvliE-x8sFlltP9s50ypa-SoqpnmFD7LA9q1GMRDJfdWIquI1XbERlGTbIn7oyBpKWMTak3JDQrd1IxKtoC98kvN5iKdT87yLtiXyog0s=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-4471366048644520266</id><published>2022-10-18T22:53:00.004-04:00</published><updated>2026-02-21T09:24:19.847-05:00</updated><title type='text'> Tell these fucking colonels to get this fucking economist out of jail.</title><content type='html'>&lt;p&gt;Today is October 18th. It is 41 years since Greece voted for Andreas Papandreou with a 48% vote percentage to be elected as prime minister, fundamentally changing the course of history for Greece. Positively or negatively, this is still debated, but the change was real.&lt;/p&gt;

&lt;p&gt;On October 6th, Roy Radner passed away at the age of 95. He was a faculty member at our department and a famous microeconomist with a highly distinguished career. Many others have written about him and his accomplishments as an economist and academic, so I will not try to do the same.&lt;/p&gt;

&lt;p&gt;But Roy also played an important role in making that election in 1981 possible. Why? Let me tell you his story.&lt;/p&gt;

&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;

&lt;p&gt;When I joined Stern in 2004, Roy Radner came to my office, telling me (lovingly) that he dislikes data mining, but I should not take that personally.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;🙂&quot; height=&quot;16&quot; referrerpolicy=&quot;origin-when-cross-origin&quot; src=&quot;https://static.xx.fbcdn.net/images/emoji.php/v9/ta5/1.5/16/1f642.png&quot; style=&quot;border: 0px; text-align: justify;&quot; width=&quot;16&quot;/&gt;&lt;/p&gt;

&lt;p&gt;He also wanted to connect with me, so he shared a story with me. So, he started talking:&lt;/p&gt;

&lt;p&gt;Roy:&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&quot;I had a friend from Greece. But he died a few years back.&quot;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;[...]&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&quot;He hired me for my first job at Berkeley. A great economist and a great department chair. Strong Trotskyist. Back in the day, especially at Berkeley, economists were not afraid to declare their political views.&quot;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;[...]&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&quot;I visited him in Greece, coming from Italy by ferry and then driving a long way down the western part of Greece. He had a nice Polish mother and an American wife. He also had a young son; I loved playing with him.&quot;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;[...]&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&quot;At some point, he left Berkeley and returned to Greece to start a new economics research center after the prime minister invited him.&quot;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;[...]&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;(NB: At this point, I understand he is talking about Andreas Papandreou, and I am starstruck listening to all the first-hand stories about him.)&lt;/p&gt;
&lt;p&gt;&lt;i&gt;[...]&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&quot;Well, when the dictatorship came, they arrested him. And there were rumors that the colonels may execute him.&quot;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&quot;But he was a famous economist, very well-respected. The idea that a fellow academic may be executed, because of his beliefs, in a Western, allied country was unbelievable.&quot;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&quot;So, the unthinkable happened. For the first time in history, 250 economists agreed on something. We wrote a letter demanding that the dictators release Andreas Papandreou immediately.&quot;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&quot;We wrote a letter to the US President, Lyndon Johnson, asking him to intervene and get Andreas Papandreou out of jail.&quot;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&quot;As part of a committee, Kenneth Galbraith, Kenneth Arrow, and I went to the White House to deliver the message. Johnson agrees to see us for five minutes.&quot;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&quot;Panos, you may not be familiar with US Presidents, but Johnson was a rough Texan. He was not known for being gentle and polite, and his language was not exactly… presidential.&quot;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&quot;So, after we talked to Johnson, he rolled his eyes, he picked up the phone, and said:&quot;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&lt;b&gt;&quot;Tell these fucking colonels to get this fucking economist out of jail.&quot;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&lt;b&gt;(and the rest is history)&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;This is how Roy has changed the history of Greece.&lt;/p&gt;

&lt;p&gt;By getting Johnson to tell the fucking colonels to get that fucking economist out of jail. So that the fucking economist can then be a three-times prime minister of Greece and one of the most consequential prime ministers of the modern Greek republic.&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;p&gt;NYTimes: &lt;a href=&quot;https://timesmachine.nytimes.com/timesmachine/1967/05/08/83601370.html?pageNumber=1&amp;fbclid=IwAR30IsWXH8qaWatSYCN4JoGuq5dBcZc41aQj_Sn9_W8KAb3cRXJvAezcCG4&quot; target=&quot;_blank&quot;&gt;Johnson to Appeal to Save Jailed Son of Papandreou&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;NYTimes: &lt;a href=&quot;https://timesmachine.nytimes.com/timesmachine/1967/05/03/107188981.html?pageNumber=43&amp;fbclid=IwAR0SzDUnGfo0-RCa2MILF6u7S7msr9SsQCRBubcqk9OQ-ZsPfJEbqSO8qu4&quot; target=&quot;_blank&quot;&gt;Letters to the Editor of The Times - Andreas Papandreou&lt;/a&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/4471366048644520266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/4471366048644520266'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2022/10/tell-these-fucking-colonels-to-get-this.html' title=' Tell these fucking colonels to get this fucking economist out of jail.'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-6818347905956007046</id><published>2021-11-23T15:22:00.002-05:00</published><updated>2026-02-21T09:27:00.964-05:00</updated><title type='text'>&quot;Geographic Footprint of an Agent&quot; or one of my favorite data science interview questions</title><content type='html'>&lt;p&gt;Last week we wrote in the Compass blog how we &lt;a href=&quot;https://medium.com/compass-true-north/estimating-the-geographic-area-of-agent-18bfd45657c6&quot; target=&quot;_blank&quot;&gt;estimate the geographic footprint of an agent&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At the very core, the technique is simple: Use the addresses of the houses that an agent has bought or sold in the past; get their longitude and latitude; and then apply a 2-dimensional kernel density estimation to find what are the areas where the agent is likely to be active. Doing the kernel density estimation is easy; the fundamentals of our approach are material that you can find in tutorials for applying a KDE. There are two interesting twists that make the approach more interesting:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How can we standardize the &quot;geographic footprint&quot; &lt;b&gt;score&lt;/b&gt; to be interpretable? The density scores that come back from a kernel density application are very hard to interpret. Ideally, we want a score from 0 to 1, with 0 being &quot;completely outside of the area of activity&quot; and 1 being &quot;as important as it gets&quot;. We show how to use a percentile transformation of the likelihood values to create a score that is normalized, interpretable, and very well calibrated.&lt;/li&gt;
&lt;li&gt;What are the metrics for evaluating such a technique? We show how we can use the concept of &quot;recall-efficiency&quot; curves to provide a common way to evaluate the models.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href=&quot;https://medium.com/compass-true-north/estimating-the-geographic-area-of-agent-18bfd45657c6&quot; target=&quot;_blank&quot;&gt;You can read more in the blog post.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Despite its simplicity, this topic ended up being an amazing interview question. I think it is a great question for separating candidates that have a deeper knowledge of data science from those that have only a superficial understanding.&lt;/p&gt;

&lt;p&gt;The typical question during the interview is:&lt;/p&gt;

&lt;blockquote&gt;&quot;You have a property where the owner wants to sell the house. How can you determine if the property is &lt;i&gt;geographically&lt;/i&gt; relevant to a particular agent? For each agent, we know all their past transactions, and we can assume that future behavior is captured well by their past behavior. For all their past transactions, you can get the address, zip code, longitude, and latitude. &lt;i&gt;Do not try, for now, to figure out if the agent is the &lt;b&gt;best&lt;/b&gt; one among many candidate agents; that is a harder problem.&lt;/i&gt; Just figure out if the agent is active in the location where the property lies.&quot;&lt;/blockquote&gt;

&lt;p&gt;I am very surprised by how many people will start on the wrong foot because they will try to actively shoehorn the problem into a binary classification problem: Indicative answers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&quot;I will find all the properties that the agent has &lt;b&gt;not&lt;/b&gt; transacted in the past, and treat them as negatives&quot;.&lt;/li&gt;
&lt;li&gt;&quot;I will keep showing properties to the agent and when they say no, I will mark them as negatives&quot;&lt;/li&gt;
&lt;li&gt;&quot;I will add features like bathrooms, bedrooms, price, and then predict if it is relevant or not&quot;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my experience, once people start like that, they rarely get to a solution that works. The key problem is that they have no &lt;i&gt;&lt;b&gt;easy&lt;/b&gt;&lt;/i&gt; way of evaluating the model they propose.&lt;/p&gt;

&lt;p&gt;So, a typical follow-up question is:&lt;/p&gt;

&lt;blockquote&gt;How would you evaluate your approach?&lt;/blockquote&gt;

&lt;p&gt;This now gets interesting. Common superficial answers are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I would use precision and recall, or AUC.&lt;/li&gt;
&lt;li&gt;I would measure how often agents accept my recommendations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If they recommend precision and recall, I ask how they are going to measure recall (relatively easy, hopefully, the answer is a temporal training/test split), and precision. Precision gets tricky, as there is no &quot;base rate&quot; and there are no clear &quot;negatives&quot;.&lt;/p&gt;

&lt;p&gt;If someone recommends measuring the agent reactions, I acknowledge that this is correct, in principle, but ask them to propose an offline evaluation, so that we can test the approach before releasing it to the agents.&lt;/p&gt;

&lt;p&gt;This is typically the point where the better candidates, even if they veered off track will start to move towards a better solution (not necessarily KDE, it can also be clustering, convex hulls, histograms on zip codes as vector representations, etc), while the one-trick ponies will reveal their lack of substance.&lt;/p&gt;

&lt;p&gt;Kind of sorry that I have to retire this question from my question bank. Still impressed that such a simple question had such a strong discriminatory power.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/6818347905956007046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/6818347905956007046'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2021/11/geographic-footprint-of-agent-or-one-of.html' title='&quot;Geographic Footprint of an Agent&quot; or one of my favorite data science interview questions'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-7338868987949503414</id><published>2019-11-18T16:27:00.006-05:00</published><updated>2026-02-21T09:27:46.260-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mechanical turk"/><title type='text'>Mechanical Turk, 97 cents per hour, and common reporting biases</title><content type='html'>&lt;p&gt;The New York Times has an article about Mechanical Turk in today&#39;s print edition: &quot;&lt;a href=&quot;https://www.nytimes.com/interactive/2019/11/15/nyregion/amazon-mechanical-turk.html&quot;&gt;I Found Work on an Amazon Website. I Made 97 Cents an Hour&lt;/a&gt;&quot;. (You will find a couple of quotes from yours truly).&lt;/p&gt;

&lt;p&gt;The content of the article follows the current zeitgeist: Tech companies exploiting gig workers.&lt;/p&gt;

&lt;p&gt;While it is hard to argue that there are tasks on MTurk that are really bad, I think that the article paints an unfairly gloomy picture of the overall platform.&lt;/p&gt;

&lt;p&gt;Here are a few of the issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Availability and survivorship bias.&lt;/b&gt; While the article does describe accurately the cesspool of low-paying tasks that are available on Mechanical Turk, it fails to convey the fact that these tasks are available on the platform &lt;i&gt;&lt;b&gt;because nobody wants to work on them&lt;/b&gt;&lt;/i&gt;. The tasks that are easily available for everyone are the ones for which nobody competes to grab: low-paying, badly designed tasks.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The activity levels of workers follow a power-law&lt;/b&gt;. We have plenty of evidence that a significant part of the work on MTurk is done by a small minority of workers. While it is hard to have a truly accurate measurement of what percent of the workers do what percent of the tasks, &lt;a href=&quot;https://en.wikipedia.org/wiki/1%25_rule_(Internet_culture)&quot;&gt;the 1% rule&lt;/a&gt; is a good approximation. For example, in my demographic surveys, where I explicitly limit the participation to only once per month, 50% of the responses come from 5% of the participants. Expect the bias to be much stronger in other, more desirable tasks. Such a heavily biased propensity to participate introduces strong sampling problems when trying to find the right set of workers to interview.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Doing piecemeal work while untrained results in low pay&lt;/b&gt;. This is a pet peeve of mine, for all the articles of the type &quot;I tried working on MTurk / driving Uber / delivering packages / etc / and I got a lousy pay&quot;. Well, if you work piecemeal on &lt;b&gt;&lt;i&gt;any&lt;/i&gt;&lt;/b&gt; task, the tasks will take a very long time initially, and the hourly wage will suck. This will hold for Turking, coding, lawyering, or anything else. If someone decides to become a freelance journalist, the first few articles will result in abysmally bad hourly wages as well; expert freelance writers often charge 10x the rates that beginner freelancer writers charge, if not more. I am 100% confident that the same applies to MTurk workers as well: &lt;b&gt;&lt;i&gt;Experienced workers make 10x what beginners make.&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Having said that, I do agree that Amazon could prohibit tasks that are obviously paying very little (as a rule of thumb, it is impossible to get paid more than minimum wage when the HIT is paying less than 5c/task). But I also think that regular workers are smart enough to know that and avoid such tasks.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/7338868987949503414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/7338868987949503414'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2019/11/mechanical-turk-97-cents-per-hour-and.html' title='Mechanical Turk, 97 cents per hour, and common reporting biases'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-460454432910367367</id><published>2018-11-16T13:32:00.002-05:00</published><updated>2026-02-21T09:24:37.128-05:00</updated><title type='text'>Distribution of paper citations over time</title><content type='html'>&lt;p&gt;A few weeks ago we had a discussion about citations, and how we can compare the citation impact of papers that were published in different years. Obviously, older papers have an advantage as they have more time to accumulate citations.&lt;/p&gt;

&lt;p&gt;To compare papers, just for fun, we ended up opening the profile page of each paper in Google Scholar, and we analyzed the paper citations years by year to find the &quot;winner.&quot; (They were both great papers, by great authors, fyi. It was more of a &quot;Lebron vs. Jordan&quot; discussion, as opposed to anything serious.)&lt;/p&gt;

&lt;p&gt;This process got me curious though. Can we tell how a paper is doing at any given point in time? How can we compare a 2-year-old article, published in 2016, with 100 citations against a 10-year-old document, published in 2008, with 500 citations?&lt;/p&gt;

&lt;p&gt;To settle the question, we started with the profiles of faculty members in the top-10 US universities and downloaded about 1.5M publications, across all fields, and their citation histories over time.&lt;/p&gt;

&lt;p&gt;We then analyzed the citation histories of these publications, and, for each year, we ranked the papers based on the number of citations received over time. Finally, we computed the citation numbers corresponding to different percentiles of performance.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Cumulative percentiles&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;The plot below shows the number of citations that a paper needs to have at different stages to be placed in a given percentile.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; data-original-height=&quot;800&quot; data-original-width=&quot;1600&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieNZ9OnfTGH6iayyv92b7V3B0yfSBP323qB-_gA1vtRRzvydwahPCGs9YqxLE4TbO5XaX-4qChkuOtXa7mjVwXulLrMaTi_qsIuI4IvHoY5wAnN_4WQ1xqPfJRm_g6N1Dxt70poaYJmN8/s640/cummulative-citations.png&quot; width=&quot;640&quot;/&gt;&lt;/div&gt;

&lt;p&gt;A few data points, focusing on certain age milestones: 5-years after publication, 10-years after publication, and lifetime.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;50% line:&lt;/b&gt; The performance of a &quot;median&quot; paper. The median paper gets around 20 citations 5 years after publication, 50 citations within 10 years, and around 100 citations in its lifetime. &lt;b&gt;&lt;i&gt;Milestone scores: 20,50,90&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;75% line:&lt;/b&gt; These papers perform &quot;better,&quot; citation-wise than 75% of the remaining papers with the same age. Such papers get around 50 citations within 5 years, 100 citations within 10 years of publication, and around 200 citations in their lifetime. &lt;b&gt;&lt;i&gt;Milestone scores: 50,100,200&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;90% line:&lt;/b&gt; These papers perform better than 90% of the papers in their cohort. Around 90 citations within 5 years, 200 citations within 10 years, and 500 citations in their lifetime. &lt;b&gt;&lt;i&gt;Milestone scores: 90,200,500&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Yearly percentiles and peak years&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We also wanted to check at which point papers reach their peak, and start collecting fewer citations. The plot below shows the percentiles based on the yearly number of accumulated citations. The vast majority of papers tend to reach their peak 5-10 years after publication; the number of yearly citations starts declining after 5-10 years.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; data-original-height=&quot;800&quot; data-original-width=&quot;1600&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt_fDOV9b7Vn-fN6FUHwYGc3HxLu47YFu_qrzS6FDq0NQn5VfijcIZbinB9uoy6IgXYkaM8a4oMcuWNvtUEiBIQSjSTd6kwW4iRmxTlPR8O0BvM2nUInSPZcEEHUDtofXCAifOEZIBBo/s640/yearly-citations.png&quot; width=&quot;640&quot;/&gt;&lt;/div&gt;

&lt;p&gt;Below is the plot of the peak year for a paper based on the paper percentile:&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; data-original-height=&quot;338&quot; data-original-width=&quot;631&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilL3XfeLMMSsmDek5ZEChyphenhyphenOq93hWv1aFXP2hf5T8eruq72IuzVoZ9EucMWDM84wOCqbD9-8N9-nLFP-4MaEhQLlH_Be14HmMp1ElTgEcf293vcVWCUJnuMss85JjAaMBe3PtgsxH630pA/s400/best-year.png&quot; width=&quot;400&quot;/&gt;&lt;/div&gt;

&lt;p&gt;There is an interesting effect around the 97.5% percentile: After that level, it seems that a &#39;rich-gets-richer&#39; effect kicks in, and we effectively do not observe a peak year. The number of &lt;b&gt;&lt;i&gt;citations per year&lt;/i&gt;&lt;/b&gt; keeps increasing. You could call these papers the &quot;classics&quot;.&lt;/p&gt;

&lt;p&gt;What does it take to be a &quot;classic&quot;? 200 citations at 5 years or 500 citations at 10 years.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/460454432910367367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/460454432910367367'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2018/11/distribution-of-paper-citations-over.html' title='Distribution of paper citations over time'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieNZ9OnfTGH6iayyv92b7V3B0yfSBP323qB-_gA1vtRRzvydwahPCGs9YqxLE4TbO5XaX-4qChkuOtXa7mjVwXulLrMaTi_qsIuI4IvHoY5wAnN_4WQ1xqPfJRm_g6N1Dxt70poaYJmN8/s72-c/cummulative-citations.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-8639672444443797391</id><published>2018-01-29T09:53:00.004-05:00</published><updated>2026-02-21T09:29:42.816-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mechanical turk"/><title type='text'>How many Mechanical Turk workers are there?</title><content type='html'>&lt;p&gt;&lt;i&gt;TL;DR: There are about 100K-200K unique workers on Amazon Mechanical Turk. On average, there are 2K-5K workers active on Amazon at any given time, which is equivalent to having 10K-25K full-time employees. On average, 50% of the worker population changes within 12-18 months. Workers exhibit widely different patterns of activity, with most workers being active only occasionally, and few workers being very active. Combining our results with the results from &lt;a href=&quot;https://arxiv.org/abs/1712.05796&quot;&gt;Hara et al&lt;/a&gt;, we see that MTurk has a yearly transaction volume of a few hundreds of millions of dollars.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;For more details read below, or take a look &lt;a href=&quot;http://www.ipeirotis.com/?publication=demographics-and-dynamics-of-mechanical-turk-workers&quot;&gt;at our WSDM 2018 paper&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;--&lt;/div&gt;

&lt;p&gt;&lt;b&gt;Question&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;A topic that frequently comes up when discussing Mechanical Turk is &quot;how many workers are there on the platform&quot;?&lt;/p&gt;

&lt;p&gt;In general, this is a question that is very easy for Amazon to answer, but much harder for outsiders. Amazon claims that there are 500,000 workers on the platform. How can we check the validity of this statement?&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;--&lt;/div&gt;

&lt;p&gt;&lt;b&gt;Basic capture-recapture model&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;A common technique for this problem is the &lt;b&gt;capture-recapture&lt;/b&gt; technique, that is widely used in the field of ecology, to measure the population of a species.&lt;/p&gt;

&lt;p&gt;The simplest possible technique is the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Capture/marking&lt;/b&gt; phase: Capture \(n_1\) animals, mark them, and release them back.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Recapture&lt;/b&gt; phase: A few days later, capture \(n_2\) animals. Assuming there are \(N\) animals overall, \(n_1/N\) of them are marked. So, for each of the \(n_2\) captured animals, the probability that the animal is marked is \(n_1/N\) (from the capture/marking phase).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Calculation&lt;/b&gt;: On expectation, we expect to see \(n_2 \cdot \frac{n_1}{N}\) marked animals in the recapture phase. (Notice that we do not know \(N\).) So, if we actually see \(m\) marked animals during the recapture phase, we set \(m = n_2 \cdot \frac{n_1}{N}\) and we get the estimate that:&lt;div style=&quot;text-align: center;&quot;&gt;\(N = \frac{n_1 \cdot n_2}{m}\).&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In our setting we adapted the same idea, where &quot;capture&quot; and &quot;recapture&quot; correspond to participating in a demographics survey. In other words, we &quot;capture/mark&quot; MTurk users that complete the survey in one day. Then, in another day, we also &quot;recapture&quot; by surveying more workers and we see how many workers overlap in the two surveys.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;--&lt;/div&gt;

&lt;p&gt;&lt;b&gt;First (naive) attempt&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We decided to apply this technique to estimate the size of the Mechanical Turk population. We considered as &quot;capture&quot; period the set of surveys running over a period of 30 days. Then we considered as &quot;recapture&quot; period, the surveys that we ran on another 30-day period. The plot below shows the results.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1017&quot; data-original-width=&quot;1580&quot; height=&quot;410&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0m23rFIOGqrEIgS6hdLVNX1U3UwZMHqFENXLcOFwdc5uaGepy8VJdFEvKThI2GmvJjVUe-z6F0yaJeDUpAxRT-oJdI7nWuNZsEljvwDdaR8ZnCNvZJuuATZeb9AfPZt1DtN9E_Og-YQc/s640/population+estimates.PNG&quot; width=&quot;640&quot;/&gt;&lt;/div&gt;

&lt;p&gt;The x-axis shows the beginning of the recapture period, and the y-axis the estimate of the number of workers. The color of each dot corresponds to the difference in time between the capture-recapture periods: black is a short time, and red is a long time.&lt;/p&gt;

&lt;p&gt;If we focus on the black-color dots (~60 days between the surveys), we get a (naive) estimate of around 10K-15K workers. &lt;i&gt;(Warning: this is incorrect.)&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;While we could stop here, we see some results that are not consistent with our model. Remember, that color encodes time between samples: black is for short time (~2 months) between samples, red is for long time (~2yrs) between samples. Notice that, as the time between the two periods increases, the estimates are becoming higher, and we get the &quot;rainbow cake&quot; effect in the plot. For example, for July 2017, our estimate is 12K workers if we compare with a capture from May 2017, but the estimate goes up to 45K workers if we compare with a sample from May 2015. Our model, though, says that the time between captures should &lt;b&gt;&lt;i&gt;not&lt;/i&gt;&lt;/b&gt; affect the population estimates. This indicates that there is something wrong with the model.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;--&lt;/div&gt;

&lt;p&gt;&lt;b&gt;Assumptions of basic model&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;The basic capture-recapture estimation described above relies on a couple of assumptions. Both of these assumptions are violated when applying this technique to an online environment.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Assumption of no arrivals / departures (&quot;closed population&quot;)&lt;/b&gt;: The vanilla capture-recapture scheme assumes that there are no arrivals or departures of workers between the capture and recapture phase.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Assumption of no selection bias (&quot;equal catchability&quot;)&lt;/b&gt;: The vanilla capture-recapture scheme assumes that every worker in the population is equally likely to be captured.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In ecology, the issue of closed population has been examined under many different settings (birth-death of animals, immigration, spatial patterns of movement, etc.) and there are many research papers on the topic. Catchability, by comparison, has received &lt;i&gt;comparatively&lt;/i&gt; less attention. This is reasonable, as in ecology the assumption of closed population is problematic in many settings. By comparison, assuming that the probability of capturing an animal is uniform among similar animals is reasonable. Typically the focus is on segmenting the animals into groups (e.g., nesting females vs hunting males) and assign different catchability heterogeneity to groups (but not to individuals).&lt;/p&gt;

&lt;p&gt;In online settings though, the assumption of equal catchability is more problematic. First we have the &lt;b&gt;activity bias&lt;/b&gt;: Workers exhibit very different levels of activity: A worker who works every day is much more likely to see and complete a task, compared to someone who works once a month. Similarly, we have a &lt;b&gt;selection bias&lt;/b&gt;: Some workers may like to complete surveys, while others may avoid such tasks.&lt;/p&gt;

&lt;p&gt;So, to improve our estimates, we need to use models that alleviate these assumptions.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;--&lt;/div&gt;

&lt;p&gt;&lt;b&gt;Endowing workers with survival probabilities&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We can extend the model, allowing each worker to have a certain survival probability, to allow workers to &quot;disappear&quot; from the platform. If we see the plot above, we can see that the population estimate increases as the time between two samples increases. This hints that workers leave the platform, and the intersection of capture-recapture becomes smaller over time.&lt;/p&gt;

&lt;p&gt;If we account for that, we can get an estimate that the &quot;half-life&quot; of a Mechanical Turk worker is between 12-18 months. &lt;b&gt;In other words, approximately 50% of the Mechanical Turk population changes every 12-18 months.&lt;/b&gt;&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;--&lt;/div&gt;

&lt;p&gt;&lt;b&gt;Endowing workers with propensity to participate&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We can also extend the model by associating a certain &lt;i&gt;propensity&lt;/i&gt; for each worker. The propensity is the probability that a worker is active and willing to participate in a task, at any given time.&lt;/p&gt;

&lt;p&gt;In our work, we assumed that the underlying &quot;propensity to participate&quot; follows a Beta distribution across the worker population, and the parameters of the Beta distribution are unknown. When we assume that follow a Beta distribution, then the probability that a worker participates in the survey k times, follows a &lt;a href=&quot;https://en.wikipedia.org/wiki/Beta-binomial_distribution&quot;&gt;Beta Binomial distribution&lt;/a&gt;. Since we know how many workers participated k times in our surveys, it is then easy to estimate the underlying parameters of the Beta distribution.&lt;/p&gt;

&lt;p&gt;Notice that we had to depart from the simple &quot;two occasion&quot; model above, and instead use multiple capturing periods over time. Intuitively, workers that have high propensity to participate will appear many times in our results, while inactive workers will appear only a few times.&lt;/p&gt;

&lt;p&gt;By doing this analysis, we can observe that (as expected) the distribution of activity is highly skewed: A few workers are very active in the platform, while others are largely inactive. A nice property of the Beta distribution is its flexibility: Its shape can be pretty much anything: uniform, Gaussian-like, bimodal, heavy-tailed... you name it.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;521&quot; data-original-width=&quot;978&quot; height=&quot;340&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO6aQ7E-A8quBKIufXusElm8gEfEfNS7NdZsD16BkRPLxe3BICrIpTvybtkUUA30_MzU9TmD9nVRVTshMU2RLCJ0URFRm-OIQuitZ378_svgVlhlgDQFVjOTgwzddJ-F2GbaT_8MsbP8w/s640/beta-histogram.png&quot; width=&quot;640&quot;/&gt;&lt;/div&gt;

&lt;p&gt;In our analysis, we estimated that the propensity distribution follows a Beta(0.3,20) distribution. We plot above the &quot;inverse CDF&quot; of the distribution (Inverse CDF: &quot;what percentage of the workers have propensity higher than x&quot;).&lt;/p&gt;

&lt;p&gt;As you can see, the propensity follows a familiar (and expected) pattern. Only 0.1% of the workers have propensity higher than 0.2, and only 10% have propensity higher than 0.05.&lt;/p&gt;

&lt;p&gt;Intuitively, a propensity of 0.2 means that the worker is active and willing to participate 20% of their time (this is roughly equivalent to full-time level of activity; full-time employees work around 2000 hrs per year, out of 24*365 available hours in a year). A propensity of 0.05 means that the worker is active and available approximately 24 hr * 0.05 ~ 1 hour per day.&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;--&lt;/div&gt;

&lt;p&gt;&lt;b&gt;How big is the platform?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;So, how many workers are there? Under such highly skewed distributions, giving an exact number for the number of workers is rather futile. The best that you can do is give a ballpark estimate, and hope to be roughly correct on the order of magnitude. What our estimates are showing is that &lt;b&gt;there are around 180K distinct workers in the MTurk platform&lt;/b&gt;. This is good news for anyone who is trying to reach a large number of distinct workers through the platform.&lt;/p&gt;

&lt;p&gt;Our analysis also allows us to estimate how many workers are active and willing to participate in our task at any given time. For that, we estimate that around &lt;b&gt;2K to 5K workers are available, at any given time&lt;/b&gt;. If we want to convert this number to full-time employee equivalence, this is equivalent to 10K-25K full-time workers.&lt;/p&gt;

&lt;p&gt;The latter part also allows us to give some low and high estimates on the transaction volume of MTurk.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Lower bound&lt;/b&gt;: Assuming 2K workers active at any given time, this is 2000*24*365=17,520,000 work hours in a year. If we assume that &lt;a href=&quot;https://arxiv.org/abs/1712.05796&quot;&gt;the median wage is $2/hr&lt;/a&gt;, this is roughly &lt;b&gt;$35M/yr&lt;/b&gt; transaction volume on Amazon Mechanical Turk (with Amazon netting ~$7M in fees).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Upper bound&lt;/b&gt;: Assuming 5K workers active at any given time, this is 5000*24*365=43,800,000 work hours in a year. If we assume an average wage of $12/hr, this is around &lt;b&gt;$525M/yr&lt;/b&gt; transaction volume (with Amazon netting ~$100M in fees).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I understand that a range of $35M to $500M may not be very helpful, but these are very rough estimates. If someone wanted my own educated guess, I would put it somewhere in the middle of the two, i.e., transaction volume of a few hundreds of millions of dollars.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/8639672444443797391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/8639672444443797391'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2018/01/how-many-mechanical-turk-workers-are.html' title='How many Mechanical Turk workers are there?'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0m23rFIOGqrEIgS6hdLVNX1U3UwZMHqFENXLcOFwdc5uaGepy8VJdFEvKThI2GmvJjVUe-z6F0yaJeDUpAxRT-oJdI7nWuNZsEljvwDdaR8ZnCNvZJuuATZeb9AfPZt1DtN9E_Og-YQc/s72-c/population+estimates.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-8406874034751453347</id><published>2017-01-17T11:42:00.000-05:00</published><updated>2017-01-17T16:08:41.997-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="crowdsourcing"/><category scheme="http://www.blogger.com/atom/ns#" term="kyc"/><category scheme="http://www.blogger.com/atom/ns#" term="mechanical turk"/><category scheme="http://www.blogger.com/atom/ns#" term="online markets"/><category scheme="http://www.blogger.com/atom/ns#" term="regulations"/><title type='text'>Why was my Amazon Mechanical Turk registration denied?</title><content type='html'>(&lt;a href=&quot;https://www.quora.com/Why-was-my-Amazon-Mechanical-Turk-registration-denied/answer/Panos-Ipeirotis?srid=wO&quot;&gt;This is my answer to a question posted on Quora&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
Mechanical Turk is a platform for work. Workers get paid, which makes now Amazon a payment processor. Payment processors are moving money on behalf of other people, and therefore are under heavy scrutiny from the US government for issues related to money laundering (AML), counter-terrorism, tax compliance, etc.&lt;br /&gt;
&lt;br /&gt;
One of the key things that is required from financial institutions is to have a &lt;a href=&quot;https://en.wikipedia.org/wiki/Customer_Identification_Program&quot;&gt;“Customer Identification Program” (CIP),&lt;/a&gt; also known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Know_your_customer&quot;&gt;“Know Your Customer” (KYC) &lt;/a&gt;process. The CIP/KYC is a set of procedures that the financial institution needs to follow to establish that they know the true identity of a customer. The processes that each financial institutions follows vary, and the exact processes are rarely available to the public, as they are considered security measures. Furthermore, the practices are regularly monitored by regulators (OCC, Fed, FinCEN, etc) and change over time to follow best practices.&lt;br /&gt;
&lt;br /&gt;
In your particular case, the most likely reason is that Amazon was not able to verify your identity.&lt;br /&gt;
&lt;br /&gt;
If you are in the US, Amazon most probably can get your SSN and other personal details and verify whether you are a real person. However, even if you live in the US, if you have no credit history, no bank accounts, and so on, the verification will come back with low confidence. Following standard risk management processes, Amazon could plausibly reject such applications, as part of their CIP processes: it is better to have a false negative (rejecting a normal account) than having a false positive (e.g., accepting an account that will be involved in money laundering or tax-evasion schemes).&lt;br /&gt;
&lt;br /&gt;
For other countries, the ability of Amazon, to follow CIP/KYC processes that conform to the US regulations, varies. I assume, for example, that the cooperation of US with UK or Australian authorities is much smoother compared to, say, Chinese authorities. So, if you live outside the US, the probability of having your account approved depends on how robust is the ability of Amazon to verify individual identities in your country.&lt;br /&gt;
&lt;br /&gt;
Given that Amazon gets paid by requesters, I assume their focus is to establish CIP processes first in regions where potential requesters reside, which is not always the place where workers reside. This also means that you are more likely to be approved if you first register as a requester (assuming this is an option for you), and then try to create the worker account.&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/8406874034751453347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/8406874034751453347'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2017/01/why-was-my-amazon-mechanical-turk.html' title='Why was my Amazon Mechanical Turk registration denied?'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-9213085377694178361</id><published>2016-03-13T14:10:00.004-04:00</published><updated>2026-02-20T21:14:17.370-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="crowdsourcing"/><category scheme="http://www.blogger.com/atom/ns#" term="mechanical turk"/><title type='text'>AlphaGo, Beat the Machine, and the Unknown Unknowns</title><content type='html'>&lt;p&gt;In Game 4, of the 5-game series between AlphaGo and Lee Sedol, the human Go champion, Lee Sedol &lt;a href=&quot;http://www.nytimes.com/aponline/2016/03/13/world/asia/ap-as-skorea-game-human-vs-computer.html&quot;&gt;managed to get his first win&lt;/a&gt;. According to the NY Times article:&lt;/p&gt;

&lt;blockquote&gt;
Lee had said earlier in the series, which began last week, that he was unable to beat AlphaGo because he could not find any weaknesses in the software&#39;s strategy. But after Sunday&#39;s match, the 33-year-old South Korean Go grandmaster, who has won 18 international championships, said he found two weaknesses in the artificial intelligence program. &lt;strong&gt;Lee said that when he made an unexpected move, AlphaGo responded with a move as if the program had a bug, indicating that the machine lacked the ability to deal with surprises.&lt;/strong&gt;
&lt;/blockquote&gt;

&lt;hr width=&quot;50%&quot;&gt;

&lt;p&gt;This part reminded me of one of my favorite papers: &lt;strong&gt;&lt;a href=&quot;http://www.ipeirotis.com/?publication=beat-the-machine-challenging-humans-to-find-a-predictive-models-unknown-unknowns&quot;&gt;Beat the Machine: Challenging Humans to Find a Predictive Model&#39;s &quot;Unknown Unknowns&quot;&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the paper, we tried to use humans to &quot;beat the machine&quot; and identify vulnerabilities in a machine learning system. The key idea was to reward humans whenever they identify cases where the machine fails, while also being confident that it provides the correct answer. In other words, we encouraged humans to find &quot;unexpected&quot; errors, not just cases where naturally the machine was going to be uncertain.&lt;/p&gt;

&lt;hr width=&quot;50%&quot;&gt;

&lt;p&gt;As an example case, consider a system that detects adult content on the web. Our baseline machine learning system had an accuracy of ~99%. Then, we asked Mechanical Turk workers to do the following task: Find web pages with adult content that the machine learning system classifies as non-adult with high confidence. The humans had no information about the system, and the only thing they could do was to submit a URL and get back an answer.&lt;/p&gt;

&lt;p&gt;The reward structure was the following: Humans get $1 for each URL that the machine misses, otherwise they get $0.001. In other words, we provided a strong incentive to find problematic cases.&lt;/p&gt;

&lt;p&gt;After some probing, humans were quick to uncover underlying vulnerabilities: For example, adult pages in Japanese, Arabic, etc., were classified by our system as non-adult, despite their obvious adult content. Similarly for other categories, such as hate speech, violence, etc. &lt;strong&gt;Humans were quickly able to &quot;beat the machine&quot; and identify the &quot;unknown unknowns&quot;.&lt;/strong&gt;&lt;/p&gt;

&lt;hr width=&quot;50%&quot;&gt;

&lt;p&gt;Simply told, humans were able to figure out what were the likely cases that the system may have missed during training. At the end of the day, the training data is provided by humans, and no system has access to all possible training data. We operate in an &quot;open world&quot; while training data implicitly assume a &quot;closed world&quot;.&lt;/p&gt;

&lt;p&gt;As we see from the AlphaGo example, since most machine learning systems rely on existence of training data (or some immediate feedback for their actions), machines may get into problems when they have to face examples that are unlike any examples they have processed in their training data.&lt;/p&gt;

&lt;p&gt;We designed our Beat The Machine system to encourage humans to discover such vulnerabilities early.&lt;/p&gt;

&lt;p&gt;In a sense, our BTM system is like hiring hackers to break into your network, to identify security vulnerabilities before they become a real problem. The BTM system applies this principle for machine learning systems, encouraging a period of intense probing for vulnerabilities, before deploying the system in practice.&lt;/p&gt;

&lt;p&gt;Well, perhaps Google hired Lee Sedol with the same idea: Get the human to identify cases where the machine will fail, and reward the human for doing so. Only in that case, AlphaGo managed to eat its cake (figure out a vulnerability) and have it too (beat Lee Sedol, and not pay the $1M prize) :-)&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/9213085377694178361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/9213085377694178361'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2016/03/beat-machine.html' title='AlphaGo, Beat the Machine, and the Unknown Unknowns'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-1956540616207900176</id><published>2016-02-29T10:33:00.003-05:00</published><updated>2026-02-21T09:20:09.222-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="crowdsourcing"/><category scheme="http://www.blogger.com/atom/ns#" term="mechanical turk"/><title type='text'>A Cohort Analysis of Mechanical Turk Requesters</title><content type='html'>&lt;p&gt;In my last post, I examined the number of &quot;active requesters&quot; on Mechanical Turk, and concluded that there is a significant decline in the numbers over the last year. The definition of &quot;active requester&quot; was: &quot;&lt;i&gt;A requester is active at time X if they have a HIT running at time X&lt;/i&gt;&quot;. A potential issue with this definition is that an improvement in the speed of HIT completion (e.g., due to increased labor supply) could drive down that number.&lt;/p&gt;

&lt;p&gt;For this reason, I decided to perform a proper &lt;a href=&quot;https://en.wikipedia.org/wiki/Cohort_analysis&quot;&gt;cohort analysis&lt;/a&gt; for the requesters on Mechanical Turk. In the cohort analysis that follows, we will examine how many requesters that have first appeared in the platform on a given month (say September 2015), are still posting tasks in the subsequent months.&lt;/p&gt;

&lt;p&gt;Here is the resulting &quot;layer cake plot&quot; that indicates what happens in each cohort. Each of the layers corresponds to requesters that were first seen on a given month. (&lt;a href=&quot;https://gist.github.com/ipeirotis/ce26e0e76a5192f89c2e&quot;&gt;code&lt;/a&gt;, &lt;a href=&quot;https://gist.github.com/ipeirotis/6af638e971537b0f9524&quot;&gt;data&lt;/a&gt;) &lt;span style=&quot;font-size: x-small;&quot;&gt;(&lt;a href=&quot;http://tomblomfield.com/post/81105143223/customer-churn-can-kill-your-startup&quot;&gt;Read this post, if you want a little bit more background on how the plot should &quot;look like&quot;.&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;

&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1Sca6QiHNYwXgPbRSR_QD-9-XhW8yjQgcRPwf_vEfiU8wniLNyFemUJOMcT-m6ooVwC4rSQOmhmc7uiuYQv1jaOpRnZwF53NF1tF5LSajDChvqLp4coiK1HRMmsvlxP3RhU3BkyAvfiA/s1600/mturk-cohort-analysis.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;390&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1Sca6QiHNYwXgPbRSR_QD-9-XhW8yjQgcRPwf_vEfiU8wniLNyFemUJOMcT-m6ooVwC4rSQOmhmc7uiuYQv1jaOpRnZwF53NF1tF5LSajDChvqLp4coiK1HRMmsvlxP3RhU3BkyAvfiA/s640/mturk-cohort-analysis.png&quot; width=&quot;640&quot;/&gt;&lt;/a&gt;

&lt;p&gt;For example, the bottom layer corresponds to all the requesters that were first seen on May 2014 (the first month that the new version of MTurk Tracker started collecting data). We can see that we had ~2700 &quot;new&quot; requesters on that month. (The May-2014 cohort obviously contains all prior cohorts in our dataset, as we do not know when these requesters really started posting.) Out of these requesters, approximately 1700 also posted a task on June 2014 or later, approximately 1000 of these have posted a task on March 2015 or later, and approximately 500 have posted a task on February 2016.&lt;/p&gt;

&lt;p&gt;The layer on top (slightly darker blue) illustrates the evolution of the June 2014 cohort. By stacking them on top of each other, we can see the composition of the requesters that have been active in every single month.&lt;/p&gt;

&lt;p&gt;As the plot makes obvious, until March 2015, the acquisition of new requesters every month was compensating for the requesters that were lost from the prior cohorts. However, starting March 2015, we start seeing a decline in the overall numbers, as the total decline in requesters from prior cohorts dominates the acquisition of new requesters. So, the cohort analysis supports the conclusions of the prior post, as the trends and conclusions are very similar (always good to have a few robustness checks).&lt;/p&gt;

&lt;p&gt;Of course, a more comprehensive cohort analysis would also analyze the revenue generated by each cohort, and not just the number of active users. That requires a little bit more digging in the data, but I will do that in a subsequent post.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/1956540616207900176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/1956540616207900176'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2016/02/a-cohort-analysis-of-mechanical-turk.html' title='A Cohort Analysis of Mechanical Turk Requesters'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1Sca6QiHNYwXgPbRSR_QD-9-XhW8yjQgcRPwf_vEfiU8wniLNyFemUJOMcT-m6ooVwC4rSQOmhmc7uiuYQv1jaOpRnZwF53NF1tF5LSajDChvqLp4coiK1HRMmsvlxP3RhU3BkyAvfiA/s72-c/mturk-cohort-analysis.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-3987774592514572537</id><published>2016-02-26T23:31:00.003-05:00</published><updated>2026-02-21T09:23:54.145-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="crowdsourcing"/><category scheme="http://www.blogger.com/atom/ns#" term="mechanical turk"/><title type='text'>The Decline of Amazon Mechanical Turk</title><content type='html'>&lt;p&gt;It seems that after years of neglect, Mechanical Turk is starting to lose its appeal. In our latest measurement, we see Mechanical Turk losing 50% of its requesters in a YoY measurement.&lt;/p&gt;

&lt;p&gt;A few days ago, Kristy Milland (aka SpamGirl) asked me if there is a way to see the active requesters on Mechanical Turk over time. I did not have this dashboard on Mechanical Turk tracker, but it was an important metric, so I decided to add it to the MTurk Tracker website.&lt;/p&gt;

&lt;p&gt;So, now MTurk Tracker has a tab called &quot;&lt;a href=&quot;http://www.mturk-tracker.com/#/activerequesters&quot;&gt;Active Requesters&lt;/a&gt;&quot; which shows how many requesters are &quot;active&quot; on Mechanical Turk at any given time. The definition of &quot;Active at time X&quot; means &quot;had a task that was running on MTurk before time X and after time X&quot;.&lt;/p&gt;

&lt;p&gt;Here is the chart for the active requesters between Jan 1, 2015 and February 28, 2016:&lt;/p&gt;

&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkU9t7DoEl3oJrwQkmuiFvIVxj3W-76NGpJyCxvWHLVLDWAWgejNy6XImMtF4GnLJCEg96gxk5iiM3AwuGZ9s2fTQrfvRNPD_xkYAHMRmRWDkKoWWb3Gf_ZiQ_lQkhwN5ZwWB228TzgMI/s1600/mturk-active-requesters.PNG&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkU9t7DoEl3oJrwQkmuiFvIVxj3W-76NGpJyCxvWHLVLDWAWgejNy6XImMtF4GnLJCEg96gxk5iiM3AwuGZ9s2fTQrfvRNPD_xkYAHMRmRWDkKoWWb3Gf_ZiQ_lQkhwN5ZwWB228TzgMI/s640/mturk-active-requesters.PNG&quot; width=&quot;640&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;As you can see, starting March 2016 (that is before the announcement of price increases), we see a decline in the number of active requesters. Interestingly, when the fee increases are announced, we see a small &quot;valley&quot; around the period of fee increases. The numbers remain stable until November, but after that we see a steady decline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overall, we observe a YoY decline of almost 50% in terms of active requesters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What is driving the decline? Hard to tell. Perhaps requesters abandon crowdsourcing in favor of more automated solutions, such as deep learning. Perhaps requesters with long running jobs build their own workforce (e.g., using UpWork). Perhaps they use alternative platforms, such as Crowdflower. Or perhaps my own metric is flawed, and I need to revise it.&lt;/p&gt;

&lt;p&gt;But, unless we have a bug in the code, the future does not seem promising for Mechanical Turk. And this is a shame.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/3987774592514572537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/3987774592514572537'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2016/02/the-decline-of-amazon-mechanical-turk.html' title='The Decline of Amazon Mechanical Turk'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkU9t7DoEl3oJrwQkmuiFvIVxj3W-76NGpJyCxvWHLVLDWAWgejNy6XImMtF4GnLJCEg96gxk5iiM3AwuGZ9s2fTQrfvRNPD_xkYAHMRmRWDkKoWWb3Gf_ZiQ_lQkhwN5ZwWB228TzgMI/s72-c/mturk-active-requesters.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-2524627210064013557</id><published>2015-06-10T12:38:00.003-04:00</published><updated>2026-02-21T09:22:22.184-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="api"/><category scheme="http://www.blogger.com/atom/ns#" term="crowdsourcing"/><category scheme="http://www.blogger.com/atom/ns#" term="demographics"/><category scheme="http://www.blogger.com/atom/ns#" term="mechanical turk"/><category scheme="http://www.blogger.com/atom/ns#" term="research"/><title type='text'>An API for MTurk Demographics</title><content type='html'>&lt;p&gt;A few months back, I launched &lt;a href=&quot;http://demographics.mturk-tracker.com/&quot;&gt;demographics.mturk-tracker.com&lt;/a&gt;, a tool that runs continuous surveys of the Mechanical Turk worker population and displays live statistics about gender, age, income, country of origin, etc.&lt;/p&gt;

&lt;p&gt;Of course, there are many other reports and analyses that can be presented using the data. In order to make it easier for other people to use and analyze the data, we now offer a simple API for retrieving the raw survey data.&lt;/p&gt;

&lt;p&gt;Here is a quick example: We first call the API and get back the raw responses:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import requests
import json
import pprint
import pandas as pd
from datetime import datetime
import time

# The API call that returns the last 10K survey responses
url = &quot;https://mturk-surveys.appspot.com/&quot; + \
    &quot;_ah/api/survey/v1/survey/demographics/answers?limit=10000&quot;
resp = requests.get(url)
data = json.loads(resp.text)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then we need to reformat the returned JSON object and transform the responses into a flat table:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# This function takes as input the response for a single survey, and transforms it into a flat dictionary
def flatten(item):
    fmt = &quot;%Y-%m-%dT%H:%M:%S.%fZ&quot;
    
    hit_answer_date = datetime.strptime(item[&quot;date&quot;], fmt)
    hit_creation_str = item.get(&quot;hitCreationDate&quot;)
    
    if hit_creation_str is None: 
        hit_creation_date = None 
        diff = None
    else:
        hit_creation_date = datetime.strptime(hit_creation_str, fmt)
        # convert to unix timestamp
        hit_date_ts = time.mktime(hit_creation_date.timetuple())
        answer_date_ts = time.mktime(hit_answer_date.timetuple())
        diff = int(answer_date_ts-hit_date_ts)
    
    result = {
        &quot;worker_id&quot;: str(item[&quot;workerId&quot;]),
        &quot;gender&quot;: str(item[&quot;answers&quot;][&quot;gender&quot;]),
        &quot;household_income&quot;: str(item[&quot;answers&quot;][&quot;householdIncome&quot;]),
        &quot;household_size&quot;: str(item[&quot;answers&quot;][&quot;householdSize&quot;]),
        &quot;marital_status&quot;: str(item[&quot;answers&quot;][&quot;maritalStatus&quot;]),
        &quot;year_of_birth&quot;: int(item[&quot;answers&quot;][&quot;yearOfBirth&quot;]),
        &quot;location_city&quot;: str(item.get(&quot;locationCity&quot;)),
        &quot;location_region&quot;: str(item.get(&quot;locationRegion&quot;)),
        &quot;location_country&quot;: str(item[&quot;locationCountry&quot;]),
        &quot;hit_answered_date&quot;: hit_answer_date,
        &quot;hit_creation_date&quot;: hit_creation_date,
        &quot;post_to_completion_secs&quot;: diff
    }
    return result

# We now transform our API answer into a flat table (Pandas dataframe)
responses = [flatten(item) for item in data[&quot;items&quot;]]
df = pd.DataFrame(responses)
df[&quot;gender&quot;]=df[&quot;gender&quot;].astype(&quot;category&quot;)
df[&quot;household_income&quot;]=df[&quot;household_income&quot;].astype(&quot;category&quot;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We can then save the data to a vanilla CSV file, and see how the raw data looks like:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# Let&#39;s save the file as a CSV
df.to_csv(&quot;data/mturk_surveys.csv&quot;)

!head -5 data/mturk_surveys.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt;,gender,hit_answered_date,hit_creation_date,household_income,household_size,location_city,location_country,location_region,marital_status,post_to_completion_secs,worker_id,year_of_birth
0,male,2015-06-10 15:57:23.072000,2015-06-10 15:50:23,&quot;$25,000-$39,999&quot;,5+,kochi,IN,kl,single,420.0,4ce5dfeb7ab9edb7f3b95b630e2ad0de,1992
1,male,2015-06-10 15:57:01.022000,2015-06-10 15:35:22,&quot;Less than $10,000&quot;,4,?,IN,?,single,1299.0,cd6ce60cff5e120f3c006504bbf2eb86,1987
2,male,2015-06-10 15:21:53.070000,2015-06-10 15:20:08,&quot;$60,000-$74,999&quot;,2,?,US,?,married,105.0,73980a1be9fca00947c59b93557651c8,1971
3,female,2015-06-10 15:16:50.111000,2015-06-10 14:50:06,&quot;Less than $10,000&quot;,2,jacksonville,US,fl,married,1604.0,a4cdbe00c93728aefea6cdfb53b8c489,1992
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Or we can take a peek at the top countries:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# Let&#39;s see the top countries
country = df[&#39;location_country&#39;].value_counts()
country.head(20)
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt;US    5748
IN    1281
CA      30
PH      22
GB      16
ZZ      15
DE      14
AE      11
BR      10
RO      10
TH       7
AU       7
PE       7
MK       7
FR       6
IT       6
NZ       6
SG       6
RS       5
PK       5
dtype: int64
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I hope that the examples are sufficient to get people started using the API, and I am looking forward to seeing what analyses people will perform.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/2524627210064013557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/2524627210064013557'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2015/06/an-api-for-mturk-demographics.html' title='An API for MTurk Demographics'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-2790049802771037523</id><published>2015-06-08T20:07:00.002-04:00</published><updated>2026-02-21T09:22:55.145-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cds"/><category scheme="http://www.blogger.com/atom/ns#" term="crowdsourcing"/><category scheme="http://www.blogger.com/atom/ns#" term="nyu"/><category scheme="http://www.blogger.com/atom/ns#" term="postdoc"/><category scheme="http://www.blogger.com/atom/ns#" term="quality"/><title type='text'>Postdoc Position for Quality Control in Crowdsourcing</title><content type='html'>&lt;p&gt;The Center for Data Science at NYU invites applications for a post-doctoral fellowship in statistical methodology relating to evaluating rater quality for a new research program in the application of crowdsourcing ratings of human speech production.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Duties and Responsibilities&lt;/b&gt;: This is a two-year postdoctoral position affiliated with the NYU Center for Data Science. The successful candidate will join a dynamic group of researchers in several NYU Centers including PRIISM, MAGNET, the Stern School of Business, the NYU Medical School and the Department of Communicative Sciences and Disorders. We are seeking highly motivated individuals to develop and test novel statistical and computational methods for evaluating rater quality in crowdsourced tasks. Responsibilities will include development, testing and implementation of statistical algorithms, as well as preparation of manuscripts for academic publication. Advanced knowledge of R is preferred.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Position Qualifications&lt;/b&gt;: Candidates will ideally have a doctoral degree in Statistics, Biostatistics, Data Science, Computer Science, or a related field, as well as genuine interests and experiences in interdisciplinary research that integrates study of human speech, citizen science games and computational statistics. Candidates will ideally have expertise in the following areas: Bayesian statistics, numerical methods and techniques, psychometrics and/or knowledge of programming languages. Outstanding computing and communication skills are required.&lt;/p&gt;

&lt;p&gt;Please send CV, letter of intent, and three reference letters to Daphna Harel (daphna dot harel at nyu dot edu) by July 31, 2015.&lt;/p&gt;

&lt;p&gt;The position is for 2 years (subject to good research progress). The successful candidate will be based at the NYU Center for Data Science, under the primary supervision of NYU faculty members Panos Ipeirotis and Daphna Harel, and will closely work with a multidisciplinary team including NYU faculty members Tara McAllister Byun, R. Luke DuBois, and Mario Svirsky. The position will preferably start by September 2015 (start date negotiable).&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/2790049802771037523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/2790049802771037523'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2015/06/postdoc-position-for-quality-control-in.html' title='Postdoc Position for Quality Control in Crowdsourcing'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-7140947874993405531</id><published>2015-05-29T10:20:00.003-04:00</published><updated>2026-02-21T09:27:35.667-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mechanical turk"/><category scheme="http://www.blogger.com/atom/ns#" term="online labor"/><category scheme="http://www.blogger.com/atom/ns#" term="online markets"/><title type='text'>The World Bank Report on Online Labor</title><content type='html'>&lt;p&gt;I am often asked about statistics and data about the global population of &quot;crowdsourcing&quot; workers, going beyond Mechanical Turk. I am happy to say that from now on I will be able to point everyone to &lt;a href=&quot;https://www.dropbox.com/s/97css2nuiihbtx5/Global%20OO%20Study_WB%20Rpt%20Final2.pdf?dl=0&quot;&gt;a study from The World Bank&lt;/a&gt;, which I was fortunate to participate in. The report examines the global landscape of online labor, identifying the opportunities and providing statistics about the global landscape.&lt;/p&gt;

&lt;p&gt;The study will be officially released on Wednesday June 3rd, and for those of you willing to attend the launch event through Webex, here is the information:&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;---&lt;/p&gt;

&lt;p&gt;&lt;b&gt;When&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;Wednesday, June 3, 2015, 9:00AM - 11:30AM EDT&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Where&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://worldbankgroup.webex.com/worldbankgroup/j.php?MTID=m4ac0151d13cd83426d5b5b3614c16f99&quot;&gt;Webex URL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Meeting number: 730 125 194&lt;/p&gt;
&lt;p&gt;Meeting password: online1&lt;/p&gt;
&lt;p&gt;Audio connection: 1-650-479-3207 Call-in toll number (US/Canada)&lt;/p&gt;
&lt;p&gt;Access code: 730 125 194&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Title&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;The New Online Outsourcing Approach for Jobs, Youth and Women&#39;s Empowerment and Services Exports&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Abstract&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;This event will discuss the new online outsourcing (OO) phenomena in the world today, its implications for developing countries, and how your clients can leverage it as an innovative approach for jobs, youth employment and women&#39;s empowerment.&lt;/p&gt;

&lt;p&gt;OO refers to the contracting of third-party workers and providers (often overseas) to supply services or perform tasks via Internet-based marketplaces or platforms. Also known as paid crowdsourcing, online work, microwork and other names - these technology-mediated channels allow clients to outsource their paid work to a large, distributed, global labor pool of remote workers, to enable performance, coordination, quality control, delivery, and payment of such services online.&lt;/p&gt;

&lt;p&gt;The global OO marketplace today includes numerous emerging and growing platforms; such as Upwork (formerly Elance-oDesk), CrowdFlower, CloudFactory, Amazon Mechanical Turk, etc. There are also a wide variety of services that can be performed online - such as data entry, digitization, graphics rendering and design, programming and apps development, accounting and legal services, etc. Workers in developing countries can have access and perform jobs from all over the world - as long as they have computer and Internet access. In addition to jobs and income - OO offers workers flexible time and working environment, develops skills for professionals, and drives positive social change for youth and women.&lt;/p&gt;

&lt;p&gt;The event will share with participants the OO study that covers comprehensively the definition and segments, trends and market size, economic and non-financial impact on workers, and the implications and policy recommendations. In addition the event will show how you can apply the online toolkit to assess the readiness of your client countries for OO.&lt;/p&gt;

&lt;p&gt;The World Bank&#39;s ICT Unit is excited to share this new global study and toolkit, which was developed in partnership with the Rockefeller Foundation and Dalberg Global Development Advisors.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Who:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chair: Mavis Ampah, Lead ICT Policy Specialist and Practice Lead on Jobs, GTIDR&lt;/li&gt;
&lt;li&gt;Siou Chew Kuek, Senior ICT Specialist and TTL, GTIDR&lt;/li&gt;
&lt;li&gt;Cecilia Paradi-Guilford, ICT Innovation Specialist and Co-TTL, GTIDR&lt;/li&gt;
&lt;li&gt;Saori Imaizumi, ICT Innovation and Education Consultant, GTIDR&lt;/li&gt;
&lt;/ul&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/7140947874993405531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/7140947874993405531'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2015/05/the-world-bank-report-on-online-labor.html' title='The World Bank Report on Online Labor'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-9111941576764023466</id><published>2015-04-06T15:17:00.002-04:00</published><updated>2026-02-20T21:13:44.783-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mechanical turk"/><category scheme="http://www.blogger.com/atom/ns#" term="surveys"/><title type='text'>Demographics of Mechanical Turk: Now Live! (April 2015 edition)</title><content type='html'>&lt;p&gt;One of the most common questions that I receive is whether I have new data about the demographics of Mechanical Turk workers. The latest data that I had collected were back in 2010, and it was not clear how things have changed since then. The key problem was not that I could not run additional surveys; that would have been trivial. However, the results of the surveys were always changing over time: the aggregate data varied too much across surveys, so I refrained from publishing data that seemed to be unreliable.&lt;/p&gt;

&lt;p&gt;So, I thought of how to tackle two problems at once:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make it easy for people to see current data about the demographics of Mechanical Turk workers&lt;/li&gt;
&lt;li&gt;Make it easy to understand the inherent variability of the collected data, and potentially understand the source of the variability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For that reason, we built a new site:&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://demographics.mturk-tracker.com/&quot;&gt;http://demographics.mturk-tracker.com/&lt;/a&gt;&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;(please also check &lt;a href=&quot;http://www.behind-the-enemy-lines.com/2015/06/an-api-for-mturk-demographics.html&quot;&gt;the API&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;The site displays live data about the demographics of the workers, based on a small 5-question survey that users are asked to answer (paying 5 cents each). To be able to capture the time variability, we post one survey every 15 minutes, allowing us to observe changes in the answers over time. We also restrict each worker to be able to answer the survey only once per month.&lt;/p&gt;

&lt;p&gt;A few key results:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://demographics.mturk-tracker.com/#/countries&quot; target=&quot;_blank&quot;&gt;Country&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Overall, we see that approximately 80% of the Mechanical Turk workers are from the US and 20% are from India.&lt;/p&gt;

&lt;img border=&quot;0&quot; height=&quot;242&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm-KVHx5m-hphdg3cZ2IufZy0VBNwGtsW0XuYpF-ab3FuJzS1Fx4zAf2dbkkhPgv6V13QHE1Slf49NmX7bqiSp7cafM15jyjGp7M90WDSqHJWXP7cwiKjxXebV0rXTv5P4o3IV5eQA9Ys/s1600/countries.PNG&quot; width=&quot;640&quot;/&gt;

&lt;p&gt;However, this mix is not stable during the day. Around 8-10am UTC (i.e., 3am NYC time, 1:30pm India time), there is a much higher number of workers from India (~50%), which then goes down to 5% at 8-10pm UTC.&lt;/p&gt;

&lt;img border=&quot;0&quot; height=&quot;254&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6SNL-AiJTG4Inos8tScmLloSeMNA07GtBl7febIMvmHwQ45jsefFAPOFiEIg80hb4gu4k5i7fw6xdTZyy4yCIrcUjYLscnnfP1yo47l0iaccdriR0dUVSfDqJmIUfZpyjZFdY7lUgg80/s1600/countries-hourly.PNG&quot; width=&quot;640&quot;/&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://demographics.mturk-tracker.com/#/gender&quot; target=&quot;_blank&quot;&gt;Gender&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The gender participation seems to be balanced, with roughly 50% males and 50% females. The charts that examine variability based on hour of day and day of the week do not show any change in this pattern.&lt;/p&gt;

&lt;img border=&quot;0&quot; height=&quot;252&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZjjJzqY04fv9lEdZqY5e9gLCmMSwV8-BEIVYYOV6Lfj6LAmGbPZGntp82-DPw2ltCpACML7fdXHB5yWv4hyOUwfZlHd3r7YQUILKOBBMa17dlHyzYTjnwtCTq1QDLQgQwXQNIcIViCsM/s1600/gender.PNG&quot; width=&quot;640&quot;/&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://demographics.mturk-tracker.com/#/yearOfBirth&quot; target=&quot;_blank&quot;&gt;Year of birth&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Roughly 50% of the workers are born in the 1980s and are around 30 years old. Approximately 20% of the workers are born in the 1990s, and another 20% are born in the 1970s.&lt;/p&gt;

&lt;img border=&quot;0&quot; height=&quot;248&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYNfX5lWbXTRpgW61J1L1e35w_FAyOLVW2pFLWUcQRbeiYe34d5WEwT6W0iBGTfV-tvqhuyxej3pgBgwTrDPOfeGVpx5Dx0riX5U0292c-_FefMBpZzHCkzLQrYJQgUjijXTAywWiXpXQ/s1600/year-of-birth.PNG&quot; width=&quot;640&quot;/&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://demographics.mturk-tracker.com/#/maritalStatus&quot; target=&quot;_blank&quot;&gt;Marital Status&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Approximately 40% of the workers are single, 40% are married, and 10% are cohabitating.&lt;/p&gt;

&lt;img border=&quot;0&quot; height=&quot;232&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtM59YVnUSyJjxZMi1vGlW8LO3Dke4Ln-Vo_V6PXWadUj5nExSwZAqmx5fM_OAL10qCfdlG1m-cxENj84rSfF1jqLwgSI8VhdwoSka12LbWQmaolDWNQS4jruGyHZayJROUId_264AXl8/s1600/marital-status.PNG&quot; width=&quot;640&quot;/&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://demographics.mturk-tracker.com/#/householdSize&quot; target=&quot;_blank&quot;&gt;Household Size&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Approximately 15% live alone. Then 25% have a household size of two and 25% have a household size of three. Around 25% live in a household of four, and around 10% have five or more members in their household.&lt;/p&gt;

&lt;img border=&quot;0&quot; height=&quot;262&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT3j4p3qvgh9ZaTGvTqe9_AA2jSypay2CA9HH9qk6txtzWFEa4-nZty1hqMG8SIIm8l_aN2X8_UAduHbc_muKE3kCxvKKT_mmekd0-oGHbUdSdfafOBZhIXMK5MPhr69C_e-jZBVgNCIg/s1600/hh-size.PNG&quot; width=&quot;640&quot;/&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://demographics.mturk-tracker.com/#/householdIncome&quot; target=&quot;_blank&quot;&gt;Income level&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The median household income is around $50K per year for US Turkers, which is on par with the median US household income. Indian workers have considerably lower household income, with most of them being around $10K/yr.&lt;/p&gt;

&lt;img border=&quot;0&quot; height=&quot;226&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu5TbOGGPTFXgrMuu-HWvvKms-_D5UNIU_1qecmt7lYBvfG4GkysR5RYoDB5rvSuZJKO5ZQGUVbM4yHYbPgTLezy9lVqRGfmpTkTSwyu_agstXdu6HVKLiph-VfFxGv9za2tZoaoJnbgw/s1600/hh-income.PNG&quot; width=&quot;640&quot;/&gt;

&lt;p&gt;&lt;strong&gt;Next steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In our next steps, we plan on making the (anonymized) survey responses available through an API, and potentially add a few more graphs of interest. If you have any idea or suggestion, please send it my way.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/9111941576764023466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/9111941576764023466'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2015/04/demographics-of-mechanical-turk-now.html' title='Demographics of Mechanical Turk: Now Live! (April 2015 edition)'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm-KVHx5m-hphdg3cZ2IufZy0VBNwGtsW0XuYpF-ab3FuJzS1Fx4zAf2dbkkhPgv6V13QHE1Slf49NmX7bqiSp7cafM15jyjGp7M90WDSqHJWXP7cwiKjxXebV0rXTv5P4o3IV5eQA9Ys/s72-c/countries.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7118563403027467631.post-4502494331055736351</id><published>2014-06-09T16:07:00.003-04:00</published><updated>2026-02-21T09:29:27.913-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="crowdsourcing"/><category scheme="http://www.blogger.com/atom/ns#" term="education"/><category scheme="http://www.blogger.com/atom/ns#" term="mooc"/><category scheme="http://www.blogger.com/atom/ns#" term="moocs"/><category scheme="http://www.blogger.com/atom/ns#" term="peer reviewing"/><category scheme="http://www.blogger.com/atom/ns#" term="teaching"/><title type='text'>My Peer Grading Scheme</title><content type='html'>&lt;p&gt;One of the components that I use in my class is student presentations.&lt;/p&gt;

&lt;p&gt;While I like having students present, I always had a hard time grading the presentations. Plus, many students seemed to target the presentation to me, trying to sound too technical and advanced, leaving the audience in the class bored and uninterested.&lt;/p&gt;

&lt;p&gt;For that reason, I adopted a peer-grading scheme. Students have to present to the class, and get rated by the class, and not me. (Although, I still reserve a small degree of editorial judgment for assigning the grades.) Here is how my scheme works, after a few years of experience.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Rating scale:&lt;/b&gt; Students assign a grade from 0 to 10 to the presentations.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;No self-grading:&lt;/b&gt; Students do not grade their own presentations. (&lt;i&gt;Early on, there were students that were assigning 10 to themselves, and lower grades to everyone else. Now they can still grade themselves if they want but the grade is ignored&lt;/i&gt;.)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Normalization:&lt;/b&gt; All assigned grades are normalized, to have a zero mean and one standard deviation. (&lt;i&gt;This normalization was introduced to fight the problem where a student would try to game the system by assigning low grades to everyone else, hoping to lower the average rating of all other students&lt;/i&gt;.)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Grade assignment:&lt;/b&gt; The presentation grade is the average of the assigned normalized scores. Formally, each student \(s_i\) assigns to presentation \(t\) a grade \(z(s,t)\). The overall grade of the presentation is the mean value $E[z(*,t)]$ of the \(z(s_i,t)\) grades.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Ensuring careful grading by asking students to estimate class rating:&lt;/b&gt; One problem with the peer grading scheme was that many students did not take it seriously enough, and assigned random grades (typically, the same grade to everyone). To avoid indifferent grading, I decided to give credit (~10%) based on the correlation of the assigned grades \(z(s,t)\) against the mean value $E[z(*,t)]$ (across all presentations \(t\)). This ensured that students will at least try to figure out what other students will assign to the presentation, and will not assign random grades.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Separate assigned and estimated grades:&lt;/b&gt; The problem with introducing the requirement to agree with the class was that some students believed to be better assessors than the rest of the class. So, they felt that their own grade was the correct one, and did not like losing credit for assigning their own &quot;true&quot; grade. To address that issue, I now ask students to assign two grades: their own grade \(z_p(s,t)\), and an estimate of the class grade \(z_c(s,t)\). The personal grade \(z_p\) is used to compute $E[z(*,t)]$ in Step 4, and I use the \(z_c\) to compute the correlation in Step 5.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Examine self-grading:&lt;/b&gt; Given that the class-estimate grades are not directly used to grade a presentation, students are also asked to provide an estimate of their own grade as part of Step 6. Effectively, students are encouraged to estimate properly their own grade.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The only thing that I have not tried so far is to modify Step 4 to take into consideration the different correlations from Step 5, effectively weighting each student&#39;s grades based on their correlation with the rest of the class. However, most students tend to exhibit the same, moderate agreement with the class (typical correlation values are in the 0.4-0.6 range, after rating 15-20 presentations), so in practice I do not expect to see a difference.&lt;/p&gt;

&lt;p&gt;Overall, I am pretty happy with the scheme. Students indeed try to impress the class (and not me), and many presentations are interesting, interactive, and engaging. The grades are also very consistent with the overall feeling that I get for each presentation, so I did not have to practice my &quot;editorial oversight&quot; and adjust the grade very often (only in a couple of cases, where the students ran into technical problems during the presentation). I would be really interested to try this scheme in one of the big MOOC classes that use peer grading, and see if it can instill the same sense of responsibility in peer grading.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/4502494331055736351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7118563403027467631/posts/default/4502494331055736351'/><link rel='alternate' type='text/html' href='http://www.behind-the-enemy-lines.com/2014/06/my-peer-grading-scheme.html' title='My Peer Grading Scheme'/><author><name>Panos Ipeirotis</name><uri>http://www.blogger.com/profile/15283752183704062501</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>