1. A non-transitory machine-readable storage medium encoded with instructions executable by a processor to: receive a first set of domain names, each domain name in the first set being a domain name that was previously identified as valid; receive a second set of domain names, each domain name in the second set being a domain name that was previously identified as algorithmically generated; and train, using the first set and the second set, a predictive model to identify a given domain name as one of a valid domain name or an algorithmically generated domain name based on a plurality of syntactic features of the given domain name, wherein the plurality of syntactic features include a count of impossible character n-grams included in at least a portion of the given domain name, where n is a positive integer greater than one.