A3-OmarKhan
From CS294-10 Visualization Fa07
Contents |
[edit] Introduction
In the process of helping some people improve their Google AdWords campaigns, we have noticed that both the AdWords system, and Google Analytics, are pretty atrocious at helping the end-user analyze spending and conversion trends. The raw data is only available in reports, and so examining trends, and making hypotheses about potential courses of action to increase profits is quite hard. We hope to better illustrate trends with some basic interactive visualizations.
[edit] Background
To place an ad on Google, you setup an ad campaign. within the campaign, you define a set of advertisements (e.g. those things you see on the right hand side of a Google search results page) and keywords that trigger those ads. Associated with each keyword is a bid, which is the maximum you're willing to pay for a click on your ad when that keyword is queried. Thus every click on your ad incurs a cost. Furthermore, you can put tracking code on your site such that when an ad leads to some desired activity on your site (called a conversion), that conversion is logged in the AdWords system. For e-commerce sites, conversions are usually product purchases, and you also log the value of that purchase in the AdWords system.
Thus, the typical question for someone advertising on an ads network is: how do i maximize the value of my conversions while minimizing the cost (the ad spend)? Within the ads system there are many ways of doing this: choosing better keywords, improving your ad text, smarter keyword bidding, etc.. Outside the ad system, you might improve your website, and that may lead to more conversions. However, to best decide where to focus your time and money, you need an effective tool for analyzing all the data. The Google reporting mechanisms are largely text-based, and they can throw a lot of data at you. Third parties have made systems like VisualCalc that can throw lots of graphing techniques at your data, but VisualCalc feels like a swiss army knife and it's hard to know how to use it to answer questions about your data.
[edit] Some Questions to Answer
- what is the current status of all my ad campaigns (spending as well as profit/loss)?
- how is ad spend trending over time, for all campaigns to individual campaigns down to individual keywords? how does this correlate with conversion value?
- what are the best performers (at all levels, from ad campaign down to individual keywords)? what are the worst performers? Are there such bad performers that can be quickly identified as simply money wasters?
[edit] Data Domain
We have data from an AdWords account. This includes costs and sales values for various keywords across different ad groups and campaigns. For a given keyword on a given day, we know the: - ad group it is part of - bid: maximum cost per click advertiser is willing to pay - average position the ad has appeared at - impressions: the number of times the ad has been shown for that keyword - click thru: the number of clicks the ad has received - total cost - the number of conversions (sales) the click has induced - the value for those conversions
for each ad group, we also know the campaign it is part of.
we have this data going back a few years.
[edit] Storyboard
In this part we have explored the possible visualization we would like to show and the interactive elements of this software.
[edit] Profit trend
First of all, users can have a overview on how its products profit overtime. Profit is defined as revenue minus cost. On the right-hand side of the display, users can pick a time duration in which the profit data would be plotted, and users can select interesting ad campagne. Because profit change may be due to either more click throughs on ads, or changes on bid strategies (choosing better keywords or placing higher bids), we will indicate "user" changes with dashed edge.
By right clicking on each point, users can look into the details of the corresponding campagne. There are two options available: (1) users can review a similar profit trend based on different *ad groups* in the campagne; (2) users can review treemap of the campagne for better break-down details, for which we will discuss next. Similary, for a profit trend plot on *ad groups*, users can review how each keyword works by either (1) profit trend plot based on *keywords* of an ad group or (2) revenue-cost relationship trend of the keywords, for which we'll discuss in the end.
[edit] Profit details
Because there is hierarchical relation in the data (an *ad campagne* is consist of multiple *ad groups*, and an ad group is composed by several *keywords*), we take advantage of treemap to show the profit details. The area is divided based on the cost of each ad campagne, ad group, or keyword. And each are is color coded by the profit. High profit is colored as green, and negative profit would be colored as red. The coloring rule is showed in the color legend below the treemap. Using this treemap, users can recognize which ad cost the most but didn't give any profit at all (big red area).
[edit] Revenue cost trend
In this plot, users can understand the performance of each keyword; whether an keyword performs better because of more cost. This can help users reasoning better strategy. In this plot, the point of a keyword should be better staying in the upper-left corner in the plot because it represents high revenue but low cost.
[edit] Implementation
[edit] Platform
We used Jeff's latest prefuse toolkit, "flare", to implement this assignment. The latest toolkit can be downloaded here [1] and here is the API documentation [2]. The assignment is implemented under Adobe Flex builder environment, created as a "pure Actionscript project".
The reason we chose flare was that we attended the flare tutorial given by jeff and found that the visualization tricks such as animation were well supported and amazing. Although in the end we didn't use much animation, we found the toolkit handy to leverage the various visualizations we needed, such as the linechart, treemap, and various color and shape encoders.
To write our assignment, we needed many UI controls such as checkbox, combobox, etc to specify filters. However, the current version of flare is implemented for actionscript project and the environment doesn't support those controls. In contrast, such advanced controls are supported by the desktop-based "flex" project. To get around this, we tried to wrap the visualization object into the better-supported "flex" project, but it turned out not to work. We spent a significant amount of time on this problem and found there is a BUG in the Flash player so that the visualization is not updated properly. We want to thank Jeff for helping us diagnose the problem. He tried to get around this BUG, but it remains in some situations.
[edit] What's done and what's not done comparing to the original design
Due to this lack of controls, you will see a relatively dry UI. With the only label and button components in actionscript, we used a text label and a button to represent a checkbox. Originally we also wanted to create start/end time filter. Since it's too time consuming to create customized combobox (or date selector), the time filter was not implemented.
There are three major components in our assignment: a treemap to review the costs and revenue of the ad hierarchy (campaigns, ad groups, keywords); a line chart to view how ad profits change over time; and a line chart to compare revenue and cost for each keyword. Here is the description of the interaction in each part.
[edit] Data processing
To reiterate, there is a hierarchy where an ad campaign contains multiple ad groups and an ad group contains multiple keywords. The data is organized such that you have costs and revenues for each keyword (revenue is associated with a keyword if clicking on that keyword's ad ultimately leads to a sale). NOTE: The data is first processed to be anonymous for privacy reasons. Here is the schema and sample of the data.
Date AdCampaign AdGroup Keyword Cost Revenue
10/1/07 c1 a1 kw1 $0.40 0.0
9/17/07 c2 a1 kw2 $0.40 0.0
9/8/07 c3 a1 kw3 $0.65 0.0
9/12/07 c3 a1 kw3 $0.88 0.0
9/15/07 c3 a1 kw3 $0.73 0.0
9/18/07 c3 a1 kw3 $0.65 0.0
9/19/07 c3 a1 kw3 $0.80 0.0
The data are than aggregated to feed the three visualization components.
[edit] Interaction descriptions
[edit] LineChart
By clicking the "LineChart" button on the startup page, users can browse through how much each ad-group cost in a ad-campaign overtime. (Each line represents an ad-group.) An ad-campagn "c12" was chosen and fixed in the LineChart. In the future, it's better to include interaction to let users to choose the ad-campaign they are interested.
Then, users can browse the cost trends for the sub ad-groups of ad-campaign. They can filter out some trends by clicking on the "O"/"X" buttons, to compare certain ad-groups. In addition, by hovering the mouse on data points, the details would be shown on top of the vis. Users can also click on a data point (a cost value of a ad-group on a certain date), several other visualization options would pop up: users can look at the detail trends of the keywords in this ad-group, or look at the Revenue-Cost Chart and TreeMap, which would be described in the following.
[edit] Revenue-Cost LineChart
The revenue cost chart is the breakdown revenue-cost comparison of each keyword. For each ad_group, the overtime revenue-cost data points are connected. Users can also hover through data points to see the detail info shown on the top of the vis. They can also filter out the lines of some keywords.
As you can see, most of the keyword didn't get revenue at all. And we can roughly tell that some keywords essentially cost more the others. But, the vis results is hard to compare whether a keyword is gaining better revenue and having less cost (the ideal keyword!), as what we expected in the storyboarding phase. The reasons is that there are too many data points connected together. It's better to have a time filter and we have already mentioned the reason we didn't include it here in the assignment.
[edit] TreeMap
For a particular time period, the tree map gives a quick sense of the cost and percent profits of each keyword. One can immediately see that there are a number of red areas, many of which correspond to keywords that had cost but never lead to purchases (0 revenue).
The implementation was straightforward but for some z-order issues with different levels of the hierarchy. One can hover over different rectangles, then move away, and see that certain boundaries are now thin lines where they used to be thicker. This eliminates some of the boundaries that are suggestive at illustrating particularly good/bad campaigns and ad groups.
Filtering should be easier than using the menu at the side. However, double click filtering was causing problems with the visualization and we didn't pursue it in detail. Instead, we have the EXTRA INFO section at the bottom, which shows info about each region when it is hovered over. This would have been good to integrate onto the visualization, either as a pop up (though occlusion then might've been a problem) or directly on the rectangles, as many tree maps do.
[edit] Work load
Omar worked on the TreeMap and the first-step data processing. This took about 15 hours. Kenghao worked on the two line charts. Kenghao spent about 15 hours to work on this project. A lot of time was spent on getting around the checkbox control problem.
Hopefully with some polish these works can turn into Flare samples. One thing that was missing were detailed Flare samples beyond what Jeff initially provided.
[edit] Download
The included zip file (see here) contains a lot of stuff. To run the project, execute
hw3-final/code/bin/code.swf
There are 4 code files:
hw3-final/code/code.as (organizing frame)
hw3-final/code/hw3/*.as (3 files: line chart, tree map, revenue chart)

