0
AdWords API Workshops 2013Account Performance &OptimizationFinding the needle in your haystack                            ...
Overview1. How to Optimize    ○   The Optimization Cycle2. Developing a solid reporting backend    ○   Reporting Workflow ...
How to Optimize?      Google Confidential and Proprietary
Measure                Profile      Optimization Cycle       Optimize                            Google Confidential and P...
Measure                       Profile     Performance data     Structural data             AdHoc      AWQL             Ser...
Measure                     Profile     Kratu     Custom (eg. Epsilon)     Predictive Analysis       Optimize             ...
Measure               Profile     Automatic     Manual     Semi Automatic       Optimize                           Google ...
Developing a solid reporting backend                            Google Confidential and Proprietary
Reporting Workflow                      MCC Info                                        Managed     List<ManagedCustomer> ...
Report                 Data Storage Report Downloader              Processor                  MySql                       ...
Implementing a MySql ReportProcessorconnection.setAutoCommit( false);statement.execute(" SET UNIQUE_CHECKS=0; ALTER TABLE ...
Implementing a MongoDB ReportProcessorfor (File file : localFiles) {    CSVReader csvReader = new CSVReader(new InputStrea...
KeywordOptimizations     Google Confidential and Proprietary
TIS                                 SearchParameter[ ]                                   Keyword / Placement      Targetin...
TIS - Search Parameters & Fields  SearchParameter[ ]                AttributeType[ ] (fields)  ●   AdSpecList             ...
TIS EXAMPLELanguageSearchParameter        = englishRelatedToUrlSearchParameter    = http://www.someplumbers.com/LocationSe...
TES                       TrafficEstimatorSelector                           CampaignEstimateRequest[ ]      Criterion[ ],...
campaignEstimateRequest.setCriteria(new Criterion[] { uk, english }); adGroupEstimateRequest.setMaxCpc(new Money(null, 100...
Example Optimization - Epsilon Greedy Inspiredhttp://en.wikipedia.org/wiki/Multi-armed_banditAutomatic                    ...
Discovering optimization opportunities with Kratu                                        Google Confidential and Proprietary
Kratu - Open Source Issue and Opportunity Discovery                                         Google Confidential and Propri...
Kratu - Open Source Issue and Opportunity Discovery●   Open Source, Google driven     ○   http://google.github.com/kratu/●...
Demo Timehttp://google.github.com/kratu/examples/adwordshealthcheck/                                                  Goog...
Kratu - Implementation - Overview                       Reporting    Data Storage       backend      MySql              Fe...
Kratu - Implementation●   Easy to add other signals     ○   Add any key/value pair to your data, define a weight and a thr...
Kratu - backend exampleQuick example using Restlet and Gson:router.attach("/accountreports/{accountId}", ReportRest.class)...
Kratu - backend exampleJson response example:[{     "lostISBudget": 0,     "lostISRank": 90,     "key": "7767761884-Search...
Q&A
Upcoming SlideShare
Loading in...5
×

Account Performance and Optimization

1,287

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,287
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
66
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Account Performance and Optimization"

  1. 1. AdWords API Workshops 2013Account Performance &OptimizationFinding the needle in your haystack Google Confidential and Proprietary
  2. 2. Overview1. How to Optimize ○ The Optimization Cycle2. Developing a solid reporting backend ○ Reporting Workflow ○ Strategies for scaling, processing and storage ○ Introduction to sample applications3. Keyword Optimizations ○ What are TIS and TES ○ Discovering good ideas with TIS and TES ○ Automated keyword optimizations strategy4. Discovering optimization opportunities with Kratu ○ Introduction to Kratu ○ AdWords Optimization Report in Kratu ○ Kratu backend example Google Confidential and Proprietary
  3. 3. How to Optimize? Google Confidential and Proprietary
  4. 4. Measure Profile Optimization Cycle Optimize Google Confidential and Proprietary
  5. 5. Measure Profile Performance data Structural data AdHoc AWQL Services Reports Optimize Google Confidential and Proprietary
  6. 6. Measure Profile Kratu Custom (eg. Epsilon) Predictive Analysis Optimize Google Confidential and Proprietary
  7. 7. Measure Profile Automatic Manual Semi Automatic Optimize Google Confidential and Proprietary
  8. 8. Developing a solid reporting backend Google Confidential and Proprietary
  9. 9. Reporting Workflow MCC Info Managed List<ManagedCustomer> Customer ServiceReport Definition ReportType Report Data Storage DateRange Report Downloader Processor MySql MongoDB ... Fields n-Threads Google Confidential and Proprietary
  10. 10. Report Data Storage Report Downloader Processor MySql MongoDB ... n-Threads Process local temp files Keys must guaranteeBased on Parses rows using a Uniqueness perMultipleClient CSVReader ReportRowReportDownloader (Date/Day, Segments)example Write calls to Storage must be in batches Rows Updates areEach Thread runs a frequentReportDownloder with: Batch size depends on technology/memory Create indexes for: ● AdWordsSession ● ClientCustomerId Shard data based on ● AccountId ● ReportDefinition account, subMCCs, dates ● Date/Day ● CSV & GZip or common attributes ● CampaignId ● Segments... Google Confidential and Proprietary
  11. 11. Implementing a MySql ReportProcessorconnection.setAutoCommit( false);statement.execute(" SET UNIQUE_CHECKS=0; ALTER TABLE ... DISABLE KEYS;");for (File file : localFiles) { preparedStatement = "INSERT INTO .. (.) VALUES (.) ON DUPLICATE KEY UPDATE(.)"; CSVReader csvReader = new CSVReader(new InputStreamReader (new FileInputStream( file.getAbsolutePath() + ".gunzip"), " UTF-8"), ,, ", 1); reportRows = new ModifiedCsvToBean <Report>(). parseReport(mapping, csvReader); for (Report reportItem : reportRows) { addInsertToBatch(reportItem, preparedStatement); // Executing the Batch every 500 inserts to reduce memory usage if (batchSize++ >= 500) { preparedStatement.executeBatch(); connection.commit(); batchSize = 0; } }...}...statement.execute(" SET UNIQUE_CHECKS=1; ALTER TABLE ... ENABLE KEYS;"); Google Confidential and Proprietary
  12. 12. Implementing a MongoDB ReportProcessorfor (File file : localFiles) { CSVReader csvReader = new CSVReader(new InputStreamReader( new FileInputStream(file),"UTF-8"), ,, ", 1); List<Report> reportObjectList = ModifiedCsvToBean<Report>().parseReport(mapping, csvReader); csvReader.close(); // Save in MongoDB (there is also an AppEngine implementation) // Iterates using Google Gson: gsonBuilder.create().toJson(Object) // and DBObject: com.mongodb.util.JSON.parse(jsonObject) noSqlStorage.save(reportObjectList);} Google Confidential and Proprietary
  13. 13. KeywordOptimizations Google Confidential and Proprietary
  14. 14. TIS SearchParameter[ ] Keyword / Placement TargetingIdeaSelector Ideas / Stats AttributeType[ ] (fields) Targeting Idea Service TargetingIdea[ ] Type_AttributeMapEntry[ ] (field,value) Google Confidential and Proprietary
  15. 15. TIS - Search Parameters & Fields SearchParameter[ ] AttributeType[ ] (fields) ● AdSpecList ● Average Cpc ● CategoryProductsAndServices ● Average Targeted Monthly Searches ● Competition ● Category Products and Services ● ExcludedKeyword ● Competition ● IdeaTextFilter ● Criterion ● IncludeAdultContent ● Extracted from Webpage ● Language ● Global Monthly Searches ● Location ● Idea Type ● Network NEW ● Keyword Category ● PlacementType ● Keyword Text ● RelatedToQuery ● Negative Keywords ● RelatedToUrl ● Search Share ● SearchVolume ● Search Volume ● SeedAdGroupId ● Targeted Monthly Searches ... Google Confidential and Proprietary
  16. 16. TIS EXAMPLELanguageSearchParameter = englishRelatedToUrlSearchParameter = http://www.someplumbers.com/LocationSearchParameter = ukRequestType. IDEAS, IdeaType. KEYWORD{AttributeType. KEYWORD_TEXT, AttributeType. SEARCH_VOLUME,AttributeType. AVERAGE_CPC ,AttributeType. COMPETITION} Targeting Idea Service KEYWORD_TEXT searchVol avgCPC Competition london plumbing service 16 5.13 0.858 london plumbing services 46 9.41 0.765 emergency plumbing service 28 6.71 0.912 ... new Google Confidential and Proprietary
  17. 17. TES TrafficEstimatorSelector CampaignEstimateRequest[ ] Criterion[ ], campaignId AdGroupEstimateRequest[ ] adGroupId, maxCPC KeywordEstimateRequest[ ] keyword, maxCpc, isNegative Traffic Estimator Service CampaignEstimate[ ] campaignId AdGroupEstimate[ ] adGroupId KeywordEstimate[ ] criterionId, Min & Max StatsEstimatesaverageCpc, averagePosition, clicksPerDay, impressionsPerDay, clickThroughRate, totalCost Google Confidential and Proprietary
  18. 18. campaignEstimateRequest.setCriteria(new Criterion[] { uk, english }); adGroupEstimateRequest.setMaxCpc(new Money(null, 1000000)); // 1€ adGroupEstimateRequest.setKeywordEstimateRequests( ... london plumbing service emergency plumbing service london emergency plumbing services london... )... Traffic Estimator Service Keyword avgCPC avgPosition dayClicks totalCost CTRdayImpressionslondon plumbing service, 0.87, 2.00, 0.02, 0.02, 0.04, 0.58plumbing services london, 0.71, 8.56, 0.54, 0.39, 0.01, 49.33 new new ... Google Confidential and Proprietary
  19. 19. Example Optimization - Epsilon Greedy Inspiredhttp://en.wikipedia.org/wiki/Multi-armed_banditAutomatic auto glass repair● Regular car glass replacement● Set and forget● Needs close monitoring windshield repair vehicle glass repairSemi-automatic KW Research● Manual lookup car window repair Using TIS+TES● Suggest KWs for exchange fix car glass● KW Research can be manual car glass glass window glasses repair KW window repair Google Confidential and Proprietary
  20. 20. Discovering optimization opportunities with Kratu Google Confidential and Proprietary
  21. 21. Kratu - Open Source Issue and Opportunity Discovery Google Confidential and Proprietary
  22. 22. Kratu - Open Source Issue and Opportunity Discovery● Open Source, Google driven ○ http://google.github.com/kratu/● Client-side, runs in the browser. Implemented in JavaScript● Includes prebuilt working example for AdWords ○ Starting point created by experienced Google Account Managers ○ Used internally at Google to display data for millions of accounts ○ Provided as-is. Use with caution. Google accepts no liabilities.● BYOD - Bring Your Own Data ○ Anything that can be converted to a JS Array with key/value objects ○ Includes simple JSON and CSV loaders● We offer a Google built sample backend● Easily integratable with other, non-AdWords data Google Confidential and Proprietary
  23. 23. Demo Timehttp://google.github.com/kratu/examples/adwordshealthcheck/ Google Confidential and Proprietary
  24. 24. Kratu - Implementation - Overview Reporting Data Storage backend MySql Fetch MongoDB Process ... Store Web server /kratu/ /rest/accounts/ Google Confidential and Proprietary
  25. 25. Kratu - Implementation● Easy to add other signals ○ Add any key/value pair to your data, define a weight and a threshold● Flexible model ○ Custom and built-in calculation of opportunity/issue ○ Compose new signals from multiple data points ○ Custom and built-in event handlers (integrate with other systems) ○ Custom and built-in formatting● Paginations for larger number of accounts● Re-use data and signals to produce new reports ○ Targeted reports, eg. upselling opportunities, mobile adoption ○ Personalized reports, eg. individual for Account managers● End-to-end tutorial available here: ○ http://google.github.com/kratu/tutorial/ Google Confidential and Proprietary
  26. 26. Kratu - backend exampleQuick example using Restlet and Gson:router.attach("/accountreports/{accountId}", ReportRest.class);String accountId = (String) getRequestAttributes().get(" accountId");@Getpublic JsonRepresentation getAccountPerformanceReportHandler() { // Gets Reports from MongoDB or MySql as Java Objects List<Report> listAccountReports = Report.getReportByAccountIdMonth( accountId, date, "AccountReport"); String resultJsonList = gson.toJson(listAccountReports); JsonRepresentation jsonRepresentation = new JsonRepresentation(resultJsonList); jsonRepresentation.setMediaType(MediaType.APPLICATION_JSON); return jsonRepresentation;} Google Confidential and Proprietary
  27. 27. Kratu - backend exampleJson response example:[{ "lostISBudget": 0, "lostISRank": 90, "key": "7767761884-Search Network" , "mccId": 2742928629, "timestamp": "Mar 6, 2013 8:51:08 AM" , "accountId": 7767761884, "accountDescriptiveName": "Julian 1$-day" , "cost": 0, "clicks": 0, "impressions": 0, "conversions": 0, "ctr": 0, "avgCpm": 0, "avgCpc": 0, "avgPosition": 0, "currencyCode": "USD", "adNetwork": "Search Network"}] Google Confidential and Proprietary
  28. 28. Q&A
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×