+var MODEL_NAME = 'Query and Conversion Rate';
+var PROJECT_ID = '40310033428';
+// These are the names of your columns from the training
+// data to ignore. Change these to create variations of your
+// This is the output column for your training data, or
+// what value the model is supposed to predict
+var OUTPUT_COLUMN = 'Conv. rate';
+ var sheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1kKLYXMGDNFRJ-sAtW5xAdXoG_dK0pNItXov2FVLOq5g/edit#gid=2144226213").getSheetByName("Initial Training Data");
+ //createTrainingModel(sheet);
+ var sheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1kKLYXMGDNFRJ-sAtW5xAdXoG_dK0pNItXov2FVLOq5g/edit#gid=2144226213").getSheetByName("Additional Training Data");
+ //updateTrainedModelData(sheet);
+ var trainingStatus = Prediction.Trainedmodels.get(PROJECT_ID, MODEL_NAME).trainingStatus;
+ Logger.log("Training Status: " + trainingStatus);
+ // We are going to test it by querying with training data
+ var sheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1kKLYXMGDNFRJ-sAtW5xAdXoG_dK0pNItXov2FVLOq5g/edit#gid=2144226213").getSheetByName("Initial Training Data");
+ var testData = sheet.getDataRange().getValues();
+ var headers = testData.shift();
+ for(var r in testData) {
+ for(var i in headers) {
+ if(COLS_TO_IGNORE.indexOf(headers[i]) == -1 && headers[i] != OUTPUT_COLUMN) {
+ Logger.log(makePrediction(queries));
+/***********************************
+ * This function accepts a sheet full of training
+ * data and creates a trained model for you to query.
+ ***********************************/
+function createTrainingModel(sheet) {
+ var trainingInstances = [];
+ // get the spreadsheet values
+ var trainingData = sheet.getDataRange().getValues();
+ var headers = trainingData.shift();
+ for(var r in trainingData) {
+ var row = trainingData[r];
+ for(var i in headers) {
+ if(COLS_TO_IGNORE.indexOf(headers[i]) == -1 && headers[i] != OUTPUT_COLUMN) {
+ var output = row[headers.indexOf(OUTPUT_COLUMN)];
+ trainingInstances.push(createTrainingInstance(inputs,output));
+ var insert = Prediction.newInsert();
+ insert.id = MODEL_NAME;
+ insert.trainingInstances = trainingInstances;
+ var insertReply = Prediction.Trainedmodels.insert(insert, PROJECT_ID);
+ Logger.log('Trained model with data.');
+// Helper function to create the training instance.
+function createTrainingInstance(inputs,output) {
+ var trainingInstances = Prediction.newInsertTrainingInstances();
+ trainingInstances.csvInstance = inputs;
+ trainingInstances.output = output;
+ return trainingInstances;
+function updateTrainedModelData(sheet) {
+ var updateData = sheet.getDataRange().getValues();
+ var headers = updateData.shift();
+ for(var r in updateData) {
+ var row = updateData[r];
+ for(var i in headers) {
+ if(COLS_TO_IGNORE.indexOf(headers[i]) == -1 && headers[i] != OUTPUT_COLUMN) {
+ Logger.log("inputs: " + inputs);
+ var output = row[headers.indexOf(OUTPUT_COLUMN)];
+ Logger.log("output: " + output);
+ var update = createUpdateInstance(inputs,output)
+ var updateResponse = Prediction.Trainedmodels.update(update, PROJECT_ID, MODEL_NAME);
+ Logger.log('Trained model updated with new data.');
+// Helper function to create the update instance.
+function createUpdateInstance(inputs,output) {
+ var updateInstance = Prediction.newUpdate();
+ updateInstance.csvInstance = inputs;
+ updateInstance.output = output;
+/***************************
+ * Accepts a 2d array of query data and returns the
+ * predicted output in an array.
+ ***************************/
+function makePrediction(data) {
+ var request = Prediction.newInput();
+ request.input = Prediction.newInputInput();
+ request.input.csvInstance = data[r];
+ var predictionResult = Prediction.Trainedmodels.predict(
+ request, PROJECT_ID, MODEL_NAME);
+ Logger.log("Prediction for data: %s is %s",
+ JSON.stringify(data[r]), predictionResult.outputValue);
+ retVal.push(predictionResult.outputValue);